Cosa significa che Squeak corre "bit-identicamente" attraverso le piattaforme, in un certo senso Java?

StackOverflow https://stackoverflow.com/questions/662681

Domanda

Alan Kay sottolinea che "a differenza di Java, [cigolio] corre un po 'identico su ogni macchina-l'abbiamo inventato 20 anni fa". Il Pagina Wikipedia menziona anche questo:

Squeak è disponibile per molte piattaforme e i programmi prodotti su una piattaforma sono identici su tutte le altre piattaforme.

Dal momento che le macchine con set di istruzioni diverse ovviamente non possono eseguire programmi bit-identici in modo nativo, cosa significa quando si dice che cigolio esegue programmi bit-identici su macchine diverse, in un modo che Java non lo fa?

Ho l'impressione che le classi Java compilate siano identiche su qualsiasi macchina su qualsiasi JVM, non è così?

È stato utile?

Soluzione

L'ovvia interpretazione è che l'esecuzione della stessa immagine su diverse macchine con gli stessi input si tradurrà nell'immagine che si evolve attraverso gli stessi motivi di bit. Questo post su Floating Point Math implica che il punto galleggiante ha una rappresentazione identica su piattaforme diverse. Java richiede che la semantica sia la stessa tra le piattaforme, ma consente rappresentazioni denormalizzate. La biblioteca che Squeak utilizza per garantire che il punto galleggiante bit-identical attraverso la piattaforma sia uno di Sun, che usa anche il Sun JVM, sebbene menzionano ulteriormente limitandolo con le impostazioni del compilatore.

Altri suggerimenti

Il termine bit-identico non può solo fare riferimento a nessun codice nativo, ma anche fare riferimento a come vengono gestite le operazioni dei dati. Dalla piattaforma all'altra vi è una differenza sottile, ad esempio nelle cifre meno significative dei numeri dei punti mobili a causa delle differenti implementazioni hardware dell'unità di punta mobile.

Quindi un bit-identico potrebbe anche significare che tali differenze vengono rimosse e ogni singola istruzione restituisce un po 'per un po' lo stesso risultato su ogni hardware. Ad hoc questo proibisce l'utilizzo di un po 'di hardware e richiederebbe emulazione. Non sono sicuro che questo sia fattibile a costi accettabili o se c'è un buon trucco per raggiungere questo obiettivo.

Un po 'identico significa che l'immagine cigolante stessa può essere eseguita in molte piattaforme, non solo il codice sorgente cigolio.

L'immagine SmallTalk è in particolare un negozio sia per il codice (in formato bytecode) che per gli oggetti vivi. Il codice è disponibile in formato bytecode intermedio, che VM si compila quindi al codice macchina specifico della piattaforma al volo.

Dalla documentazione di java.lang.math:

A differenza di alcuni dei metodi numerici di classe StrictMath, tutte le implementazioni delle funzioni equivalenti della matematica di classe non sono definite per restituire gli stessi risultati bit-per-bit. Questo rilassamento consente implementazioni migliori in cui non è richiesta una rigorosa riproducibilità.

Funziona su una macchina virtuale, come indicato nella frase successiva su Wikipedia. :)

Non sono sicuro di cosa significhi la parte "bit-identica", rispetto a Java. La mia impressione è che gli stessi file di classe possano funzionare su macchine diverse, poiché anche Java funziona su una macchina virtuale.

Speriamo che Alan salti nel thread e lo chiarisca per noi!

L'unica cosa a cui riesco a pensare è che si riferisce al fatto che Java è spesso (e C# è sempre) "just-in-time" compilato sulla macchina target al codice nativo, prima che sia eseguito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top