gpt4 book ai didi

python - LLVM、Parrot、JVM、PyPy + python

转载 作者:太空狗 更新时间:2023-10-29 17:00:00 24 4
gpt4 key购买 nike

开发某些语言有什么问题,例如使用某些 LLVM/Parrot 的一些优化技术的 Python。

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

  • PyPy - 使用为 python 构建优化的 VM 来构建 VM 的框架
    所以它非常通用的解决方案。该过程如下所列:
  • 动态语言代码 ->
  • PyPy 前端 ->
  • PyPy 内部代码 - 字节码 ->
  • PyPy 优化 ->
  • 离开 PyPy 代码并:
    一种。某些 VM 的 PyPy 后端(如 jvm)
    湾som Kit 制作自己的虚拟机
    C。处理/运行 PyPy 内部代码


  • 关于这个过程,我说得对吗?对于python有优化的VM吗?特别是默认情况下,VM 中内置了优化 PyPy 代码(步骤 5.c)——这是针对 python 的,每种语言处理都可以在那里停止并由它运行?
  • 鹦鹉 - 很像 PyPy,但没有 5.a 和 5.b ?动态处理的一些内部改进(Parrot Magic Cookies)。

  • 两只鹦鹉 PyPy 旨在创建一个平台,该平台创建一个通用的动态语言运行时,但 PyPy 想要更多——还要创建更多的 VM。
    PyPy 的 sens 在哪里?为了什么我们需要创建更多的VM?专注于一个 VM(就像在 parrot 中一样)不应该更好 - 因为有一个共同的代码级别 - PyPy 内部字节码或 Parrot 的。
    我认为将 PyPy 字节码转换为使用 PyPy 虚拟机新创建的字节码,我们没有什么比这更好的了。
  • LLVM - 我认为这与 PyPy 非常相似,但没有 VM 生成器。
    它是成熟的、设计良好的环境,具有与 PyPy 类似的目标(但没有 VM 生成器),但致力于实现低级结构和出色的优化/JIT 技术

  • 将此视为: LLVM 是一般用途,但 鹦鹉和 **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

  • ==============

    澄清

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

    最佳答案

    这不是任何人都可以在 stackoverflow 问题中回答的东西,但我给了它一个最小的机会。

    首先这3个项目解决了哪些问题?

  • pypy 允许您用高级语言实现解释器,并免费获得生成的 jit。这样做的好处是语言和平台之间没有依赖性不匹配。这就是为什么 pypy-clr 比 IronPython 快的原因。
    更多信息: http://codespeak.net/pypy/dist/pypy/doc/extradoc.html --> 高性能的 Python 实现 CLI/.NET,动态生成 JIT 编译器)
  • llvm 是编译器的低级基础架构。总的想法是有一个“高层集会”。所有优化都适用于该语言。然后有大量的基础设施可以帮助您构建编译器(JIT 或 AOT)。在 llvm 上实现动态语言是可能的,但需要更多的工作然后在 pypy 或 parrot 上实现它。例如,您无法免费获得 GC(有些 GC 可以与 LLVM 一起使用,请参阅 http://llvm.org/devmtg/2009-10/ --> vmkit 视频)有人尝试基于 llvm 为动态语言构建更好的平台:http://www.ffconsultancy.com/ocaml/hlvm/
  • 我对 parrot 了解不多,但据我所知,他们想要构建一个专门用于动态语言(perl、php、python ....)的标准 VM。这里的问题与编译到 JVM/CLR 相同,存在依赖不匹配,只是小得多。 VM 仍然不知道您的语言的语义。因为我不明白 parrot 对于用户代码来说仍然很慢。 ( http://confreaks.net/videos/118-elcamp2010-parrot )

  • 你的问题的答案:

    Am I right? Is there any reason that porting some dynamic language would be better to llvm then to for example Parrot?



    那是努力的问题。构建你自己并为你特化的一切最终会更快,但需要付出更多的努力。

    I haven't see the activity on development python on Parrot. Is it because using python C extensions doesn't work on parrot? The same problem is in PyPy.



    瞄准鹦鹉(此时)不太可能比 pypy 有好处。为什么没有其他人这样做我不知道。

    Why other VMs don't want to move to LLVM / parrot. Eg ruby -> parrot, CLR/ JVM -> LLVM. Wouldn't be better for them to move to more sophisticated solution? LLVM is in high development process and has big companies investing in.



    好的,这个问题有很多东西。
  • 就像我说的 LLVM 很难移动,parrot 也没有那么快(如果我错了,请纠正我)。
  • Ruby 让 Rubinius 女巫尝试在 ruby​​ 和 jits 中做很多事情到 llvm(http://llvm.org/devmtg/2009-10/ --> 使用 LLVM 加速 Ruby)。
  • 在 LLVM 上有 CLR/JVM 的实现,但它们都已经有了非常成熟的实现,而且投资很大​​。
  • LLVM 级别不高。

  • I know the problem might be in recompile are resources, if there is need to change bytecode - but it is not obligatory - as we can try to port old bytecode to new one, and new compilers produce new bytecode (never less java still need to interpreted own bytecode - so the frontend can check it and translate it to new bytecode)?



    我不知道问题是什么。

    What are the problems with linking for example jvm libraries inside llvm (if we port somehow java/jvm/scala to llvm)?



    观看我上面链接的 VMKit 视频,该视频显示了他们的进展情况以及问题所在(以及他们如何解决)。

    Can you correct me if i'm wrong somewhere



    你写的很多东西都是错误的,或者我只是不明白你的意思,但我链接的东西应该让很多东西更清楚。

    一些例子:
    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 并且他们的想法接缝工作得非常好(见上文)。 Parrot 也可以工作,但我还没有看到有人尝试过(随意)。

    在所有方面:

    我想你很困惑,我能理解。花点时间阅读、聆听、观看你能得到的一切。不要给自己压力。这有很多部分,最终你会看到什么是合适的,什么是有意义的,即使你知道很多,仍然有很多讨论可能会做。问题是在哪里实现新语言或如何加速旧语言有很多答案,如果你问 3 个人,你可能会得到三个不同的答案。

    关于python - LLVM、Parrot、JVM、PyPy + python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328295/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com