Em Java, existem várias linguagens que são compiladas no bytecode Java e podem ser executadas na JVM - Clojure, Groovy e Scala, sendo as principais que me lembro de cabeça.
No entanto, o Python também se transforma em bytecode (arquivos .pyc) antes de ser executado pelo interpretador Python. Eu posso apenas ser ignorante, mas por que não existem outras linguagens de programação que sejam compiladas no bytecode python?
É apenas porque ninguém se incomodou ou existe algum tipo de restrição ou barreira inerente que dificulta a execução?
python
virtual-machine
virtual-machine-languages
Michael0x2a
fonte
fonte
Respostas:
Simples - da última vez que verifiquei, o Python não tinha especificação formal, incluindo seu bytecode. CPython é a especificação e a portabilidade de bytecode é IIRC não necessária. Portanto, é um alvo em movimento e não documentado, projetado para um idioma específico.
fonte
Existem várias linguagens JVM, porque havia pessoas talentosas que queriam escrever código que funcionasse com o código Java existente, mas não queriam escrever Java .
Aparentemente, não há programadores que queiram trabalhar com o código Python existente, mas odeiam o Python o suficiente para portar outra linguagem para o interpretador de bytecode do Python.
Você pode ver isso de duas maneiras: existem linguagens alternativas para a JVM porque o Java é muito difundido ou não há linguagens alternativas para o interpretador de bytecode do Python porque o Python não é uma droga.
fonte
this
paradigma.Existem deficiências técnicas como o GIL no CPython, mas poucas deficiências de linguagem percebidas , portanto, o tempo de execução não é o ponto de venda da comunidade Python. Exatamente o oposto, há mais opções de tempo de execução de back-end devido à insatisfação com a implementação do GIL / CPython.
A linguagem Java é muito mais difamada que a JVM (mesmo na comunidade Java).
A JVM é muito bem vista na maioria dos círculos; portanto, o desejo de diferentes / melhores idiomas para front-ends com os benefícios da JVM de back-end altamente otimizada.
fonte
Eu digo que Mason Wheeler está certo. É principalmente um problema com o Global Interpreter Lock, que torna a concorrência um problema muito complicado. Como existem outras VMs que fazem simultaneidade muito bem comparativamente, faz sentido desenvolver linguagens para elas. Além disso, o Python teve uma grande mudança de idioma recentemente e muitas das bibliotecas não conseguiram tornar a compatibilidade um pesadelo moderado às vezes. Por exemplo, porque eu uso o PIL para o trabalho de visão, tenho que codificar no Python 2.7 ou inferior. Este não é o caso das configurações da JVM ou da CLI que, particularmente no caso desta, foram projetadas com a interoperabilidade de idioma em mente.
Fiz mais algumas pesquisas e, aparentemente, existem dois GILs, não apenas esse. O outro controla importações .
fonte
As outras respostas fazem muito sentido, mas atualmente existem linguagens que compilam no Python. Onde há uma vontade...
Não sei nada sobre essas linguagens, mas elas parecem funcionar ao transpilar seu código-fonte para ASTs do Python e permitir que o Python compile as árvores no bytecode, evitando os problemas mencionados em outras respostas.
Com base nos comentários, atualmente conhecemos três linguagens alternativas que usam a VM Python (fique à vontade para adicionar outras aqui):
fonte
Outro motivo é que a JVM é um ecossistema altamente otimizado, bem evoluído e extremamente completo. Por si só, ele compete extremamente bem com qualquer um dos outros idiomas compilados. (Não vou dizer que é a melhor VM de uso geral disponível no mercado, mas certamente apostou em minha carreira nisso.) Portanto, o acesso à JVM, com exceção de escrever o código de código, é desejável por si só.
No entanto, a VM do Python é boa, mas (nada contra o Python) tem algumas falhas sérias. O ambiente de tempo de execução do Python se adapta bem à natureza dinâmica da linguagem, mas pode realmente surpreendê-lo quando você se familiarizar com o uso de memória, bloqueio global ou modelo de encadeamento.
Nas comparações frente a frente, a JVM geralmente é duas vezes mais rápida que a VM Python. A JVM (surpreendentemente) ainda concorre bem com o código compilado nativamente, com base nas otimizações "quentes" que realiza. E isso nem conta o manuseio de threads mais sofisticado etc.
Eu amo Python, eu realmente amo, e odeio dizer isso, mas às vezes o desempenho me choca nos dentes - caso contrário, por que as bibliotecas críticas do Python, como numpy ou scipy, teriam que voltar ao código C?
Em outras palavras, as pessoas que gravitam no Python o fazem porque gostam da linguagem . Mas se você deseja escrever um idioma totalmente novo para atender às suas preferências, é muito melhor compilar na JVM, porque seu novo idioma idiossincrático começará em um dos melhores ambientes operacionais (subjetivamente, talvez o melhor) disponíveis.
fonte