开发某些语言的问题是什么,例如使用LLVM / Parrot的一些优化技术Python。

PYPY,LLVM,鹦鹉是公共平台开发的主要技术。
我认为这是这样的:

  • pypy - 构建VM的框架,并在优化的VM中为Python构建VM
    因此,这是相当通用的解决方案。该过程如列出:
    1. dynamic_language_code->
    2. pypy前端 - >
    3. PYPY内部代码 - 字节码 - >
    4. PYPY优化 - >
    5. 离开PYPY代码:
      一个。 PYPY后端的一些VM(例如JVM)
      b。 SOM套件制作自己的VM
      C。处理/运行PYPY内部代码

我对这个过程是对的吗?对于Python,有优化的VM?特别是默认情况下,在VM中构建了用于优化的PYPY代码(步骤5.C) - 适用于Python,并且每个语言处理都可以停止并通过它运行吗?

  • 鹦鹉 - 很像pypy,但是没有5.a和5.b?动态处理的一些内部改进(鹦鹉魔术饼干).

两个鹦鹉pypy 旨在创建一个平台,该平台创建一个通用的动态语言运行时,但是PYPY想要更多 - 也可以创建更多的VM。
pypy的感官在哪里?对于我们需要创建更多VM的内容?专注于一个VM(例如在鹦鹉中) - 因为有一个常见的代码级别 - pypy内部字节码或鹦鹉的VM。我认为我们无法获得更好的选择,将pypy字节码转换为使用pypy VM的新创建的pypy字节。

  • LLVM - 我认为这与pypy非常相似,但没有VM发电机。
    它是成熟,设计精良的环境,具有与pypy相似的目标(但没有VM发生器),但要进行低级别的结构和插入的精彩优化/JIT技术

将其视为: LLVM 是一般用途,但是 鹦鹉 和** pypy*为动态语言设计。在PYPY / Parrot中,引入一些复杂的技术更容易 - 因为它比LLVM更高 - 像Sophiencicate Compiler一样,可以更好地理解高级代码并产生更好的汇编代码(人类在合理的时间内都无法写入),然后LLVM一?

问题:

  1. 我对吗?是否有任何理由将某些动态语言移植到例如鹦鹉的情况下会更好?

  2. 我看不到关于鹦鹉开发python的活动。是因为使用Python c扩展名在鹦鹉上不起作用吗?同样的问题在pypy中

  3. 为什么其他VM不想移至LLVM / Parrot。例如Ruby->鹦鹉,CLR/ JVM-> LLVM。对于他们来说,转向更复杂的解决方案会更好吗? LLVM处于高发展过程中,并让大公司投资。

  4. 我知道问题可能是在重新编译中是资源,如果需要更改字体模式 - 但这不是必须的 - 我们可以尝试将旧字节码转换为新编译器,而新的编译器会产生新的字节码(Java仍然不需要更少的Java,仍然需要解释自己的字节码 - 因此前端可以检查并将其转换为新的字节码)?

  5. 链接链接(例如LLVM中的JVM库)有什么问题(如果我们以某种方式将Java/jvm/scala移植到LLVM)?

  6. 如果我错了某个地方,你能纠正我吗

一些添加:

=============

澄清

我想弄清楚所有这些软件是如何组成的 - 将一个软件移植到另一个软件是什么问题。

有帮助吗?

解决方案

任何人都无法在堆栈流问题中回答,但我给它一个剪辑镜头。

