LLVM,Parrot,JVM,PyPy + python

Rob*_*mba 15 python jvm pypy parrot llvm

开发某些语言有什么问题,例如python用于一些LLVM/Parrot的优化技术.

PyPy,LLVM,Parrot是通用平台开发的主要技术.
我觉得这样:

  • PyPy - 构建VM的框架,内置优化的VM for python
    所以它是非常通用的解决方案.该过程如下所示:
    1. dynamic_language_code - >
    2. PyPy前端 - >
    3. PyPy内部代码 - 字节码 - >
    4. PyPy优化 - >
    5. 留下PyPy代码和:
      a.某些VM的pyPy后端(如jvm)
      b.som Kit创建自己的VM
      c.处理/运行PyPy内部代码

我是对的关于这个过程吗?对于python,有优化的VM?特别是默认情况下,在VM中构建优化的PyPy代码(步骤5.c) - 这是用于python的,每个语言处理都可以停在那里并由它运行?

  • 鹦鹉 - 很像PyPy,但没有5.a和5.b?动态处理的一些内部改进(Parrot Magic Cookies).

ParrotPyPy都旨在创建一个创建通用动态语言运行库的平台,但PyPy需要更多 - 同时创建更多VM.
PyPy的感觉在哪里?我们需要创建更多的VM?不应该更好地专注于一个VM(如parrot) - 因为有一个共同的代码级别 - PyPy内部字节码或Parrot.我认为将PyPy字节码转换为使用PyPy VM新创建的字节码,我们无法获得更好的效果.

  • LLVM - 我认为这与PyPy非常相似,但没有VM生成器.
    它是成熟的,设计良好的环境,具有与PyPy类似的目标(但没有VM生成器),但是在低级结构和优化/ JIT技术的实现上工作

将此视为:LLVM是一般用途,但Parrot和**PyPy*专为动态语言而设计.在PyPy/Parrot中更容易引入一些复杂的技术 - 因为它比LLVM更高级 - 就像复杂的编译器,可以更好地理解高级代码并产生更好的汇编代码(人类无法在合理的时间内编写),然后LLVM一个?

问题:

  1. 我对吗?是否有任何理由移植某些动态语言对llvm然后比如Parrot更好?

  2. 我没有在Parrot上看到关于开发python的活动.是因为使用python C扩展不适用于鹦鹉?PyPy也存在同样的问题

  3. 为什么其他虚拟机不想迁移到LLVM/parrot.例如ruby - > parrot,CLR/JVM - > LLVM.他们转向更复杂的解决方案会不会更好?LLVM处于高度发展的过程中,并且有大公司投资.

  4. 我知道重新编译的问题可能是资源,如果需要更改字节码 - 但这不是必须的 - 因为我们可以尝试将旧的字节码移植到新的字节码,而新的编译器会产生新的字节码(从来没有更少的java仍然需要解释自己的字节码 - 所以前端可以检查它并将其转换为新的字节码)?

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

  6. 如果我在某处错了,你能纠正我吗?

一些补充:

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

澄清

我想知道所有这些软件是如何组成的 - 将一个软件移植到另一个软件有什么问题.

nic*_*kik 25

这不是任何人都可以在stackoverflow问题中回答,但我给它一个极小的镜头.

