Ha vinto Little Endian?

29

Quando ho insegnato di recente sulla battaglia Big vs. Little Endian, uno studente ha chiesto se era stato risolto, e ho capito che non lo sapevo. Guardando l' articolo di Wikipedia , sembra che le più diffuse coppie di sistemi operativi / architettura utilizzino Little Endian ma che il protocollo Internet specifica Big Endian per il trasferimento di valori numerici nelle intestazioni dei pacchetti. Sarebbe un buon riassunto dello stato attuale? Le schede di rete attuali o le CPU forniscono supporto hardware per l'ordine di commutazione dei byte?

    
posta Ellen Spertus 23.09.2012 - 19:29
fonte

4 risposte

20

Direi che non è tanto vinta quanto importante. ARM che costituisce fondamentalmente tutto il mercato mobile è bi-endian (oh, l'eresia!). Nel senso che x86 fondamentalmente "ha vinto" il mercato desktop, suppongo che si possa dire che il piccolo endian ha vinto, ma penso che data la profondità complessiva del codice (superficiale) e l'astrazione (molte) di molte delle applicazioni di oggi, è molto meno un problema di lo era. Non ricordo che l'endianità si presentasse davvero nella mia classe di Computer Architecture.

Ho il sospetto che molti sviluppatori non siano nemmeno consapevoli di endianness o del perché sia importante. Perché per la vasta (e intendo vasta ) maggioranza è assolutamente irrilevante per il loro ambiente lavorativo quotidiano. Questo era diverso 30 anni fa, quando tutti codificavano molto più vicino al metallo anziché manipolare file di testo su uno schermo in modi fantasiosi e drammatici.

Il mio sospetto generale è che la programmazione orientata agli oggetti è stata l'inizio della fine della cura dell'endianità, dal momento che gli strati di accesso e di astrazione in un buon sistema OO nascondono i dettagli dell'implementazione all'utente. Dal momento che l'implementazione include endianness, le persone si sono abituate a non essere un fattore esplicito.

Addendum: zxcdw ha menzionato la portabilità come preoccupazione. Tuttavia, che cosa è sorto con una vendetta negli ultimi 20 anni? Linguaggi di programmazione costruiti su macchine virtuali. Sicuramente l'endianness della macchina virtuale potrebbe essere importante, ma può essere reso molto coerente per quella lingua fino al punto in cui è fondamentalmente un non-problema. Solo gli implementatori VM dovrebbero anche preoccuparsi dell'endianness da un punto di vista della portabilità.

    
risposta data 23.09.2012 - 19:42
fonte
4

Gli endian sono importanti solo quando si trasferiscono sistemi di dati binari.

Con l'avanzamento della velocità del processore (e il costo molto più basso di storage) le interfacce dati binarie diventano sempre più rare, quindi non le noti a livello di applicazione. Stai utilizzando un formato di trasferimento testuale (XML / JSON) o stai utilizzando l'astrazione del livello dati che si occupa della traduzione per te (quindi non ti accorgi nemmeno che c'è una traduzione).

Ma quando si sta codificando sul livello di dati binari si nota ed è molto importante. Ad esempio, quando lavoravo a VERITAS (Symantec adesso) stavo sviluppando un software che veniva costruito su 25 piattaforme hardware diverse (non solo big / little endian ce ne sono di altri tipi).

    
risposta data 23.09.2012 - 23:08
fonte
3

No, nessuno ha vinto. Noi come specie non siamo riusciti a standardizzare l'ordine in cui archiviamo i nostri byte, insieme alla direzione che scriviamo e al lato della strada su cui guidiamo.

Di conseguenza, chiunque desideri trasferire i dati tra due sistemi diversi su una rete o in un file, ha solo una probabilità del 50% circa che la versione iniziale ragionevole del loro codice di dumping dei dati sia corretta nel proprio ambiente e persino se funziona, ha il 50% di possibilità di lavorare nei propri clienti.

Per far fronte a questo devi andare a cercare funzioni specifiche della piattaforma con nomi come "htonl" nelle intestazioni con nomi che risalgono ovviamente agli anni '70 come "arpa / inet.h", perché la situazione non è migliorata da allora e probabilmente non lo farò mai.

    
risposta data 29.10.2015 - 11:26
fonte
1

Non c'è ancora consenso:

  • La maggior parte dei sistemi di computer più grandi (server / desktop / laptop) attualmente utilizza architetture little-endian
  • La maggior parte dei computer più piccoli (tablet / telefoni) utilizzano un'architettura di processore indipendente dall'endianness, ma esegue sistemi operativi che utilizzano l'ordine little-endian

Quindi a livello hardware, LE è molto più comune. Ma:

  • La maggior parte delle comunicazioni tra computer viene eseguita utilizzando protocolli che specificano l'ordine big-endian
  • Una gran parte del software del mondo gira su una piattaforma virtuale che per impostazione predefinita è l'ordine big-endian ogni volta che i dati vengono scritti sull'archivio esterno.

Entrambi gli ordini saranno con noi per il prossimo futuro.

    
risposta data 29.10.2015 - 12:27
fonte