it-swarm.com.de

Hat Little Endian gewonnen?

Als ich kürzlich über die Schlacht zwischen Big und Little Endian unterrichtete, fragte ein Schüler, ob sie beigelegt worden sei, und mir wurde klar, dass ich es nicht wusste. Mit Blick auf Wikipedia-Artikel scheint es, dass die beliebtesten aktuellen OS/Architektur-Paare Little Endian verwenden, das Internetprotokoll jedoch Big Endian für die Übertragung numerischer Werte in Paket-Headern angibt. Wäre das eine gute Zusammenfassung des aktuellen Status? Bieten aktuelle Netzwerkkarten oder CPUs Hardware-Unterstützung für das Umschalten der Bytereihenfolge?

36
Ellen Spertus

Ich würde argumentieren, dass es nicht so sehr gewonnen wird, als dass es keine Rolle mehr spielt. ARM, das im Grunde den gesamten Mobilfunkmarkt ausmacht, ist bi-endianisch (oh, die Häresie!). In dem Sinne, dass x86 im Grunde genommen den Desktop-Markt "gewonnen" hat, könnte man sagen, dass Little Endian gewonnen hat, aber ich denke, angesichts der gesamten Codetiefe (flach) und Abstraktion (viele) vieler heutiger Anwendungen ist dies viel weniger ein Problem als ich war. Ich erinnere mich nicht daran, dass Endianness in meiner Klasse für Computerarchitektur wirklich aufgetaucht ist.

Ich vermute, dass sich viele Entwickler nicht einmal der Endianness bewusst sind oder warum es wichtig ist. Denn für die große (und ich meine große) Mehrheit ist es für ihr tägliches Arbeitsumfeld völlig irrelevant. Dies war vor 30 Jahren anders, als jeder viel näher am Metall programmierte als Textdateien auf einem Bildschirm auf ausgefallene und dramatische Weise zu manipulieren.

Mein allgemeiner Verdacht ist, dass die objektorientierte Programmierung der Anfang vom Ende der Sorge um Endianness war, da die Ebenen des Zugriffs und der Abstraktion in einem guten OO System Implementierungsdetails vor dem Benutzer verbergen. Da die Implementierung Endianness beinhaltet, haben sich die Leute daran gewöhnt, dass dies kein expliziter Faktor ist.

Nachtrag: zxcdw erwähnte die Portabilität als bedenklich. Was ist jedoch in den letzten 20 Jahren mit aller Macht geschehen? Programmiersprachen, die auf virtuellen Maschinen basieren. Sicher, die Endianness der virtuellen Maschine könnte eine Rolle spielen, aber sie kann für diese eine Sprache so konsistent gemacht werden, dass sie im Grunde genommen kein Problem darstellt. Nur die VM Implementierer müssten sich unter dem Gesichtspunkt der Portabilität überhaupt um die Endianness kümmern.

25
World Engineer

Endians sind nur dann wirklich wichtig, wenn Sie binäre Datensysteme übertragen.

Mit der Verbesserung der Prozessorgeschwindigkeit (und den viel geringeren Speicherkosten) werden binäre Datenschnittstellen immer seltener, sodass Sie sie auf der Anwendungsebene nicht bemerken. Sie verwenden entweder ein Textübertragungsformat (XML/JSON) oder Sie verwenden eine Datenschichtabstraktion, die die Übersetzung für Sie übernimmt (sodass Sie nicht einmal bemerken, dass es eine Übersetzung gibt).

Aber wenn Sie auf der binären Datenschicht codieren, bemerken Sie dies und es ist sehr wichtig. Als ich zum Beispiel bei VERITAS (jetzt Symantec) arbeitete, baute ich Software, die auf 25 verschiedenen Hardwareplattformen erstellt wurde (nicht nur Big/Little Endian, es gibt auch andere Typen).

4
Martin York

Nein, niemand hat gewonnen. Wir als Spezies haben es nicht geschafft, die Reihenfolge, in der wir unsere Bytes speichern, zusammen mit der Richtung, in die wir schreiben, und der Straßenseite, auf der wir fahren, zu standardisieren.

Infolgedessen hat jeder, der Daten zwischen zwei verschiedenen Systemen über ein Netzwerk oder in einer Datei übertragen möchte, nur eine Wahrscheinlichkeit von etwa 50%, dass die vernünftige Anfangsversion seines Daten-Dumping-Codes in seiner Umgebung korrekt ist und selbst wenn dies funktioniert hat eine 50% ige Chance, bei ihren Kunden zu arbeiten.

Um dies zu bewältigen, müssen Sie plattformspezifische Funktionen mit Namen wie "htonl" in Headern nachschlagen, deren Namen offensichtlich aus den 70er Jahren stammen, wie "arpa/inet.h", da sich die Situation seitdem nicht verbessert hat und dies wahrscheinlich nie tun wird .

4
Andrew Wagner

Es besteht immer noch kein Konsens:

  • Die meisten größeren Computersysteme (Server/Desktop/Laptop) verwenden derzeit Little-Endian-Architekturen
  • Die meisten kleineren Computer (Tablets/Telefone) verwenden eine endianness-unabhängige Prozessorarchitektur, führen jedoch Betriebssysteme aus, die Little-Endian-Reihenfolge verwenden

Auf Hardwareebene ist LE also weitaus häufiger. Aber:

  • Die meiste Kommunikation zwischen Computern wird unter Verwendung von Protokollen durchgeführt, die die Big-Endian-Reihenfolge angeben
  • Ein sehr großer Teil der weltweiten Software läuft auf einer virtuellen Plattform, die standardmäßig die Big-Endian-Reihenfolge verwendet, wenn Daten in einen externen Speicher geschrieben werden.

Beide Aufträge werden auf absehbare Zeit bei uns sein.

1
Jules