В Java есть несколько языков, которые компилируются в байт-код Java и могут работать на JVM - Clojure, Groovy и Scala - основные из них, которые я помню из головы.
Однако Python также превращается в байт-код (файлы .pyc) перед запуском интерпретатором Python. Я мог бы просто не знать, но почему нет других языков программирования, которые компилируются в байт-код python?
Это просто потому, что никто не беспокоился, или есть какое-то внутреннее ограничение или барьер, который делает это трудным?
python
virtual-machine
virtual-machine-languages
Michael0x2a
источник
источник
Ответы:
Просто - в прошлый раз, когда я проверял, у Python не было формальной спецификации, включая его байт-код. CPython - это спецификация, а переносимость байт-кода не требуется IIRC. Таким образом, это движущаяся недокументированная цель, предназначенная для конкретного языка.
источник
Существует несколько языков JVM, потому что были талантливые люди, которые хотели написать код, который бы работал с существующим кодом Java, но они не хотели писать Java .
Очевидно, что нет программистов, которые хотят работать с существующим кодом Python, но ненавидят Python достаточно, чтобы портировать другой язык в интерпретатор байт-кода Python.
Вы можете взглянуть на это двумя способами: есть альтернативные языки для JVM, потому что Java так широко распространен, или нет альтернативных языков для интерпретатора байт-кода Python, потому что Python не сосет.
источник
this
парадигмы.Существуют технические недостатки, такие как GIL в CPython, но мало кто воспринимает языковые недостатки, поэтому среда выполнения не является преимуществом сообщества Python. Как раз наоборот, есть и другие варианты среды выполнения из-за неудовлетворенности реализацией GIL / CPython.
Язык Java гораздо более злобен, чем JVM (даже в сообществе Java).
JVM довольно хорошо рассматривается в большинстве кругов; таким образом, стремление к другим / лучшим языковым интерфейсам с преимуществами высоко оптимизированной серверной части JVM.
источник
Я говорю, что Мейсон Уилер прав. Это в основном проблема с Global Interpreter Lock, которая делает параллелизм очень сложной проблемой. Так как есть другие виртуальные машины, которые сравнительно хорошо выполняют параллелизм, имеет смысл разрабатывать языки для них. Кроме того, в Python в последнее время произошел значительный сдвиг в языке, и многие из библиотек не успели сделать совместимость легким кошмаром время от времени. Например, потому что я использую PIL для работы со зрением, я должен писать код на Python 2.7 или ниже. Это не относится к установкам JVM или CLI, которые, в частности, в последнем случае были разработаны с учетом взаимодействия языков.
Провел еще какое-то исследование и, по-видимому, на самом деле есть два GIL, а не один. Другие элементы управления Imports .
источник
Другие ответы имеют большой смысл, но сейчас есть языки, которые компилируются в Python. Где есть воля ...
Я ничего не знаю об этих языках, но они, кажется, работают, передавая их исходный код в Python AST и позволяя Python компилировать деревья в байт-код, избегая проблем, упомянутых в других ответах.
Основываясь на комментариях, мы в настоящее время знаем о трех альтернативных языках, которые используют Python VM (не стесняйтесь добавлять любые другие здесь):
источник
Другая причина заключается в том, что JVM является высоко оптимизированной, хорошо развитой и чрезвычайно полной экосистемой. Сам по себе он очень хорошо конкурирует с любым другим компилируемым языком. (Я не скажу, что это лучшая виртуальная машина общего назначения, но я определенно положил на это свою карьеру.) Поэтому получение доступа к JVM, за исключением написания байт-кода, само по себе желательно.
Тем не менее, Python VM хорош, но (ничего против Python) имеет ряд серьезных недостатков. Среда выполнения Python хорошо подходит для динамической природы языка, но может по-настоящему удивить вас, когда вы познакомитесь с его использованием памяти, глобальной блокировкой или моделью потоков.
При непосредственном сравнении JVM обычно в два раза быстрее виртуальной машины Python. JVM (удивительно) даже неплохо конкурирует с нативно скомпилированным кодом, основанным на «горячих» оптимизациях, которые он выполняет. И это даже не считая более сложной обработки потоков и т. Д.
Я люблю Python, правда, и мне неприятно это говорить, но иногда производительность просто бьет меня по зубам - в противном случае, почему критические библиотеки Python, такие как numpy или scipy, должны вернуться в C-код?
Другими словами, люди, которые тяготеют к Python, делают это, потому что им нравится язык . Но если вы хотите написать новый язык в соответствии с вашими предпочтениями, вам гораздо лучше компилировать в JVM, потому что ваш новый идиосинкразический язык будет начинаться в одной из лучших (субъективно, возможно, лучших) доступных операционных сред.
источник