繁体   English   中英

LLVM,Parrot,JVM,PyPy + python

[英]LLVM, Parrot, JVM, PyPy + python

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

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

  • PyPy - 用于构建VM的框架,其中构建了针对python的优化VM
    所以这是一般的解决方案。 该过程如下所示:
    1. dynamic_language_code - >
    2. PyPy前端 - >
    3. PyPy内部代码 - 字节码 - >
    4. PyPy优化 - >
    5. 留下PyPy代码和:
      一个。 一些VM的PyPy后端(如jvm)
      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. 如果我在某处错了,你能纠正我吗?

一些补充:

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

澄清

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

这不是任何人都可以在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

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

Python

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


关于一切:

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

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

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实施状态的良好概述。

主要原因? 因为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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM