PyPy、LLVM和Parrot是通用平台开发的主要技术。我理解为:
- PyPy - 用于构建带有内置Python优化VM的框架,因此是一种相当通用的解决方案。其过程如下:
1. 动态语言代码 -> 2. PyPy前端 -> 3. PyPy内部代码 - 字节码 -> 4. PyPy优化 -> 5. 保留PyPy代码并: a. 为某些VM(如jvm)创建PyPy后端 b. 创建一些Kit以制作自己的VM c. 处理/运行PyPy内部代码
- Parrot - 很像PyPy,但没有5.a和5.b,对动态处理进行了一些内部改进(Parrot Magic Cookies)。
PyPy和Parrot都旨在创建一个平台,创建一个共同的动态语言运行时,但PyPy希望更多-也创建更多VM。那么PyPy的意义在哪里?我们为什么需要创建更多的VM?难道不应该专注于一个VM(就像Parrot一样)-因为存在共同的代码级别,无论是PyPy内部字节码还是Parrot的字节码。我认为我们不可能从将代码转换为PyPy字节码到使用PyPy VMs进行全新的转换获得更好的结果。
- LLVM - 我认为这与PyPy非常相似,但没有VM生成器。它是一个成熟、设计良好的环境,与PyPy具有类似的目标(但没有VM生成器),但是它在低级结构和优化/JIT技术上工作得很好。
我认为:LLVM是通用的,但Parrot和PyPy专为动态语言设计。在PyPy/Parrot中更容易引入一些复杂的技术,因为它比LLVM更高级——例如可以更好地理解高级代码并生成更好的汇编代码的复杂编译器(人类无法在合理的时间内编写),那么LLVM的情况又如何?
问题:
我是正确的吗?是否有任何理由将一些动态语言移植到LLVM而不是例如Parrot?
我没有看到Parrot上开发Python的活动。这是因为在Parrot上使用Python C扩展无法正常工作吗?PyPy也存在同样的问题。
为什么其他虚拟机不想转移到LLVM/Parrot?例如Ruby-> Parrot,CLR/JVM-> LLVM。对于他们来说,移动到更复杂的解决方案不是更好吗?LLVM正在进行高度的开发过程,并且有大公司进行投资。
我知道问题可能在于重新编译是资源,如果需要更改字节码-但这不是强制性的——因为我们可以尝试将旧字节码移植到新字节码中,并且新编译器生成新字节码(尽管Java仍然需要解释自己的字节码-因此前端可以检查它并将其转换为新字节码)?
例如,在llvm中链接jvm库时有什么问题(如果我们以某种方式将java/jvm/scala移植到llvm)?
如果我错了,请纠正我
一些添加:
=============
澄清
我想了解所有这些软件的构成方式,以及将一个软件移植到另一个软件中存在什么问题。