最近、ビッグエンディアン対リトルエンディアンの戦いについて教えているとき、学生はそれが解決したかどうか尋ねました、そして私は知らないことに気付きました。 ウィキペディアの記事 を見ると、現在最も人気のあるOS /アーキテクチャのペアはリトルエンディアンを使用しているようですが、インターネットプロトコルはパケットヘッダーの数値を転送するためにビッグエンディアンを指定しています。それは現状の良い要約でしょうか?現在のネットワークカードまたはCPUは、バイトオーダーを切り替えるためのハードウェアサポートを提供していますか?
私はそれが問題でなくなったのでそれほど勝ったわけではないと主張します。 ARMこれは、基本的にすべてのモバイル市場を構成するものですが、バイエンディアンです(ああ、異端です!)。x86は基本的にデスクトップ市場を「勝ち取った」という意味で、エンディアンは勝ちましたが、今日の多くのアプリケーションの全体的なコード深度(浅い)と抽象化(ロット)を考えると、以前よりもずっと問題が少ないと思います。コンピュータアーキテクチャクラスでエンディアンが実際に登場することは覚えていません。
多くの開発者はエンディアンやそれがなぜ重要なのかさえ知らないのではないかと思います。なぜなら、広大な(つまりvast)大多数にとっては、彼らの日常の作業環境とはまったく関係がないからです。これは30年前とは異なり、画面上のテキストファイルを派手で劇的な方法で操作するのではなく、誰もが金属の近くにコーディングしていました。
私の一般的な疑いは、オブジェクト指向プログラミングがエンディアンについての気遣いの終わりの始まりだったということです。これは、アクセスと抽象化の層が良いOOシステムのユーザーの実装の詳細を隠すためです。実装にはエンディアンが含まれているため、 、人々はそれが明示的な要因ではないことに慣れました。
補遺:zxcdwは、移植性に懸念があると述べました。しかし、過去20年間の復讐で何が起こったのでしょうか。仮想マシン上に構築されたプログラミング言語。確かに仮想マシンのエンディアンが問題になるかもしれませんが、基本的には問題にならない程度まで、1つの言語で非常に一貫性を持たせることができます。 VM実装者だけが、移植性の観点からエンディアンについて心配する必要さえあるでしょう。
エンディアンは、バイナリデータシステムを転送する場合にのみ重要です。
プロセッサ速度の向上(およびストレージのコストが大幅に削減される)に伴い、バイナリデータインターフェースは珍しくなり、アプリケーションレイヤーでそれらに気付かないようになっています。テキスト転送フォーマット(XML/JSON)を使用しているか、翻訳を処理するデータレイヤーの抽象化を使用しています(翻訳があることに気づくことすらありません)。
しかし、バイナリデータレイヤーでコーディングしているときに気づきますが、それはveryが重要です。たとえば、VERITAS(現在はシマンテック)で働いていたとき、25の異なるハードウェアプラットフォーム(ビッグ/リトルエンディアンだけでなく、他のタイプもある)上に構築されるソフトウェアを構築していました。
いいえ、誰も勝っていません。私たちは種として、私たちがバイトを保存する順序を、書いた方向とドライブする通りの側とともに標準化することに失敗しました。
結果として、ネットワーク経由またはファイル内の2つの異なるシステム間でデータを転送する場合、データダンプコードの適切な初期バージョンが環境内で正しく機能する可能性は約50%です。 、顧客のもとで働く可能性は50%です。
これに対処するには、ヘッダー内の「htonl」のような名前のプラットフォーム固有の関数を「arpa/inet.h」のような70年代にさかのぼる名前で明らかにする必要があります。 。
まだ合意はありません:
したがって、ハードウェアレベルでは、LEがはるかに一般的です。だが:
どちらの注文も当面の間私たちと一緒になります。