Perché l'istruzione bytecode Java non è ortogonale?

3

La sezione 2.11.1 della specifica JVM 8 include le parole:

In other words, the instruction set is intentionally not orthogonal.

Dal mio punto di vista, ciò implica che il set di istruzioni bytecode Java sia pieno di hack sporchi. Capisco che i progettisti erano limitati a un solo byte per rappresentare opcodes, ma poi hanno consumato 8 opcode per aload e astore, per non parlare dei singoli opcode per iload, fload, dload, ecc. L'unica ragione per cui posso pensare di fare il il set di istruzioni nonorthogonal è di ottimizzarlo per i sistemi con vincoli di memoria **; sembra che queste decisioni di progettazione rendano più difficile scrivere ottimizzatori, per non parlare del limite del set di istruzioni.

Sicuramente mi manca qualcosa. Perché i progettisti Java lo hanno fatto in questo modo?

** Quando dico "vincolato alla memoria", ciò a cui mi riferisco è la dimensione del bytecode stesso. Presumibilmente il motivo per cui hanno aload_0 è perché salva un byte su aload 0, ed è usato a ton .

    
posta kd8azz 21.05.2015 - 02:40
fonte

1 risposta

3

Surely I am missing something. Why did the Java designers do it this way?

Java è nato da Oak , che originariamente era destinato a essere utilizzato in "elettrodomestici intelligenti". È stato sviluppato per la prima volta nel 1991. Quindi stiamo parlando di sistemi embedded della vecchia scuola, con limiti di risorse molto limitati dagli standard degli anni '90.

Oggi, quando "sistema incorporato" può significare un computer minimalista ma completo che costa $ 9 , sembra un po 'sconvolgente architettare un sistema in questo modo, ma quasi 25 anni fa, salvando un byte qui e un byte lì su un sistema embedded era ancora un grosso problema.

    
risposta data 28.05.2015 - 21:25
fonte

Leggi altre domande sui tag