Apakah Little Endian menang?

34

Ketika mengajar baru-baru ini tentang pertempuran Big Endian dan Little Endian, seorang siswa bertanya apakah itu telah diselesaikan, dan saya menyadari saya tidak tahu. Melihat artikel Wikipedia , tampaknya pasangan OS / arsitektur yang paling populer saat ini menggunakan Little Endian tetapi Internet Protocol menentukan Big Endian untuk mentransfer nilai numerik dalam header paket. Apakah itu ringkasan yang bagus dari status saat ini? Apakah kartu jaringan atau CPU saat ini menyediakan dukungan perangkat keras untuk beralih urutan byte?

Ellen Spertus
sumber

Jawaban:

25

Saya berpendapat bahwa itu tidak begitu banyak dimenangkan sebagai tidak lagi menjadi masalah. ARM yang pada dasarnya membentuk semua pasar ponsel adalah bi-endian (oh, bid'ah!). Dalam arti bahwa x86 pada dasarnya "memenangkan" pasar desktop, saya kira Anda bisa mengatakan bahwa sedikit endian menang, tetapi saya pikir mengingat keseluruhan kedalaman kode (dangkal) dan abstraksi (banyak) dari banyak aplikasi saat ini, itu jauh lebih sedikit masalah daripada dulu. Saya tidak ingat endianness benar-benar muncul di kelas Arsitektur Komputer saya.

Saya menduga bahwa banyak pengembang bahkan tidak menyadari endianness atau mengapa itu penting. Karena bagi sebagian besar (dan maksud saya luas ) mayoritas itu sama sekali tidak relevan dengan lingkungan kerja sehari-hari mereka. Ini berbeda 30 tahun yang lalu ketika semua orang mengkodekan lebih dekat ke logam sebagai lawan memanipulasi file teks pada layar dengan cara yang mewah dan dramatis.

Kecurigaan umum saya adalah bahwa Pemrograman Berorientasi Objek adalah awal dari akhir kepedulian terhadap endianness karena lapisan akses dan abstraksi dalam sistem OO yang baik menyembunyikan detail implementasi dari pengguna. Karena implementasi termasuk endianness, orang terbiasa tidak menjadi faktor eksplisit.

Tambahan: zxcdw menyebutkan portabilitas menjadi perhatian. Namun, apa yang muncul dengan pembalasan dalam 20 tahun terakhir? Bahasa Pemrograman yang dibangun pada mesin virtual. Tentu endianness mesin virtual mungkin penting tetapi dapat dibuat sangat konsisten untuk satu bahasa ke titik di mana pada dasarnya itu bukan masalah. Hanya para pelaksana VM yang bahkan harus khawatir tentang endianness dari sudut pandang portabilitas.

Insinyur Dunia
sumber
2
Masih ada banyak domain yang sangat relevan di mana itu penting, misalnya saat menulis segala bentuk kode portabel. Infact, di mana itu mungkin tidak masalah adalah ketika menulis kode non portable yang terikat pada platform.
zxcdw
@zxcdw yang mengarahkan kita langsung ke pasukan bahasa mesin virtual di luar sana ... Aku tidak memikirkan itu.
Insinyur Dunia
Adendum Anda tidak sepenuhnya benar (dan saya juga tidak setuju dengan @zxcdw): endianness hanya penting ketika menerjemahkan antara integer multibyte dan stream byte, dan menjadi masalah ketika dilakukan secara implisit dan bervariasi antar platform. Sebagian besar bahasa modern (apakah berbasis VM atau tidak) mencapai portabilitas dengan meminta Anda melakukannya dengan jarang (dengan bilangan bulat sebagai tipe data buram), dan kemudian memiliki endianness baik yang ditentukan oleh platform yang independen, atau dipilih secara eksplisit oleh programmer.
Michael Borgwardt
2
@MichaelBorgwardt ARM melakukan arium.com/pdf/Endianness.pdf
World Engineer
2
@zxcdw - bahkan di assembler, Anda tidak selalu perlu tahu urutan endian. Konstanta, misalnya, tidak perlu ditentukan byte pada suatu waktu. Situasinya agak mirip dengan gaya serialisasi tertentu dalam C - x & 0xFFselalu memberi Anda byte paling signifikan terlepas dari pemesanan endian (dengan asumsi byte Anda masing-masing 8 bit) karena Anda telah menentukan bit yang Anda minati dengan nilainya, bukan posisi relatif mereka dalam memori.
Steve314
4

Endian hanya benar-benar penting ketika Anda mentransfer sistem data biner.

Dengan kemajuan kecepatan prosesor (dan biaya penyimpanan yang jauh lebih rendah) antarmuka data biner menjadi lebih langka sehingga Anda tidak melihatnya di lapisan aplikasi. Anda baik menggunakan format transfer tekstual (XML / JSON) atau Anda menggunakan abstraksi lapisan data yang menangani terjemahan untuk Anda (sehingga Anda bahkan tidak melihat ada terjemahan).

Tetapi ketika Anda coding pada lapisan data biner Anda perhatikan dan itu sangat penting. Misalnya Ketika saya bekerja di VERITAS (Symantec sekarang) saya sedang membangun perangkat lunak yang sedang dibangun pada 25 platform perangkat keras yang berbeda (tidak hanya big / little endian ada jenis lain).

Martin York
sumber
Murid-murid saya juga telah mengembangkan ponsel dan menggunakan cloud computing, sehingga mereka tahu dunia bukan PC dan Mac.
Ellen Spertus
@Loki - dimungkinkan untuk membuat cerita bersambung dan menghapus cerita bersambung tanpa mengetahui endian mesin. Anda hanya benar-benar perlu mengetahui byte-pemesanan data dalam file / stream / apa pun. Sebagai contoh, (char) (x & 0xFF)dalam C memberikan Anda byte paling signifikan terlepas dari masalah endian, dengan asumsi hanya bahwa byte adalah 8 bit. Saya telah merancang format file biner tanpa mengetahui mesin yang akan dijalankan oleh perangkat lunak - Saya pada dasarnya memilih pemesanan endian untuk format file tanpa peduli dengan perangkat kerasnya.
Steve314
@ Espertus: Tentu mungkin.
Martin York
1
@ Steve314: Ya tentu saja bisa. Ketika Anda sedang bekerja pada "Binary Data Layer" Anda dapat merancang skema apa pun yang Anda inginkan untuk membuat serial data Anda dan tidak sulit untuk merancang skema yang mudah dibawa. Meskipun secara pribadi saya tidak akan repot-repot untuk menemukan kembali roda yang telah dibangun dan diuji dengan baik sejak 60-an. Cari ` h2nl dan keluarga. keluarga fungsi ini menyediakan cara portabel (standar) untuk melakukan hal-hal yang optimal untuk platform Anda.
Martin York
4

Tidak, tidak ada yang menang. Kita sebagai spesies kita gagal untuk menstandarkan urutan di mana kita menyimpan byte kita, bersama dengan arah yang kita tulis dan sisi jalan yang kita lewati.

Sebagai akibatnya, siapa pun yang ingin mentransfer data antara dua sistem yang berbeda melalui jaringan atau dalam file, hanya memiliki peluang sekitar 50% dari versi awal yang wajar dari kode dumping data mereka yang benar di lingkungan mereka, dan bahkan jika itu berfungsi , memiliki peluang 50% untuk bekerja di pelanggan mereka.

Untuk mengatasinya, Anda perlu mencari fungsi-fungsi spesifik platform dengan nama-nama seperti "htonl" di header dengan nama-nama yang jelas berasal dari tahun 70-an seperti "arpa / inet.h", karena situasinya belum membaik sejak saat itu dan mungkin tidak akan pernah .

Andrew Wagner
sumber
10
ternyata kami telah standarised - alih-alih mengirim 4 byte untuk mewakili integer, kami mengirim blok teks yang diformat dengan teks header khusus, kurung sudut, kata kunci dan representasi ASCII dari 4 byte tersebut. Ujung penerima kemudian mem-parsing pemformatan untuk mendapatkan teks integer dan mengubahnya kembali menjadi 4 byte. Ini disebut kemajuan, saya diberitahu :-)
gbjbaanb
$ aptitude search xml | wc -l 677
Andrew Wagner
1

Masih belum ada konsensus:

  • Mayoritas sistem komputer yang lebih besar (server / desktop / laptop) saat ini menggunakan arsitektur little-endian
  • Sebagian besar komputer yang lebih kecil (tablet / ponsel) menggunakan arsitektur prosesor independen endianness, tetapi menjalankan sistem operasi yang menggunakan urutan little-endian

Jadi pada level perangkat keras, LE jauh lebih umum. Tapi:

  • Sebagian besar komunikasi antar komputer dilakukan dengan menggunakan protokol yang menentukan urutan big-endian
  • Sebagian besar perangkat lunak dunia berjalan pada platform virtual yang default ke pesanan big-endian setiap kali data ditulis ke penyimpanan eksternal.

Kedua pesanan akan bersama kami untuk masa mendatang.

Jules
sumber
Mayoritas sistem terbesar (yaitu, "besi besar") biasanya big-endian. Yaitu, yang disebut sistem mini atau mainframe (yang merupakan bagian besar dari pemrosesan backend yang sebagian besar dari kita tidak pedulikan.)
@ jdv Tetapi kebanyakan sistem komputasi terbesar adalah mesin endian x86-64 kecil, dan di sana, masalah kinerja.
user877329
Saya tidak berpikir siapa pun dapat membuat pernyataan kuat bahwa endianness adalah sesuatu yang lebih dari kenyamanan para desainer arsitektur (untuk apa pun yang mereka ingin capai). Pada saat saya membuat komentar kuno itu, besi besar adalah BE. Tetapi ini bukan karena BE, tetapi karena arsitekturnya seperti itu.