欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Sun最近很亢奋啊,又把StrongTalk开源了 SUN虚拟机RubySmalltalkC 

程序员文章站 2023-12-21 12:36:40
...
链接在这里。连StrongTalk的卖点,一个性能卓越的虚拟机,都被开源了。StrongTalk是SmallTalk的变种,允许静态类型(所以才叫"Strong"而不是small哈。当然,静态类型可用可不用,随喜),支持类型推断。这些还不是主要卖点。StrongTalk的最大卖点还在于速度。他的虚拟机运用所谓的“类型反馈”技术(下面会讲),动态地编译和优化代码,把常用的代码内联,极大地提高了运行速度。StrongTalk的类型系统独立于编译器。也就是说,纯粹动态类型的Smalltalk代码也能在StrongTalk上运行,而且速度和用了静态类型的代码一样快。Sun怎么做到的嗫?关键还是在这个类型反馈机制上:StrongTalk在语言运行时收集性能相关的统计(runtime profiling)。前几百次按通常的方式动态分配函数调用,但数据收集够了后,虚拟机就可以把最常用的函数调用内联到系统里,把常用函数的调用翻译成一个JMP, 跳到最有可能的函数实现那里,然后再来一个CMP,看是不是跳对了地方。只有当CMP失败的时候,系统才执行通常的动态分配,也就是在Hashtable上找来找去。嗯,搞Java的各路英雄不要激动。这个的确是JIT的技术。不过呢,上述的动态内联技术91年就出论文,类型反馈94年也出论文了。所以说JIT的技术其实是从Smalltalk那群牛银那里继承来的。不要小看了runtime profiling。其实大部分函数运行时的类型都在很多时候都可以唯一确定。大量的基准测试得出的结果是95%的代码调用可以优化为一个JMP+一个CMP,不需要进一步执行复杂的动态分配查找。呵呵,搞C++的老大们可以留鼻血了。这种优化连vtable都省了。也就是说很多时候动态语言的函数调用比C++还快。有意思的是,虽然StrongTalk的编译器支持静态类型,但编译器优化时完全忽略静态类型!这当然不是因为Sun的程序员2B,而是没有这个必要。静态类型并不能给优化提供多少好处。顺便说一句Ruby。现在CRuby的虚拟机用的是普通的动态分配的方法,每次都在表里面找来找去。现在Sun开源了StrongTalk的虚拟机,也许能让下一代的Ruby虚拟机性能大大提高。

上一篇:

下一篇: