[英]LLVM, Parrot, JVM, PyPy + python
开发某些语言有什么问题,例如python用于一些LLVM / Parrot的优化技术。
PyPy,LLVM,Parrot是通用平台开发的主要技术。
我觉得这样:
我是对的关于这个过程吗? 对于python,有优化的VM? 特别是默认情况下,在VM中构建优化的PyPy代码(步骤5.c) - 这是用于python的,每个语言处理都可以停在那里并由它运行?
Parrot和PyPy都旨在创建一个创建通用动态语言运行库的平台,但PyPy需要更多 - 同时创建更多VM。
PyPy的感觉在哪里? 我们需要创建更多的VM? 不应该更好地专注于一个VM(如parrot) - 因为有一个共同的代码级别 - PyPy内部字节码或Parrot。 我认为将PyPy字节码转换为使用PyPy VM新创建的字节码,我们无法获得更好的效果。
将此视为: LLVM是一般用途,但Parrot和** PyPy *专为动态语言而设计。 在PyPy / Parrot中更容易引入一些复杂的技术 - 因为它比LLVM更高级 - 就像复杂的编译器,可以更好地理解高级代码并产生更好的汇编代码(人类无法在合理的时间内编写),然后LLVM一个?
问题:
我对吗? 是否有任何理由移植某些动态语言对llvm然后比如Parrot更好?
我没有在Parrot上看到关于开发python的活动。 是因为使用python C扩展不适用于鹦鹉? PyPy也存在同样的问题
为什么其他虚拟机不想迁移到LLVM / parrot。 例如ruby - > parrot,CLR / JVM - > LLVM。 他们转向更复杂的解决方案会不会更好? LLVM处于高度发展的过程中,并且有大公司投资。
我知道重新编译的问题可能是资源,如果需要更改字节码 - 但这不是强制性的 - 因为我们可以尝试将旧的字节码移植到新的字节码,而新的编译器会产生新的字节码(从来没有更少的java仍然需要解释自己的字节码 - 所以前端可以检查它并将其转换为新的字节码)?
链接例如llvm中的jvm库有什么问题(如果我们以某种方式将java / jvm / scala移植到llvm)?
如果我在某处错了,你能纠正我吗?
一些补充:
=============
澄清
我想知道所有这些软件是如何组成的 - 将一个软件移植到另一个软件有什么问题。
这不是任何人都可以在stackoverflow问题中回答,但我给它一个极小的镜头。
首先,3个项目解决了哪些问题?
pypy允许您使用高级语言实现解释器,并且您可以免费获得生成的jit。 关于这一点的好处是你没有langauge和平台之间的依赖性不匹配。 这就是为什么pypy-clr比IronPython更快的原因。 更多信息: http : //codespeak.net/pypy/dist/pypy/doc/extradoc.html - >用于CLI / .NET的高性能Python实现,动态生成JIT编译器
llvm是编译器的低级基础结构。 一般的想法是有一个“高级组装”。 所有的验光都适用于该语言。 然后有大量的基础设施可以帮助您构建编译器(JIT或AOT)。 在llvm上实现动态语言是可能的,但需要更多的工作,然后在pypy或parrot上实现它。 例如,您无法免费获得GC(有可以与LLVM一起使用的GC,请参阅http://llvm.org/devmtg/2009-10/ - > vmkit视频)有尝试构建基于llvm的动态语言更好的平台: http ://www.ffconsultancy.com/ocaml/hlvm/
我不太了解鹦鹉,但据我所知他们想要构建一个专门用于动态语言的标准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处于高度发展的过程中,并且有大公司投资。
好的,那个问题有很多东西。
我知道重新编译的问题可能是资源,如果需要更改字节码 - 但这不是强制性的 - 因为我们可以尝试将旧的字节码移植到新的字节码,而新的编译器会产生新的字节码(从来没有更少的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 / VMKit和Shark上构建了两个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.