开发某些语言有什么问题,例如 python 用于一些 LLVM / Parrot 的一些优化技术。
PyPy、LLVM、Parrot是常用平台开发的主要技术。
我看到这样的:
- PyPy - 用于构建 VM 的框架,其中包含针对 python 的优化 VM
所以它是非常通用的解决方案。该过程如下所列:
- 动态语言代码->
- PyPy 前端 ->
- PyPy 内部代码 - 字节码 ->
- PyPy 优化 ->
- 留下 PyPy 代码和
:某些 VM(如 jvm)的 PyPy 后端
b. som Kit 制作自己的虚拟机
c. 处理/运行 PyPy 内部代码
- 动态语言代码->
我对这个过程是正确的吗?对于 python 有优化的 VM?特别是默认情况下,VM 中内置了优化的 PyPy 代码(步骤 5.c)——它适用于 python,并且每种语言处理都可以在那里停止并由它运行?
- Parrot - 很像 PyPy,但没有 5.a 和 5.b ?动态处理的一些内部改进(Parrot Magic Cookies)。
Parrot和PyPy都旨在创建一个创建通用动态语言运行时的平台,但 PyPy 想要更多——也需要创建更多 VM。
PyPy 的意义在哪里?为了什么我们需要创建更多的虚拟机?不应该更好地专注于一个虚拟机(比如在鹦鹉中)——因为有一个共同的代码级别——PyPy 内部字节码或 Parrot 字节码。我认为我们无法将 PyPy 字节码转换为新创建的 PyPy VM。
- LLVM - 我认为这与 PyPy 非常相似,但没有 VM 生成器。
它是成熟的、精心设计的环境,具有与 PyPy 相似的目标(但没有 VM 生成器),但使用的是低级结构和出色的优化/JIT 技术
将其视为:LLVM是通用的,但Parrot和 **PyPy* 是为动态语言设计的。在 PyPy / Parrot 中更容易引入一些复杂的技术——因为它比 LLVM 更高级——比如复杂的编译器,它可以更好地理解高级代码并产生更好的汇编代码(人类无法在合理的时间内编写),然后LLVM 之一?
问题:
我对吗?是否有任何理由将某些动态语言移植到 llvm 比移植到 Parrot 更好?
我还没有看到 Parrot 上开发 python 的活动。是因为使用 python C 扩展对 parrot 不起作用吗?PyPy 也有同样的问题
为什么其他 VM 不想迁移到 LLVM / parrot。例如 ruby -> parrot,CLR/ JVM -> LLVM。他们转向更复杂的解决方案不是更好吗?LLVM 正处于高速发展过程中,并有大公司投资。
我知道问题可能在于重新编译资源,如果需要更改字节码 - 但这不是强制性的 - 因为我们可以尝试将旧字节码移植到新字节码,并且新编译器会生成新字节码(Java 仍然需要解释自己的字节码 - 所以前端可以检查它并将其转换为新的字节码)?
在 llvm 中链接例如 jvm 库有什么问题(如果我们以某种方式将 java/jvm/scala 移植到 llvm)?
如果我在某个地方错了,你能纠正我吗
一些补充:
==============
澄清
我想弄清楚所有这些软件是如何组成的——将一个软件移植到另一个软件有什么问题。