是什么阻碍了Ruby,Python获得Javascript V8的速度?
无。
好吧,好吧:钱。(还有时间,人,资源,但如果你有钱,你可以买这些。
V8拥有一支才华横溢,高度专业化,经验丰富(因此高薪)工程师的团队,他们在为动态OO语言创建高性能执行引擎方面拥有数十年的经验(我是单独说的 - 总的来说,它更像是几个世纪)。他们基本上是创建Sun HotSpot JVM(以及许多其他人)的同一个人。
首席开发人员 Lars Bak 已经在 VM 上工作了 25 年(所有这些 VM 都导致了 V8),这基本上就是他的整个(职业)生活。一些编写 Ruby VM 的人甚至还不到 25 岁。
是否有任何Ruby / Python功能阻碍了V8引擎的优化(例如内联缓存)的实现?
鉴于至少IronRuby,JRuby,MagLev,MacRuby和Rubinius具有单态(IronRuby)或多态内联缓存,答案显然是否定的。
现代 Ruby 实现已经进行了大量的优化。例如,对于某些操作,Rubinius的类比YARV的类更快。现在,这听起来并不令人兴奋,直到你意识到Rubinius的类是用100%纯Ruby实现的,而YARV的类是在100%手工优化的C中实现的。Hash
Hash
因此,至少在某些情况下,Rubinius可以生成比GCC更好的代码!
或者这是谷歌投入V8项目的资源问题。
是的。不仅仅是谷歌。V8源代码的血统现在已经25年了。在V8上工作的人还创建了Self VM(迄今为止,它是有史以来最快的动态OO语言执行引擎之一),Animorphic Smalltalk VM(迄今为止,有史以来最快的Smalltalk执行引擎之一),HotSpot JVM(有史以来最快的JVM,可能是最快的VM周期)和OOVM(有史以来最高效的Smalltalk VM之一)。
事实上,V8的首席开发人员Lars Bak参与了其中的每一个,以及其他一些。
高度优化JavaScript解释器的动力更大,这就是为什么我们看到Mozilla,Google和Microsoft之间投入了如此多的资源。JavaScript必须在一个(通常是不耐烦的)人在等待它的时候实时下载、解析、编译和运行,它必须在一个人与它交互的时候运行,而且它是在不受控制的客户端环境中这样做的,这个环境可能是一台电脑、一部手机或一个烤面包机。它必须是有效的,才能在这些条件下有效地运行。
Python和Ruby在由开发人员/部署者控制的环境中运行。一个强大的服务器或桌面系统,通常限制因素是内存或磁盘I / O之类的东西,而不是执行时间。或者可以利用缓存等非引擎优化。对于这些语言,专注于语言和库功能集而不是速度优化可能更有意义。
这样做的附带好处是,我们有两个很棒的高性能开源JavaScript引擎,它们可以并且正在被重新用于各种应用程序,如Node.js。
-
-
-
java string.getBytes(“UTF-8”) javascript equivalent 我在java中有这个字符串: 我的印象是 unescape(encodeURIComponent()) 会正确地将字符串转换为 UTF-8。难道不是这样吗? 参考:
-
在 REST API 调用之前对 meta 进行 OPTIONS 调用 我试图理解这个系统是如何在引擎盖下工作的。该系统是基于非常标准的,我没有得到的客户端在每次API调用之前进行调用,并且XML内容以该格式返回。它使用泽西爪哇。 B.此调用是由浏览器自
-
使用 Java 进行 AES 加密,并使用 Javascript 进行解密 我正在制作一个应用程序,它需要基于Java的AES加密和基于JavaScript的解密。我使用以下代码进行加密作为基本形式。