LLVM, Parrot, JVM, PyPy + python

В чем проблема при разработке некоторых языков, например python для некоторых оптимизированных методов с некоторыми из LLVM / Parrot.

PyPy, LLVM, Parrot - это основные технологии для разработки общей платформы.
Я вижу это примерно так:

  • PyPy - фреймворк для создания виртуальной машины со встроенной оптимизированной виртуальной машиной для python
    Так что это довольно общее решение. Процесс идет, как указано ниже:
    1. dynamic_language_code ->
    2. Внешний интерфейс PyPy ->
    3. Внутренний код PyPy - байт-код ->
    4. Оптимизация PyPy ->
    5. оставив код PyPy и:
      а. Бэкэнд PyPy для некоторых виртуальных машин (например, jvm)
      б. сом Комплект для создания собственной ВМ
      c. обработка / запуск внутреннего кода PyPy

Прав ли я насчет этого процесса? Для питона есть оптимизированная ВМ? В частности, по умолчанию в виртуальную машину встроен оптимизированный код PyPy (шаг 5.c), который предназначен для Python, и любая языковая обработка может останавливаться на нем и запускаться на нем?

  • Parrot - очень похоже на PyPy, но без 5.a и 5.b? Некоторые внутренние улучшения для динамической обработки ( Parrot Magic Cookies ).

И Parrot , и PyPy предназначены для создания платформы, которая создает общую среду выполнения динамических языков, но PyPy хочет большего - еще и ВМ создать.
Где смысл PyPy? Для чего нам нужно создать больше ВМ? Не лучше сосредоточиться на одной виртуальной машине (как в Parrot) - потому что существует один общий уровень кода - либо внутренний байт-код PyPy, либо байт-код Parrot. Я думаю, что мы не сможем ничего лучше перевести в байт-код PyPy на вновь созданные виртуальные машины PyPy.

  • LLVM - я вижу это очень похоже на PyPy, но без генератора виртуальных машин.
    Это зрелая, хорошо спроектированная среда с теми же целями, что и PyPy (но без генератора виртуальных машин), но работающая над низкоуровневой структурой и реализованными отличными методами оптимизации / JIT. но Parrot и ** PyPy * разработаны для динамических языков. В PyPy / Parrot проще внедрить некоторые сложные методы - потому что это более высокий уровень, чем LLVM - например, сложный компилятор, который может лучше понимать код высокого уровня и создавать лучший код ассемблера (который люди не могут написать в разумные сроки), затем LLVM?

    Вопросы:

    1. Я прав? Есть ли причина, по которой лучше переносить какой-нибудь динамический язык на llvm, чем, например, на Parrot?

    2. Я не видел активности разработки python на Parrot. Это потому, что использование расширений Python C не работает с попугаем? Та же проблема есть в PyPy

    3. . Почему другие виртуальные машины не хотят переходить на LLVM / parrot. Например, рубин -> попугай, CLR / JVM -> LLVM. Не лучше ли было бы перейти к более сложному решению? LLVM находится в процессе активной разработки, и в него вкладываются крупные компании.

    4. Я знаю, что проблема может быть в перекомпиляции ресурсов, если необходимо изменить байт-код - но это не обязательно - так как мы можем попытаться перенести старый байт-код в новый, а новые компиляторы создают новый байт-код (Java все еще нуждается в интерпретации собственного байт-кода - чтобы интерфейс мог его проверить и преобразовать в новый байт-код)?

    5. Каковы проблемы с компоновкой, например, библиотек jvm внутри llvm ( если мы каким-то образом портируем java / jvm / scala на llvm)?

    6. Вы можете исправить меня, если я m где-то неправильно

    Некоторые добавления:

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

    УТОЧНЕНИЕ

    Я хочу понять, из чего состоит все это программное обеспечение - и в чем проблема при переносе одного на другое.

15
задан Community 23 May 2017 в 12:31
поделиться