На этот вопрос никто не может ответить в вопросах stackoverflow, но я даю ему минимальный шанс.
Во-первых, какие проблемы решают 3 проекта?
pypyпозволяет реализовать переводчик на языке высокого уровня, и вы получите сгенерированный JIT бесплатно.Хорошая вещь об этом - то, что у вас нет несоответствия зависимости между языком и платформой.Вот почему pypy-clr работает быстрее, чем IronPython.Более подробная информация здесь: http://codespeak.net/pypy/dist/pypy/doc/extradoc.html -> Высокопроизводительная реализация Python для CLI / .NET с генерацией JIT-компилятора для динамического)
llvm - инфраструктура низкого уровня для компиляторов,Общая идея состоит в том, чтобы иметь одну «сборку высокого уровня».Все optomizations работают на этом языке.Кроме того, существует множество инфраструктур, помогающих создавать компиляторы (JIT или AOT).Реализация динамического языка на llvm возможна, но требует больше работы, чем реализация на pypy или parrot.Например, вы не можете получить GC бесплатно (есть GC, который вы можете использовать вместе с LLVM, см. http://llvm.org/devmtg/2009-10/ -> видео vmkit). Есть попытки улучшить платформу для динамических языков на основеllvm: http://www.ffconsultancy.com/ocaml/hlvm/
Я не так много знаю о попугаях, но, насколько я понимаю, они хотят создать одну стандартную виртуальную машину, специализирующуюся на динамических языках (perl, php, python ....).Проблема здесь та же, что и при компиляции в JVM / CLR существует несоответствие зависимостей, только намного меньшее.ВМ до сих пор не знает семантику вашего языка.Как я понимаю, попугай все еще довольно медленный для пользовательского кода.(http://confreaks.net/videos/118-elcamp2010-parrot)
Ответ на ваш вопрос:
Прав ли я? Есть ли какая-то причина, по которой портирование какого-либо динамического языка было бы лучше, чем, например, на lvmПопугай?
Это вопрос усилий. Построить что-то свое и специализированное для вас в конечном итоге будет быстрее, но это гораздо больше усилий.
Я не виделдеятельность по разработке Python на Parrot. Это потому, что использование расширений Python C не работает на Parrot? Та же проблема в PyPy.
Ориентация попугая (на данный момент) вряд ли будет иметьЯ не знаю, почему больше никто не делает этого.
Почему другие виртуальные машины не хотят переходить на LLVM / parrot. Например, ruby -> parrot, CLR / JVM -> LLVMНе лучше ли им перейти к более сложному решению? LLVM находится в процессе высокого развития и в него инвестируют крупные компании.
Хорошо, в этом вопросе много материала.
- Как я и сказал LLVMтрудно перейти к и попугай не так быстро (поправьте меня, если я не прав).
- У Руби есть ведьма Рубиниус, которая пытается сделать много в рубине и достигает 11vm (http://llvm.org/devmtg/2009-10/ -> Ускорение Ruby с помощью LLVM).
- Существует реализация CLR / JVM в LLVM, но обе они уже имеют очень зрелые реализации, которые требуют больших инвестиций.
- LLVM не является высоким уровнем.
Я знаю, что проблема может быть в перекомпиляции ресурсов, если есть необходимость изменить байт-код - но это не обязательно - так как мы можем попытаться перенести старый байт-код на новый, и новые компиляторы производят новый байт-код (никогда не меньше javaвсе еще нужно интерпретировать свой собственный байт-код - чтобы интерфейс мог проверить его и перевести на новый байт-код)?
Я понятия не имею, в чем вопрос.
Какие проблемы возникают при подключении, например, библиотек jvm внутри llvm (если мы каким-либо образом портируем java / jvm / scala на llvm)?
Смотрите видео VMKit Iвыше показано, как далеко они продвинулись и в чем проблема (и как они ее решили).
Можете ли вы исправить меня, если я где-то не так
Многоиз того, что вы написали неправильно, или я просто не понимаю, что вы имеете в виду, но то, что я связал, должно прояснить многое.
Некоторые примеры:
Clojure
Создатель не хотел всю работу по реализации своего собственного vm и всех библиотек.Так куда же пойти?Поскольку Clojure - это новый язык, вы можете построить его так, чтобы он хорошо работал на такой платформе, как JVM, ограничивая множество динамических вещей, которые мог бы иметь язык, такой как python или ruby.
Python
Язык можетне должно быть (практически) изменено, чтобы хорошо работать на JVM / CLR.Таким образом, реализация Python на этих платформах не приведет к значительному ускорению.Статический компилятор также не будет работать очень хорошо, потому что не так много статических гарантий.Написание JIT на C будет быстрым, но очень сложным для изменения (см. Психопроект).Использование llvm jit может работать, и его исследует проект Unladen Swallow (снова http://llvm.org/devmtg/2009-10/ -> Unladen Swallow: Python на LLVM).Некоторые люди хотели иметь Python в Python, поэтому они начали Pypy, и их идея выглядит очень хорошо (см. Выше).Попугай тоже мог бы сработать, но я не видел, чтобы кто-нибудь пробовал (не стесняйтесь).
На всем:
Я думаю, что вы запутались, и я могу это понять.Не торопитесь и читайте, слушайте, смотрите все, что вы можете получить.Не напрягай себя.В этом есть много частей, и в конце концов вы видите, как они сочетаются друг с другом и что имеет смысл, и даже если вы знаете много, можно еще многое обсудить.Вопрос в том, где внедрить новый язык или как ускорить работу на старом языке, у вас много ответов, и если вы спросите 3 человек, вы получите три разных ответа.