Por que não existem outras linguagens de programação que compilam o bytecode do Python?

51

Em Java, existem vários idiomas que são compilados para o bytecode Java e podem ser executados na JVM - Clojure, Groovy e Scala, sendo os principais que eu consigo lembrar.

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 compilam para bytecode de python?

É só porque ninguém se incomodou, ou existe algum tipo de restrição ou barreira inerente que dificulta isso?

    
por Michael0x2a 17.05.2012 / 01:59
fonte

6 respostas

74

Simples - da última vez que verifiquei, o Python não tinha especificação formal, incluindo o bytecode. CPython é a especificação e a portabilidade de bytecode é IIRC não requerida. Assim, é um alvo em movimento, não documentado, projetado para uma linguagem específica.

    
por 17.05.2012 / 04:27
fonte
54

Existem várias linguagens da JVM porque havia pessoas talentosas que queriam escrever código que funcionasse com código Java existente, mas não queriam escrever Java .

Aparentemente não há programadores que queiram trabalhar com código Python existente, mas odeiam 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 é tão difundido, ou não existem linguagens alternativas para o interpretador de bytecodes do Python, porque o Python não é uma droga.

    
por 17.05.2012 / 18:30
fonte
25

Existem deficiências técnicas, como o GIL no CPython, mas poucas deficiências percebidas idioma , portanto, o tempo de execução não é o ponto de venda da comunidade Python. Exatamente o oposto, existem mais opções de back-end em tempo de execução devido à insatisfação com a implementação da GIL / CPython.

A linguagem Java é muito mais difamada do que a JVM (mesmo na comunidade Java).

A JVM é muito bem vista na maioria dos círculos; assim, o desejo por front ends diferentes / melhores de linguagem com os benefícios da JVM back-end altamente otimizada.

    
por 17.05.2012 / 18:39
fonte
10

Eu digo que Mason Wheeler está certo. É principalmente um problema com o Global Interpreter Lock, que torna a concorrência um assunto muito espinhoso. Como existem outras VMs que fazem concorrência muito bem comparativamente, faz sentido desenvolver linguagens para elas. Também o Python teve uma grande mudança de idioma recentemente e muitas das bibliotecas não conseguiram tornar a compatibilidade um pesadelo leve às vezes. Por exemplo, porque eu uso o PIL para trabalho de visão, eu tenho que codificar no Python 2.7 ou inferior. Este não é o caso com as configurações da JVM ou da CLI que, particularmente no caso desta última, foram projetadas tendo em mente a interoperabilidade da linguagem.

Fiz algumas pesquisas e, aparentemente, existem dois GILs não apenas um. Os outros controles Importações .

    
por 17.05.2012 / 02:47
fonte
8

As outras respostas fazem muito sentido, mas atualmente existem linguagens que compilam para o Python. Onde há um testamento ...

Eu não sei nada sobre essas linguagens, mas elas parecem funcionar transpilando seu código-fonte para ASTs do Python e permitindo que o Python compile as árvores para o código de bytes, evitando os problemas mencionados em outras respostas.

Com base nos comentários, atualmente sabemos de três idiomas alternativos que usam a VM Python (sinta-se à vontade para adicionar outros aqui):

  • Mochi Descreve-se como uma linguagem de programação tipada dinamicamente para programação funcional e programação de estilo de ator .
  • >
  • Hy : Descreve-se como um dialeto do Lisp embutido no Python .
  • dg : Descreve-se como uma linguagem (tecnicamente) simples que compila o bytecode do CPython .
por 19.12.2014 / 00:17
fonte
6

Outra razão é que a JVM é um ecossistema altamente otimizado, bem desenvolvido e extremamente completo. Por si só, compete muito bem com qualquer uma das outras linguagens compiladas. (Eu não vou dizer que é a melhor VM de propósito geral, mas eu certamente joguei minha carreira nisso.) Então, obter acesso à JVM, a não ser escrever bytecode, é desejável em em si.

No entanto, a VM Python é boa, mas (nada contra o Python) tem algumas falhas graves. O ambiente de tempo de execução Python atende bem à natureza dinâmica da linguagem, mas pode realmente surpreendê-lo quando você se familiarizar com seu uso de memória, bloqueio global ou modelo de threading.

Em comparações frente-a-frente, a JVM é tipicamente duas vezes mais rápida que a VM Python. A JVM (surprizely) até compete bem com código compilado nativamente, baseado nas otimizações "quentes" que ele executa. E isso não é nem mesmo contar com o tratamento de threads mais sofisticado, etc.

Eu adoro o Python, eu realmente gosto e odeio dizer isso, mas às vezes o desempenho me dá um chute nos dentes - caso contrário, por que bibliotecas críticas do Python como numpy ou scipy teriam que voltar ao código C?

Em outras palavras, as pessoas que gravitam em Python fazem isso porque gostam da linguagem . Mas se você quiser escrever um novo idioma para se adequar às suas preferências, é muito melhor compilar para o JVM, porque o seu novo idioma idiossincrático começará em um dos melhores ambientes operacionais (subjetivamente, talvez os melhores) disponíveis.

    
por 19.12.2014 / 03:21
fonte