LLVM、Parrot、JVM、PyPy+;python

LLVM、Parrot、JVM、PyPy+;python,python,jvm,llvm,pypy,parrot,Python,Jvm,Llvm,Pypy,Parrot,在开发某些语言(例如python)时,使用LLVM/Parrot的一些优化技术会遇到什么问题 PyPy、LLVM、Parrot是通用平台开发的主要技术 我是这样看的: PyPy-使用针对python的内置优化虚拟机构建虚拟机的框架 所以这是一个非常普遍的解决方案。该过程如下所示: 动态语言代码-> PyPy前端-> PyPy内部代码-字节码-> PyPy优化-> 离开PyPy代码和: A.某些VM(如jvm)的PyPy后端 B用于制作自己的虚拟机的som套件 C处理/运行PyPy内部代码

在开发某些语言(例如python)时,使用LLVM/Parrot的一些优化技术会遇到什么问题

PyPy、LLVM、Parrot是通用平台开发的主要技术
我是这样看的:

  • PyPy-使用针对python的内置优化虚拟机构建虚拟机的框架
    所以这是一个非常普遍的解决方案。该过程如下所示:
  • 动态语言代码->
  • PyPy前端->
  • PyPy内部代码-字节码->
  • PyPy优化->
  • 离开PyPy代码和:
    A.某些VM(如jvm)的PyPy后端
    B用于制作自己的虚拟机的som套件
    C处理/运行PyPy内部代码
这个过程我说得对吗?对于python,有优化的VM吗?特别是在默认情况下,有用于优化PyPy代码的内置VM(步骤5.c)-这是用于python的,每种语言处理都可以在这里停止并由它运行

  • 鹦鹉-很像PyPy,但没有5.a和5.b?动态处理的一些内部改进(Parrot Magic Cookies)
ParrotPyPy都是为了创建一个创建通用动态语言运行时的平台而设计的,但PyPy需要更多,也需要创建更多的VM
皮皮的感官在哪里?我们需要什么来创建更多的虚拟机?最好只关注一个VM(比如parrot),因为有一个通用的代码级别——PyPy内部字节码或parrot代码。 我认为,将PyPy字节码转换为新创建的PyPyVMS,再好不过了

  • LLVM-我认为这与PyPy非常相似,但没有VM生成器。
    它是一个成熟的、设计良好的环境,具有与PyPy类似的目标(但没有VM生成器),但工作在低级结构上,并实施了大量优化/JIT技术
可以这样看:LLVM是通用的,但是Parrot和**PyPy*是为动态语言设计的。在PyPy/Parrot中,更容易引入一些复杂的技术-因为它比LLVM更高级-类似复杂的编译器,可以更好地理解高级代码并生成更好的汇编代码(人类无法在合理的时间内编写),那么LLVM呢

问题:

  • 我说得对吗?是否有任何理由认为移植一些动态语言对llvm比对Parrot更好

  • 我还没有看到在Parrot上开发python的活动。是因为在parrot上使用PythonC扩展不起作用吗?PyPy中也存在同样的问题

  • 为什么其他虚拟机不想移动到LLVM/parrot。例如ruby->parrot,CLR/JVM->LLVM。对于他们来说,采用更复杂的解决方案不是更好吗?LLVM处于高开发阶段,有大公司投资于此

  • 我知道,如果需要更改字节码(但这不是强制性的),重新编译资源可能会有问题,因为我们可以尝试将旧字节码移植到新字节码,而新编译器会生成新字节码(java仍然需要解释自己的字节码,这样前端就可以检查并将其转换为新字节码)

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

  • 如果我在什么地方错了,你能纠正我吗

  • 一些补充:

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

    澄清


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

    主要原因是什么?因为虚拟机设计并不是一种固定的技术,拥有具有不同目标和目的的各种虚拟机允许并行尝试各种机制,而不必串联尝试所有机制

    JVM、CLR、PyPy、Parrot、LLVM和其他都以不同的方式针对不同类型的问题。这与Chrome、Firefox、Safari和IE都使用自己的Javascript引擎的原因类似

    unladenswallow试图将LLVM应用于CPython,他们在LLVM中修复问题的时间比他们在做任何特定于Python的事情的时间都多

    Parrot上的Python在Perl 6和Python之间存在语义差异,导致前端编译过程出现问题,因此未来在这方面的工作可能会使用PyPy前端来针对Parrot VM


    不同的虚拟机开发人员当然会关注其他人在做什么,但即使他们提出了好的想法,他们也会在合并这些想法之前对它们进行自己的分析。

    您想实现什么?你的问题措辞非常混乱(我知道英语可能不是你的第一语言)

    LLVM和PyPy都是成熟、有用的项目,但在这一点上实际上没有太多重叠。(有一次,PyPy可以生成LLVM字节码,该字节码是静态编译到解释器的,而不是C代码,但它没有提供多少性能优势,不再受支持。)

    PyPy允许您在RPython中编写一个解释器,并将其用作生成本机代码解释器或JIT的描述;LLVM是一个用于编译编译器链的C++框架,它也可以用来实现JIT。LLVM的优化器、代码生成和平台支持比PyPy要先进得多,但它不太适合构建动态语言运行时(有关原因的一些示例,请参阅)。特别是,它在收集/使用运行时反馈方面不如PyPy的基于跟踪的JIT有效(这对于使动态语言表现良好是绝对必要的)。此外,LLVM的垃圾收集支持仍然有些原始,并且缺少PyPy自动生成JIT的独特能力

    顺便提一下,有两个Java实现是基于LLVM和构建的

    Clojure
    
    Python