元循环解释器,虚拟机和提高的性能之间有什么关系?


12

我已经在网上阅读了有关元循环解释器(包括SICP)的信息,并且研究了一些实现的代码(例如PyPy和Narcissus)。

我已经阅读了很多有关两种语言的文章,它们充分利用了元循环评估Lisp和Smalltalk。据我了解,Lisp是第一个自托管的编译器,而Smalltalk具有第一个“真正的” JIT实现。

我尚未完全了解的一件事是,那些解释器/编译器如何才能获得如此出色的性能,或者换句话说,为什么PyPy比CPython更快?是因为反射吗?

而且,我的Smalltalk研究使我相信JIT,虚拟机和反射之间存在联系。诸如JVM和CLR之类的虚拟机允许进行大量的类型自省,我相信它们可以在实时(我想是AOT)编译中大量使用。但是据我所知,虚拟机有点像CPU,因为它们具有基本的指令集。虚拟机是否有效,因为它们包含类型和参考信息,从而可以实现与语言无关的反映?

我之所以这么问,是因为现在许多解释型语言和编译型语言都将字节码用作目标(LLVM,Parrot,YARV,CPython),并且传统的VM(例如JVM和CLR)已经获得了令人难以置信的性能提升。有人告诉我它与JIT有关,但据我所知,自从Smalltalk和Sun自己的Self从事Java以来​​,JIT并不是什么新鲜事物。我不记得过去的VM表现特别出色,JVM和.NET之外的非学术类VM并不多,而且它们的性能绝对不如现在好(我希望可以提出这一主张,但我想从个人经验谈起)。

然后突然之间,在2000年代末,情况发生了变化,甚至对于既定的语言,也出现了许多具有良好性能的VM。是否发现了有关JIT实现的信息,该信息使几乎每个现代VM的性能都飙升了?可能是纸还是书?


3
钱。过去用于C ++和Fortran的资金现在被用于HotSpot,CLR,Mono,V8,Nitro,SpiderMonkey等。
JörgW Mittag 2013年

我只能猜测,但是我认为这只是随着时间的推移而有所改善,就像此处所描述的joelonsoftware.com/articles/fog0000000017.html
布朗


1
@Gomi这与实现语言与实现的语言有多相似无关。有用RPython编写的JavaScript,Lisp,Prolog,SmallTalk和Ruby解释器,它们得到的PyPy完全相同。RPython基于Python的唯一原因是它是由一群Python爱好者创建的。RPython的使PyPy快速运行的功能与Python无关:自动JIT编译器生成,垃圾收集器等-是的,原则上,大多数都可以使用其他语言来完成。但是,您必须创建一个全新的编译器。

4
-1,因为您似乎在这里至少有3个不同的问题:(a)为什么元循环实现如此好?(b)由于类型信息,虚拟机是否高效?自省对性能有好处吗?(c)在2000年代后期,VM的普及率如何飙升,突然之间它们都有良好的表现?我认为最好单独问这些问题。
2013年

Answers:


1

3分之2:“元循环”和“高性能”语言运行时之间没有关系。通过将JIT编译为本机代码并运行本机代码,可以实现高性能的元循环运行时。没有理由必须用Python或Hisp用Lisp等来编写高性能Python运行时。但是,如果您认为自己的语言比其他语言更强大,更具表达力,那么为什么不使用它来编写它自己的运行时?或者,如果您认为自己的语言比其他语言“更好”,那么为什么要麻烦实现它呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.