来自Google开源博客:
PyPy是Python在Python中的重新实现,使用先进的技术来尝试获得比CPython更好的性能.多年的努力终于得到了回报.我们的速度结果经常超过CPython,从稍微慢一点到实际应用程序代码的2倍加速,在小基准测试上加速到高达10倍.
这怎么可能?哪个Python实现用于实现PyPy?CPython?PyPyPy或PyPyPyPy击败他们得分的几率是多少?
(在相关的说明中...为什么有人会尝试这样的东西?)
我只是想了解为什么在接口定义的所有域都默认static和final.保持字段的想法static对我来说是有道理的,因为你不能拥有接口的对象,但为什么它们final(隐含地)?
任何人知道为什么Java的设计者在接口使得场去static和final?
我对C++异常处理机制的工作方式很感兴趣.具体来说,存储异常对象的位置以及它如何通过多个范围传播直到被捕获?它存储在一些全球范围内吗?
由于这可能是编译器特定的,有人可以在g ++编译器套件的上下文中解释这一点吗?
Python中静态嵌套块的数量限制为20.也就是说,嵌套19个for循环将很好(虽然过于耗时; O(n^19)是疯狂的),但嵌套20将失败:
SyntaxError: too many statically nested blocks
Run Code Online (Sandbox Code Playgroud)
有这样限制的根本原因是什么?有没有办法增加限额?
在Ruby 2.0.0-p0中,__dir__引入了变量以便于访问当前正在执行的文件的目录.
为什么__dir__大写时__FILE__是小写的?
我看不到语言的评估策略与其纯度之间的联系。考虑到推文作者的声誉,我肯定忽略了一些东西。也许有人可以阐明一些观点。
haskell functional-programming language-implementation lazy-evaluation purity
是否有.Net的Common Lisp实现?
C++有多重继承.在程序集级别实现多重继承可能非常复杂,但在线上有关于如何正常完成(vtables,指针修正,thunks等)的良好描述.
Java没有多个实现继承,但它确实有多个接口继承,所以我不认为每个类有一个vtable的直接实现可以实现它.java如何在内部实现接口?
我意识到与C++相反,Java是Jit编译的,因此不同的代码片段可能会有不同的优化,不同的JVM可能会做不同的事情.那么,是否存在许多JVM遵循的一般策略,或者有人知道特定JVM中的实现吗?
此外,JVM通常是虚拟化和内联方法调用,在这种情况下根本没有涉及vtable或等效项,因此询问实现虚拟/接口方法调用的实际汇编序列可能没有意义,但我认为大多数JVM仍然保留一些如果类无法将所有内容虚拟化,那么这些类的一般表示形式即可使用.这个假设是错的吗?这种表示形式是否像C++ vtable一样?如果是这样,接口有单独的vtable,它们如何与类vtable链接?如果是这样,对象实例可以有多个vtable指针(对于类/接口vtable),就像C++中的对象实例一样吗?对同一对象的类类型和接口类型的引用是否总是具有相同的二进制值,或者它们是否可以像C++中那样需要指针修复?
(供参考:这个问题提出了类似CLR的相似之处,这篇msdn文章似乎有一个很好的解释,虽然现在可能已经过时了.我找不到任何类似的Java.)
编辑:
从http://code.google.com/p/unladen-swallow/wiki/ProjectPlan我引用:
"使用JIT还可以让我们将Python从基于堆栈的机器移动到注册机器,这已被证明可以提高其他类似语言的性能(Ierusalimschy等,2005; Shi等,2005)."
在大学里,我为一个带有递归过程的语言构建了一个简单的编译器 - 它为每个被调用的过程维护堆栈帧 - 这样就可以递归调用它们,这样参数和返回值就可以工作....
2件事:
1)考虑到上面引用中使用的术语,我是否正确地认为我实施的内容将被视为"基于堆栈的机器"?
2)如果我在第(1)点的假设是正确的,那么"注册机器"如何工作?即它与基于堆栈的机器有何不同?
谢谢!
python language-theory language-design language-implementation