Tag: 语言实现

java接口如何在内部实现? (虚函数表?)

C ++有多重inheritance。 在汇编级别实现多重inheritance可能相当复杂,但是在线上有很好的介绍如何正常完成(vtables,pointer fixups,thunk等)。 Java没有多个实现inheritance,但是它有多个接口inheritance,所以我不认为每个类都有一个单独的vtable可以实现这一点。 java如何在内部实现接口? 我意识到,与C ++相反,Java是Jit编译的,所以不同的代码段可能会有不同的优化,而不同的JVM可能会做不同的事情。 那么,是否有一些JVM遵循的一般策略,或者是否有人知道特定JVM中的实现? 另外JVM经常虚拟化和内联方法调用,在这种情况下根本就没有涉及到vtable或等价物,所以询问实现虚拟/接口方法调用的实际汇编序列是没有意义的,但是我认为大多数JVM仍然保留一些如果它们没有能够虚拟化所有的东西,那么可以使用类的一般表示。 这个假设是错误的吗? 这种表示看起来像一个C ++的vtable? 如果是的话,接口是否有单独的vtables,这些如何与类vtable相关联? 如果是这样,对象实例可以有多个vtable指针(类/接口vtables),就像C ++中的对象实例一样? 类types和接口types对同一对象的引用总是具有相同的二进制值,或者它们可以不同,就像在C ++中需要指针修正一样? (仅供参考: 这个问题对CLR提出了类似的问题 ,在这篇msdn文章中似乎有一个很好的解释,尽pipe现在可能已经过时了,但我还没有find类似于Java的东西。 编辑: 我的意思是“实现”的意思是“GCC编译器如何实现整数加法/函数调用/等”,而不是“Java类ArrayList实现List接口”的含义。 我知道这是如何在JVM字节码级别上工作的,我想知道的是JVM在加载类文件和编译字节码之后生成的是什么样的代码和数据结构。

为什么大多数C#程序中的主要方法入口点是静态的?

为什么大多数C#程序中的主要方法入口点是静态的?

有.Net的Common Lisp实现吗?

有.Net的Common Lisp实现吗?

为什么__FILE__大写和__dir__小写?

在Ruby 2.0.0-p0中,引入了__dir__variables,以便于访问当前正在执行的文件的目录。 为什么当__FILE__是大写时__dir__小写?

为什么Python对可以嵌套的静态块的数量有限制?

Python中静态嵌套块的数量限制为20个。也就是说,嵌套19 for循环将会很好(虽然过于耗时; O(n^19)是疯狂的),但是嵌套20将会失败: SyntaxError: too many statically nested blocks 有这个限制的根本原因是什么? 有没有办法增加限制?

为什么接口中的所有字段都是隐式的静态和最终的?

我只是想了解为什么在接口中定义的所有字段都是隐式static并且是final 。 保持字段static的想法对我来说是有意义的,因为你不能拥有一个接口的对象,但为什么它们是final (隐含的)? 任何人都知道为什么Javadevise人员将界面设置为static和final的界面?

PyPy – 它怎么可能击败CPython?

来自Google开源博客 : PyPy是Python中Python的重新实现,使用先进的技术来获得比CPython更好的性能。 多年的努力终于得到了回报。 我们的速度结果经常超过CPython,范围从稍微慢一些,到实际应用程序代码的高达两倍,在小型基准testing中加速达到10倍。 这怎么可能? 哪个Python实现被用来实现PyPy? CPython ? PyPyPy或PyPyPyPy打败他们的分数有什么机会? (在一个相关的说明…为什么有人会尝试这样的事情?)

如何实现C ++exception处理运行时?

我对C ++exception处理机制如何工作很感兴趣。 具体来说,exception对象存储在哪里,它如何传播通过几个范围,直到被捕获? 它存储在一些全球性的地区吗? 由于这可能是编译器特定的,有人可以在g ++编译器套件的上下文中解释这一点吗?