首先,这三个项目解决了什么问题?

  1. PYPY允许您以高级语言实现解释器,并免费获得生成的JIT。这是一件好事是,您在langauge和平台之间没有依赖性不匹配。这就是PYPY-CLR比Ironpython更快的原因。更多信息在这里: http://codespeak.net/pypy/dist/pypy/doc/extradoc.html - >使用JIT编译器生成的CLI/.NET的Python的高性能实现)

  2. LLVM是编译器的低级基础架构。一般的想法是拥有一个“高级组装”。所有的访问都可以在该语言上使用。然后,周围有大量的基础架构来帮助您构建编译器(JIT或AOT)。在LLVM上实施动态语言是可能的,但需要更多的工作,然后在PYPY或PARROT上实施它。例如,您无法免费获得GC(有GC可以与LLVM一起使用,请参见 http://llvm.org/devmtg/2009-10/ - > VMKIT视频)试图建立一个基于LLVM的动态Langauges更好的平台: http://www.ffconsultancy.com/ocaml/hlvm/

  3. 我对鹦鹉的了解不多,但是据我了解,他们想构建一个专门用于动态langauges的标准VM(Perl,PHP,Python ....)。这里的问题与汇编到JVM/CLR相同,有一个依赖性失误,只有一个小得多。 VM仍然不知道您的langauge的语义。当我Unterstant的用户代码仍然很慢。 ((http://confreaks.net/videos/118-elcamp2010-parrot)

您问题的答案:

我对吗?是否有任何理由将某些动态语言移植到例如鹦鹉的情况下会更好?

那是一个努力的问题。建立自己的自我并为您而专门的,最终会更快,但要付出更多的努力。

我看不到关于鹦鹉开发python的活动。是因为使用Python c扩展名在鹦鹉上不起作用吗?同样的问题在pypy中。

靶向鹦鹉(此时)不太可能比PYPY受益。为什么没有其他人这样做。

为什么其他VM不想移至LLVM / Parrot。例如Ruby->鹦鹉,CLR/ JVM-> LLVM。对于他们来说,转向更复杂的解决方案会更好吗? LLVM处于高发展过程中,并让大公司投资。

好的,这个问题有很多东西。

  • 就像我说的那样,llvm很难移动,鹦鹉也不是那么快(如果我错了,请纠正我)。
  • Ruby有Rubinius Witch试图在Ruby和LLVM中做很多事情(http://llvm.org/devmtg/2009-10/ - >使用LLVM加速Ruby)。
  • LLVM上有CLR/JVM的实施,但它们都已经具有非常成熟的插入,这些投资具有巨大的投资。
  • LLVM不是高水平。

我知道问题可能是在重新编译中是资源,如果需要更改字体模式 - 但这不是必须的 - 我们可以尝试将旧字节码转换为新编译器,而新的编译器会产生新的字节码(Java仍然不需要更少的Java,仍然需要解释自己的字节码 - 因此前端可以检查并将其转换为新的字节码)?

我不知道问题是什么。

链接链接(例如LLVM中的JVM库)有什么问题(如果我们以某种方式将Java/jvm/scala移植到LLVM)?

观看我上面链接的VMKIT的视频,显示了他们有多远以及问题所在(以及他们如何解决)。

如果我错了某个地方,你能纠正我吗

您写的很多东西都是错误的,或者我只是不符合您的意思,但是我链接的内容应该使很多东西更清晰。


一些例子:

Clojure

克雷勒不希望实施自己的VM和所有图书馆的所有工作。那去哪里?由于Clojure是一种新的Langauge,您可以通过限制像Python或Ruby这样的语言可以使用的许多动态内容来以在JVM等平台上效果很好的方式构建它。

Python

该语言(实际上)不能更改为在JVM/CLR上运行良好。因此,实施Python在那些不会带来巨大的加速。静态编译器也不会很好地工作,因为静态保证不多。在C中编写JIT会很快,但很难更改(请参阅Psyco项目)。使用LLVM JIT可以工作,并由Unladen燕子项目探索(再次 http://llvm.org/devmtg/2009-10/ - > Unladen吞咽:LLVM上的Python)。有些人想让Python进入Python,因此他们开始了PYPY和他们的想法接缝以非常好(见上文)。鹦鹉也可以工作,但我没有看到任何人尝试过(自由)。


一切:

我认为您感到困惑,我可以理解。花点时间阅读,倾听,观看您能获得的一切。不要强调自己。这有很多部分,最终您会看到什么是如何融合在一起,什么是有意义的,即使您知道很多,仍然有很多讨论可能会做。问题是在哪里实施新语言或如何加快旧语言有很多答案,如果您问3个人,您可能会得到三个不同的答案。

其他提示

您要实施什么?您的问题措辞非常困惑(我意识到英语可能不是您的母语)。

LLVM和PYPY都是成熟的,有用的项目,但此时实际上并没有重叠。 (在某一时刻,PYPY可以像反对C代码一样生成LLVM字节码(在静态地汇编为解释器),但它并没有提供太多的性能益处,也不再支持。)

PYPY让您在rpython中编写解释器,并将其用作描述来生成本机代码解释器或JIT; LLVM是用于构建编译器工具链的C ++框架,该工具链也可用于实现JIT。 LLVM的优化器,代码生成和平台支持要比PYPY高得多,但它不太适合构建动态语言运行时(请参阅 Unladen吞咽回顾 有关原因的一些例子)。特别是,它在收集/使用运行时反馈(这对于使动态语言表现良好的绝对必要)不如PYPY基于跟踪的JIT有效。同样,LLVM的垃圾收集支持仍然有些原始,并且缺乏PYPY自动生成JIT的独特能力。

顺便说一句,两个Java实施是在LLVM上建造的J3/vmkit鲨鱼.

您可能会考虑观看 PYPY谈话 上周从斯坦福大学出发;它提供了相当不错的概述,概述了PYPY的工作原理。卡尔·弗里德里希·博尔兹(Carl Friedrich Bolz) 介绍 还提供了VM实施状态的良好概述。

主要原因?因为VM设计是 不是 一项定居的技术,并且拥有各种具有不同目标和目标的VM,可以并行尝试各种机械,而不是必须串联尝试。

JVM,CLR,PYPY,PARROT,LLVM和其余的都以不同的方式针对不同类型的问题。这类似于Chrome,Firefox,Safari和IE都使用自己的JavaScript引擎的原因。

Unladen Swallow试图将LLVM应用于Cpython,并花费更多的时间来解决LLVM中的问题,而不是在做Python具体的事情方面所做的。

python-on-parrot遭受了Perl 6和Python之间的语义差异,从而引起了前端汇编过程的问题,因此该领域的未来努力可能会使用PYPY前端来针对Parrot VM。

不同的VM开发人员肯定会密切关注其他人在做什么,但是即使他们提出好主意,他们也会在将它们纳入它们之前对其进行旋转。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top