Perché non ci sono altri linguaggi di programmazione che compilano in bytecode Python?

51

In Java, ci sono più lingue che compilano in bytecode Java e possono essere eseguite su JVM - Clojure, Groovy e Scala sono le principali che riesco a ricordare in cima alla mia testa.

Tuttavia, Python si trasforma anche in bytecode (file .pyc) prima di essere eseguito dall'interprete Python. Potrei semplicemente essere ignorante, ma perché non ci sono altri linguaggi di programmazione che compilano in bytecode python?

È solo perché nessuno si è preso la briga di reagire o esiste qualche tipo di restrizione o barriera intrinseca che rende difficile farlo?

    
posta Michael0x2a 17.05.2012 - 01:59
fonte

6 risposte

74

Semplice: l'ultima volta che ho controllato, Python non aveva specifiche formali, incluso il suo bytecode. CPython è la specifica e la portabilità del codice byte non richiede IIRC. Pertanto, è un obiettivo mobile e non documentato progettato per una lingua specifica.

    
risposta data 17.05.2012 - 04:27
fonte
54

Esistono più linguaggi JVM perché c'erano persone di talento che volevano scrivere codice che avrebbe funzionato con il codice Java esistente, ma non volevano scrivere Java .

Apparentemente non ci sono programmatori che vogliono lavorare con il codice Python esistente, ma odiano Python abbastanza per portare un'altra lingua all'interprete bytecode Python.

Puoi guardare a questo in due modi: ci sono linguaggi alternativi per la JVM perché Java è così diffuso, o non ci sono linguaggi alternativi per l'interprete bytecode Python perché Python non fa schifo.

    
risposta data 17.05.2012 - 18:30
fonte
25

Ci sono delle deficienze tecniche come il GIL in CPython, ma poche deficienze di lingue percepite, quindi il runtime non è il punto di forza della comunità Python. Esattamente l'opposto, ci sono più opzioni di runtime di back-end a causa dell'insoddisfazione con l'implementazione GIL / CPython.

Il linguaggio Java è molto più diffamato della JVM (anche nella comunità Java).

La JVM è considerata abbastanza bene nella maggior parte dei circoli; quindi il desiderio di un linguaggio diverso / migliore finisce con i vantaggi del back-end JVM altamente ottimizzato.

    
risposta data 17.05.2012 - 18:39
fonte
10

Dico che Mason Wheeler ha ragione. È principalmente un problema con il Global Interpreter Lock che rende la concorrenza un problema molto spinoso. Dal momento che ci sono altre macchine virtuali che fanno concorrenza in realtà in modo veramente comparativo, ha senso sviluppare linguaggi per loro. Anche Python ha avuto un cambiamento di lingua importante di recente e molte delle librerie non hanno ancora recuperato la compatibilità a volte un incubo. Ad esempio perché utilizzo il PIL per il lavoro di visione, devo codificare in Python 2.7 o versioni precedenti. Questo non è il caso con le configurazioni JVM o CLI che, in particolare nel caso di quest'ultimo, sono state progettate tenendo conto delle interpolazioni linguistiche.

Ha fatto qualche ricerca in più e apparentemente ci sono in realtà due GIL non solo uno. Gli altri controlli Importazioni .

    
risposta data 17.05.2012 - 02:47
fonte
8

Le altre risposte hanno molto senso, ma ora ci sono linguaggi che vengono compilati in Python. Dove c'è una volontà ...

Non so nulla di questi linguaggi, ma sembrano funzionare trasponendo il loro codice sorgente in AST Python e lasciando che Python compili gli alberi in bytecode, evitando i problemi menzionati in altre risposte.

Sulla base dei commenti, al momento conosciamo tre lingue alternative che usano la VM Python (sentiti libero di aggiungere altri qui):

  • Mochi si descrive come un linguaggio di programmazione tipizzato in modo dinamico per la programmazione funzionale e la programmazione in stile attore .
  • Hy : si descrive come un dialetto di Lisp incorporato in Python .
  • dg : si descrive come un linguaggio (tecnicamente) semplice che compila in bytecode CPython .
risposta data 19.12.2014 - 00:17
fonte
6

Un altro motivo è che la JVM è un ecosistema estremamente ottimizzato, ben evoluto ed estremamente completo. Da solo, è in grado di competere molto bene con qualsiasi altra lingua compilata. (Non dirò che è la migliore VM generalista là fuori, ma ho sicuramente messo la mia carriera su questo.) Quindi ottenere l'accesso alla JVM, a meno di scrivere bytecode, è auspicabile in stesso.

Tuttavia, Python VM è buono, ma (niente contro Python) ha alcune gravi carenze. L'ambiente di runtime di Python si adatta bene alla natura dinamica del linguaggio, ma può davvero sorprenderti quando acquisisci familiarità con l'utilizzo della memoria, il blocco globale o il modello di threading.

Nei confronti testa a testa, la JVM è in genere il doppio della VM Python. La JVM (sorprendentemente) compete anche bene con il codice compilato in modo nativo, basato sulle ottimizzazioni "hot" che esegue. E questo non conta nemmeno la gestione dei thread più sofisticata, ecc.

Adoro Python, lo faccio davvero, e odio dirlo, ma a volte la performance mi prende a calci nei denti - altrimenti, perché le librerie Python critiche come Numpy o Scipy devono ricadere nel codice C?

In altre parole, le persone che gravitano su Python lo fanno perché a loro piace la lingua . Ma se vuoi scrivere un linguaggio nuovo per adattarlo alle tue preferenze, stai molto meglio compilando la JVM, perché il tuo nuovo linguaggio idiosincratico inizierà in uno dei migliori (soggettivamente, forse i migliori) ambienti operativi disponibili.

    
risposta data 19.12.2014 - 03:21
fonte

Leggi altre domande sui tag