小编Gab*_*ier的帖子

LuaJIT真的比其他所有JIT动态语言都快吗?

根据计算机语言基准测试游戏,LuaJIT实现似乎击败了所有其他JIT-ed动态语言(V8,Tracemonkey,PLT Scheme,Erlang HIPE)一个数量级.

我知道这些基准测试不具代表性(正如他们所说:"哪种编程语言实现具有最快的基准测试程序?"),但这仍然令人印象深刻.

在实践中,情况确实如此吗?有人测试过Lua的实现吗?

lua jit luajit

48
推荐指数
3
解决办法
3万
查看次数

在像Haskell这样的函数式语言中,memoized值的生命周期是多少?

在具有惰性语义的纯函数语言(例如Haskell)中,计算结果被记忆,因此对具有相同输入的函数的进一步评估不会重新计算该值,而是直接从memoized值的缓存中获取它.

我想知道这些记忆值是否会在某个时间点被回收?

  1. 如果是这样,这意味着必须在以后重新计算已记忆的值,并且记忆的好处并非如此退出恕我直言.
  2. 如果没有,那么好吧,这很容易缓存所有内容......但它是否意味着程序 - 如果运行足够长的时间 - 将总是消耗越来越多的内存?

想象一个程序执行密集的数值分析:例如使用二分法算法找到数十万个数学函数列表的根.

每次程序评估具有特定实数的数学函数时,结果都将被记忆.但是在算法期间,只有很小的概率才会出现完全相同的实数,导致内存泄漏(或者至少是非常糟糕的使用).

我的想法是,也许memoized值只是"范围"到程序中的某些东西(例如到当前的continuation,调用堆栈等),但我无法找到关于这个主题的实际内容.

我承认我没有深入研究Haskell编译器实现(懒惰?),但是,有人可以向我解释它在实践中是如何工作的吗?


编辑:好的,我从最初的几个答案中理解了我的错误:纯语义意味着参考透明度,这反过来并不意味着自动记忆,但只是保证它没有问题.

我认为网上的一些文章对此有误导性,因为从初学者的角度来看,参考透明度属性似乎很酷,因为它允许隐式记忆.

haskell functional-programming memoization

16
推荐指数
2
解决办法
841
查看次数

XULRUNNER是否适合替代其他C++桌面应用程序框架,如QT?

的XULrunner /壁虎似乎是开发GUI密集型应用程序真的很有趣(通过使用广泛使用的技术,比如HTML/CSS/SVG/XUL/JavaScript)的.但是内置的C++ APIS(XPCOM,NECKO,......)看起来如此古老而复杂.此外,普遍缺乏文档/开发工具真的很可怕.

另一方面,QT有一个非常好的平台,并且有很好的文档和支持.UI部分真的是"传统的".

您对XULRUNNER有什么经验,特别是与其他C++桌面应用程序框架(如QT/GTK/MFC ......)相比?缺什么?什么是真棒?

问题:如果我想将现有的MFC应用程序迁移到跨平台的C++桌面应用程序框架,那么使用XULRUNNER而不是QT或GTK是否明智?

c++ qt xulrunner

13
推荐指数
2
解决办法
2493
查看次数

是否有一种编程语言,其中类型可以通过值进行参数化?

参数化类型(如C++模板)是一件好事,但大多数时候它们只能通过其他类型进行参数化.

但是,在C++中有一个特殊情况,可以通过整数对模板进行参数化.例如,固定长度数组是一个典型的用例:

template<typename T, int SIZE> class FixedArray 
{ 
    T m_values[SIZE]; 

public: 
    int getElementCount() const { return SIZE; }

    T operator[] (int i) const { 
        if (i<0 || i>=SIZE) 
            throw;
        else 
            return m_values[i]; 
    }  
};

void f()
{
    FixedArray<float, 5> float_array; // Declares a fixed array of 5 floats. 
    //The size is known at compile time, and values are allocated on the stack.
}
Run Code Online (Sandbox Code Playgroud)

在C++中只允许使用常量整数和指针,但我认为使用任何值进行参数化(浮点数,类实例等)可能会很有趣.这可以允许在编译时表达前提条件(通常在文档中非正式指定),并在运行时自动检查它们.例如,这是假设的C++方言中的"Interval"模板:

// Interval of type T between TMin and TMax. 
template<typename T, T TMin, T TMax> …
Run Code Online (Sandbox Code Playgroud)

type-systems programming-languages

13
推荐指数
2
解决办法
393
查看次数

C/C++编译器是否在编译单元之间进行优化?

可以在同一编译单元(即同一文件)中的函数之间进行诸如常量传播的优化.

例如 :

int f(int x)
{
    return 3 + x;
}

