В чем проблема при разработке некоторых языков, например, python для некоторых оптимизированных методов с некоторыми из LLVM/Parrot.
PyPy, LLVM, Parrot - это основные технологии совместной разработки платформ.
Я вижу это как:
- PyPy - инфраструктура для создания виртуальной машины с построением оптимизированной виртуальной машины для python
Так что это довольно общее решение. Процесс идет, как показано ниже:- dynamic_language_code →
- Интерфейс PyPy →
- Внутренний код PyPy - байт-код →
- Оптимизация PyPy →
- оставляя код PyPy и:
а. PyPy для некоторых VM (например, jvm)
б. som Kit, чтобы создать собственную виртуальную машину
с. обработка/запуск внутреннего кода PyPy
- dynamic_language_code →
Я прав насчет этого процесса? Для python существует оптимизированная виртуальная машина? В частности, по умолчанию создается встроенная виртуальная машина для оптимизированного кода PyPy (шаг 5.c) - что для python, и каждая обработка языка может останавливаться на ней и работать от нее?
- Parrot - как PyPy, но без 5.a и 5.b? Некоторые внутренние улучшения для динамической обработки (Parrot Magic Cookies).
Оба Parrot и PyPy предназначены для создания платформы, которая создает общую динамическую среду исполнения, но PyPy хочет больше - также создавать больше виртуальных машин.
Где смысл PyPy? Для чего нам нужно создать больше виртуальных машин? Не стоит лучше сосредотачиваться на одной виртуальной машине (например, в попугате), потому что существует общий один уровень кода - либо внутренний байтовый код PyPy, либо Parrot.
Я думаю, что мы не сможем лучше ничего перевести на байт-код PyPy на вновь созданный с помощью PyPy VM.
- LLVM - я вижу это очень похоже на PyPy, но без генератора VM.
Это зрелая, хорошо спроектированная среда с аналогичными объектами, такими как PyPy (но без генератора VM), но работающая на низкоуровневой структуре и отличная оптимизация/JIT-технологии, реализованные
Я вижу это как: LLVM - это общее использование, но Parrot и ** PyPy * предназначен для динамических языков. В PyPy/Parrot проще вводить некоторые сложные методы - потому что это более высокий уровень, чем LLVM - как сложный компилятор, который может лучше понимать код высокого уровня и улучшать код ассемблера (который люди не могут писать в разумные сроки), затем LLVM один?
Вопросы:
-
Я прав? Есть ли причина, по которой перенос какого-то динамического языка будет лучше, чем llvm, а затем, например, Parrot?
-
Я не вижу активности по разработке python на Parrot. Это потому, что использование расширений python C не работает на попугае? Та же проблема в PyPy
-
Почему другие виртуальные машины не хотят переходить на LLVM/попугай. Например, ruby - > попугай, CLR/JVM → LLVM. Не было бы лучше для них перейти к более сложному решению? LLVM находится в высоком процессе разработки и имеет крупные компании, инвестирующие в него.
-
Я знаю, что проблема может заключаться в перекомпиляции ресурсов, если необходимо изменить байт-код - но это не обязательно - поскольку мы можем попытаться перенести старый байт-код на новый, а новые компиляторы создадут новый байт-код ( не менее java все еще нужно интерпретировать собственный байт-код - поэтому интерфейс может проверить его и перевести на новый байт-код)?
-
Каковы проблемы с связыванием, например, библиотек jvm внутри llvm (если мы каким-то образом переносим java/jvm/ scala в llvm)?
-
Можете ли вы исправить меня, если я ошибаюсь где-то
Некоторые добавления:
- Как Parrot сравнивается с другими виртуальными машинами
- В чем преимущество Parrot VM для конечных пользователей
- Каковы различия между LLVM и java/jvm
=============
РАЗЪЯСНЕНИЯ
Я хочу понять, как все это программное обеспечение состоит - и в чем проблема переноса одного на другой.