In che modo la JVM e la WORA di Java sono diverse dalle altre lingue di alto livello?


12

Nel mondo Java, parliamo spesso di JVM, e quando Java era nuovo aveva la caratteristica apparentemente killer di "Scrivi una volta, corri ovunque".

Dal modo in cui le persone parlano e scrivono, questo sembra diverso dal modo in cui Python, per esempio, funziona. Eppure non ero a conoscenza del modo in cui il codice Python che avevo scritto avrebbe funzionato diversamente su un'altra macchina. (Anche se non ho scritto così tanto Python.)

Quindi cosa mi sto perdendo? In che modo la JVM è diversa da un interprete Python? C'è un modo in cui Python manca dell'indipendenza della piattaforma Java? O è solo una differenza culturale?


1
La differenza principale è la rigidità delle specifiche JVM. È semplicemente molto ben definito come deve (non dovrebbe) comportarsi.

Risposte:


17

Java fa un ottimo lavoro per isolarti dal sistema operativo sottostante e ti offre gli stessi strumenti esatti sulla maggior parte delle piattaforme su cui lavora per parlare con le cose nel sistema operativo sottostante.

Python d'altra parte non fa altrettanto bene di isolarti dal sistema operativo sottostante, non ha un modo standard di gestione tra le comunicazioni di processo (guarda le differenze nel modulo sys e nel modulo os tra windows e * implementazione nix di Python per esempio.)

Ho scritto codice in Python che funzionerebbe solo su una * NIX box o Windows box usando solo le chiamate API disponibili di Python, dove in Java sarebbe molto difficile scrivere codice che fosse solo API Java che non avrebbe funzionato allo stesso modo su entrambi Casella di Windows o * NIX


1
Non è affatto difficile scrivere codice Java che funziona solo su Windows; codifica un percorso di un file Windows come "C: \ MyApp \ data"
kevin cline

@kevincline I percorsi hardcoded sono una cattiva pratica su qualsiasi sistema operativo. Ma Java non ti richiede di farlo, perché offre metodi indipendenti dal sistema operativo per recuperare directory comuni come la directory utente o il percorso di installazione del programma corrente.
Philipp,

3

Topicamente e solo da un runtime linguistico, c'è poca differenza. La JVM in particolare è progettata non solo come interprete ma anche come compilatore di runtime, inferenza di codice, uno strato di virtualizzazione strumentale a cui possono essere applicati hook dinamici, varie semantiche di GC e la capacità di descrivere l'ergonomia della virtualizzazione, solo per citarne alcuni. Python può essere eseguito in una JVM? Java può funzionare in un interprete Python?

La maggior parte degli interpreti sono interpreti di linguaggio / token di runtime, JVM (e altri) come sai interpretare / compilare / eseguire codice intermedio. IBM, ad esempio, lo fa da decenni al di fuori di Java, non è una novità. Anche VB ha funzionato in codice intermedio per qualche tempo credo?

Il WORA è per lo più passé ora poiché molte lingue interpretate corrono praticamente invariate.


3

Quando Java era nuovo, WORA era qualcosa di cui vantarsi - in particolare, che era possibile compilare su una piattaforma ed eseguirlo (codice byte compilato) su altre piattaforme.

Ovviamente, le lingue interpretate funzionano in modo abbastanza simile indipendentemente dalla piattaforma su cui è in esecuzione l'interprete (purché l'interprete sia disponibile per quella piattaforma). Tuttavia, i file system, i problemi di autorizzazione, le codifiche, le terminazioni di riga e innumerevoli altri piccoli ma irritanti problemi possono causare mal di testa. Alcune cose dipendenti dalla piattaforma non sono facili da sottrarre.


WORA in sé non è abbastanza. La parte veramente importante è che è ben definito come funziona ovunque, rendendolo poco importante esattamente dove è stato eseguito.
Thorbjørn Ravn Andersen,

1

Python ha una GUI indipendente dalla piattaforma?

Ad ogni modo, la funzione WORA doveva, ancora una volta, attirare i programmatori C, poiché C tendeva a modellare da vicino la piattaforma sottostante, e poiché le piattaforme erano diverse (dimensione della parola? Endianess?) La creazione di programmi C completamente portatili richiedeva grande cura e attenzione.

La promessa di Java era che non era necessario fare tutto questo noioso, dato che la piattaforma è ben definita e sai che un carattere è a 16 bit ecc. Inoltre la GUI è scritta in Java e anche portatile al 100%, il che significa che il tuo programma può essere eseguito su un computer di cui non hai mai sentito parlare e persino eseguito correttamente.


6
Python ha diverse alternative GUI indipendenti dalla piattaforma: docs.python.org/faq/…
Joonas Pulakka,

Le GUI Java sono famose per non essere visualizzate correttamente su varie piattaforme, quindi non mi vanterei esattamente di questo aspetto. Tuttavia, sarei d'accordo con il resto della tua dichiarazione.
infuria il

-4

Solo che Java è decisamente non WORA. Ho visto il software Java che si è rotto dopo che Java è stato aggiornato a una versione successiva con il numero di versione minore . IMHO, WORA è solo un espediente di marketing.


1
Questa non è davvero una risposta alla domanda.
Eric Wilson,

-1 perché Java è WORA per tutti gli scopi pratici. Essa vi funzionerà se si evita di hack del sistema-specifici e roba del genere, ovviamente, nativo come JNI. Ho avuto oltre 50.000 applicazioni di linea eseguite perfettamente su Windows, Mac e Linux, nessuna modifica, la prima volta, con lo stesso file .jar compilato. Se ti attacchi a Java puro, tutto funziona.
Mikera,

1
Sembra che tu abbia capito male cosa significhi WORA.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.