int main(void)
{
    printf("%d\n", 1 + f(4));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在那个例子中,我认为一个足够智能的编译器可以将'4'常量传播到函数'f',用另一个常量'3'求解整数算术,并传回结果值,从而将所有内容折叠到最终值'8'.

(好吧,如果我错了,请纠正我..)

但是,如果函数'f'在另一个编译单元中,会发生什么.由于它们都是单独编译的,因此编译器无法优化这种方式.

这是否意味着优化只能在同一个编译单元中进行,或者是否存在某些形式的链接时延迟优化?

c optimization

8
推荐指数
1
解决办法
1623
查看次数

Erlang有完整的REPL吗?

有没有办法在Erlang中拥有一个完整的解释器,而不仅仅是一个"shell".

由于它是一种动态语言,无法在解释器中定义命名函数有点令人失望......我怀疑这是因为编译单元(模块)必须由VM执行才能显式编译,但可能是REPL作为动态/可重新编译模块存在吗?

erlang

6
推荐指数
3
解决办法
3695
查看次数

是否有类似Hypercard的Web应用程序?

最近,我发现了一个名为Wagn的有趣的Wiki/CMS/Database混合体,其中最重要的信息单元是"卡片".这个术语立刻让我想到了Hypercard.正如预期的那样,该应用程序中存在一些"Hypercard-ness".

您是否知道其他具有"Hypercard-ness"功能的Web应用程序/框架,或者它的继任者是否仍然必须被发明?

注意:我坚持使用Web应用程序,因为我已经知道桌面应用程序.

hypercard

6
推荐指数
1
解决办法
3913
查看次数

单独的Erlang应用程序应该在同一台机器上共享同一个VM吗?

我有一台CouchDB实例在一台机器上运行,因此有自己的Erlang VM进程.如果我在该机器上运行另一个单独的Erlang应用程序,那么在CouchDB和我的应用程序之间共享相同的VM是否更好,或者是否建议启动新的Erlang节点?

erlang couchdb

6
推荐指数
2
解决办法
365
查看次数

是否可以将文件用作两个远程进程("文件套接字")之间的双向通信通道?

这是场景:

  • 用户可以访问两台计算机

  • 由于防火墙限制,这些计算机无法与网络套接字通信

  • 但是,两者都可以访问具有第三台计算机上的读/写权限的公共网络共享

我的问题是:是否可以编写在两台机器上执行的小应用程序,允许通过仅使用网络共享上的文件在两者之间建立通信通道?理想情况下,它会模拟流和套接字行为.

我想是这样的:

1)它将涉及两个用于通信的文件,每个方向一个

2)并且有可能在另一个进程正在通过网络写入文件时读取文件.

但我不确定它是否可行,主要是因为我怀疑第2点.但是,在使用NFS的类似Unix的环境中也许是可能的.

可能吗?它已经存在吗?

sockets file-io

6
推荐指数
1
解决办法
291
查看次数

为什么Javascript(大多数)只是一种浏览器端技术超过10年?

最近有很多项目将Javascript推向其他方向:作为通用脚本语言(GLUEScript,Rhino),作为扩展语言(QTScript,Adobe Reader,OO Macros),Widgets(Yahoo Widgets,MS Gadgets,Dashboard)甚至是服务器端的JS和Web框架(CommonJS,Helma,Phobos,V8cgi),这似乎很明显,因为它已经是一种广泛用于Web开发的语言.

但等等,一切都是如此新鲜,没有什么是真正成熟的.然而,JS已经存在了近15年,与其他任何脚本语言一样强大,由ECMA标准化,并且是Web开发的强制技术.

为什么要花费这么多时间来接受其他领域而不是网络浏览器呢?

javascript

5
推荐指数
1
解决办法
351
查看次数

为什么ECMAScript仍然不是W3C的推荐?

理论上,浏览器可以支持多种编程语言,用于网页的客户端脚本.实际上,ECMAScript是在所有浏览器中广泛实现和使用的唯一一个.因此对大多数人来说,它是网络不可或缺的一部分.

但是,它从未被W3C推荐用于网页脚本.尽管客户端交互变得越来越重要,但HTML5似乎确实促进了它.为什么会这样?

  • 是为了防止网络平台上的编程语言垄断?(显然失败了)
  • 是因为W3C更愿意只关注网络的声明方面吗?
  • 或者只是一个政治立场?

javascript w3c ecma262

5
推荐指数
1
解决办法
891
查看次数

使用C++逗号运算符用表达式替换语句是否可以允许更多的编译器优化?

C++逗号运算符用于链接单个表达式,从而产生最后执行的表达式的值作为结果.

例如骨架代码(6个语句,6个表达式):

step1;
step2;
if (condition)
    step3;
    return step4; 
else
    return step5;
Run Code Online (Sandbox Code Playgroud)

可以改写为:( 1个陈述,6个表达式)

return step1, 
       step2,
       condition?
          step3, step4 : 
          step5;
Run Code Online (Sandbox Code Playgroud)

我注意到无法对这些代码进行逐步调试,因为表达式链似乎是作为一个整体执行的.这是否意味着编译器能够执行传统语句方法无法实现的特殊优化(特别是如果步骤是常量或内联)?

注意:我不是在谈论表达序列表达方式的编码风格优点!几乎可以通过表达式替换语句来实现可能的优化.

c++ optimization

3
推荐指数
1
解决办法
268
查看次数