【发布时间】:2011-03-16 16:20:01
【问题描述】:
在开发某些语言时有什么问题,例如 python 用于一些 LLVM / Parrot 的优化技术。
PyPy、LLVM、Parrot 是常用平台开发的主要技术。
我是这样看的:
-
PyPy - 构建 VM 的框架,内置优化的 Python 虚拟机
所以它很一般的解决方案。该过程如下所列:
- dynamic_language_code ->
- PyPy 前端 ->
- PyPy 内部代码 - 字节码 ->
- PyPy 优化 ->
- 离开 PyPy 代码并:
一种。某些 VM(如 jvm)的 PyPy 后端
湾。 som Kit 制作自己的虚拟机
C。处理/运行 PyPy 内部代码
- dynamic_language_code ->
我对这个过程是否正确?对于 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)?
如果我在某处错了,你能纠正我吗
一些补充:
- How does Parrot compare to other virtual machines
- What's the benefit of Parrot VM for end-users
- What are the differences between LLVM and java/jvm
=============
澄清
我想弄清楚所有这些软件是如何组成的 - 将一个软件移植到另一个软件有什么问题。
【问题讨论】:
-
这是一个巨大的问题。把它分开,因为大多数看它的人甚至都不愿意阅读它。
-
这个问题难以阅读和混淆并没有多大帮助。
-
为什么这么简单?在问题中添加 Rubinius、Jython 和 JRuby、IronPython、Spur、Unladen Swallow 以及您能想到的任何其他内容。如果您得到答案,请与作者配对出版一本关于它的书。
-
我不是要为 python 寻找移植机制,而是要找到 VM 技术及其协同作用
标签: python jvm llvm pypy parrot