首先,3个项目解决了哪些问题?

  1. pypy允许您使用高级语言实现解释器,并且您可以免费获得生成的jit.关于这一点的好处是你没有langauge和平台之间的依赖性不匹配.这就是为什么pypy-clr比IronPython更快的原因.更多信息:http://codespeak.net/pypy/dist/pypy/doc/extradoc.html - >用于CLI/.NET的高性能Python实现,动态生成JIT编译器

  2. llvm是编译器的低级基础结构.一般的想法是有一个"高级组装".所有的验光都适用于该语言.然后有大量的基础设施可以帮助您构建编译器(JIT或AOT).在llvm上实现动态语言是可能的,但需要更多的工作,然后在pypy或parrot上实现它.例如,您无法免费获得GC(有可以与LLVM一起使用的GC,请参阅http://llvm.org/devmtg/2009-10/ - > vmkit视频)有尝试构建基于llvm的动态语言更好的平台:http://www.ffconsultancy.com/ocaml/hlvm/

  3. 我不太了解鹦鹉,但据我所知他们想要构建一个专门用于动态语言的标准VM(perl,php,python ....).这里的问题与编译到JVM/CLR时的问题相同,存在依赖性不匹配,只是一个小得多的.VM仍然不知道你的语言的语义.因为我不知道鹦鹉对于用户代码来说仍然很慢.(http://confreaks.net/videos/118-elcamp2010-parrot)

你的问题的答案:

我对吗?是否有任何理由移植某些动态语言对llvm然后比如Parrot更好?

这是一个努力的问题.建立一个专注于你的自我,最终会更快,但这是一个更多的努力.

我没有在Parrot上看到关于开发python的活动.是因为使用python C扩展不适用于鹦鹉?PyPy也存在同样的问题.

瞄准鹦鹉(在这一点上)不太可能比pypy有益.为什么没有其他人这样做我不知道.

为什么其他虚拟机不想迁移到LLVM/parrot.例如ruby - > parrot,CLR/JVM - > LLVM.他们转向更复杂的解决方案会不会更好?LLVM处于高度发展的过程中,并且有大公司投资.

好的,那个问题有很多东西.

  • 就像我说LLVM很难移动到并且鹦鹉不那么快(如果我错了就纠正我).
  • Ruby有Rubinius女巫试图在ruby和jl中做很多事情(http://llvm.org/devmtg/2009-10/ - >用LLVM加速Ruby).
  • LLVM上有一个CLR/JVM实现,但它们都已经有非常成熟的实现,需要大量投资.
  • LLVM不是高级别的.

我知道重新编译的问题可能是资源,如果需要更改字节码 - 但这不是必须的 - 因为我们可以尝试将旧的字节码移植到新的字节码,而新的编译器会产生新的字节码(从来没有更少的java仍然需要解释自己的字节码 - 所以前端可以检查它并将其转换为新的字节码)?

我不知道问题是什么.

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

观看我上面链接的VMKit视频,它显示了它们到底有多远,问题是什么(以及它们是如何解决的).

如果我在某处错了,你能纠正我吗?

你写的很多东西都是错的,或者我只是不理解你的意思,但我联系的东西应该让很多东西更清晰.


一些例子:

Clojure
Run Code Online (Sandbox Code Playgroud)

创建者不希望实现他自己的虚拟机和所有库的所有工作.那么去哪里?由于Clojure是一个新的语言,你可以通过限制像python或ruby这样的语言的大量动态内容,在JVM这样的平台上运行良好.

Python
Run Code Online (Sandbox Code Playgroud)

该语言不能(实际上)更改为在JVM/CLR上正常工作.因此,对那些实施python不会带来大规模的加速.静态编译器不能很好地工作,因为没有很多静态保证.在C中编写JIT会很快但很难改变(参见psyco项目).使用llvm jit可以工作,并由Unladen Swallow项目进行探索(再次http://llvm.org/devmtg/2009-10/ - > Unladen Swallow:LLVM上的Python).有些人想在python中使用python,所以他们开始pypy并且他们的想法接缝工作得非常好(见上文).鹦鹉可以工作,但我没有看到任何人尝试(感觉自由).


关于一切:

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


Nic*_*ley 11

你想要实施什么?你的问题措辞非常混乱(我意识到英语很可能不是你的第一语言).

LLVM和PyPy都是成熟的,有用的项目,但在这一点上真的不重叠.(有一点,PyPy可以生成LLVM字节码 - 它被静态编译为解释器 - 而不是C代码,但它不提供很多性能优势,不再受支持.)

PyPy允许您在RPython中编写解释器,并将其用作描述以生成本机代码解释器或JIT; LLVM是用于构建编译器工具链的C++框架,该工具链也可用于实现JIT.LLVM的优化器,代码生成和平台支持比PyPy更先进,但它不适合构建动态语言运行库(有关原因的一些示例,请参阅Unladen Swallow回顾展).特别是,它不像PyPy的基于跟踪的JIT那样有效地收集/使用运行时反馈(这对于使动态语言表现良好是绝对必要的).此外,LLVM的垃圾收集支持仍然有点原始,它缺乏PyPy自动生成JIT的独特能力.

顺便提一下,在LLVM- J3/VMKitShark上构建了两个Java实现.

您可能会考虑上周观看斯坦福大学的PyPy讲话 ; 它提供了一个相当不错的概述PyPy如何工作.Carl Friedrich Bolz的演讲还提供了VM实施状态的良好概述.


nco*_*lan 7

主要原因?因为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开发人员当然会关注其他人正在做的事情,但即使他们提出了好的想法,他们也会在合并之前自行调整.