Design: Data awal dan endiannes

Dibuat pada 3 Sep 2016  ·  6Komentar  ·  Sumber: WebAssembly/design

Spesifikasi tidak mengatakan apa pun tentang urutan byte mana yang digunakan i32.load . Program dunia nyata berisi bagian data untuk menyediakan tabel virtual, data statis, dll. Hal-hal ini biasanya memerlukan tipe nilai yang berbeda. Namun, WebAssembly terbatas pada urutan byte di bagian data nya. Dengan byte, seseorang tidak dapat meniru int32, karena mereka tidak tahu apa-apa tentang endiannes.

Alangkah baiknya jika WebAssebmly memiliki sesuatu yang mirip dengan struktur dan inisialisasi struktur yang mirip dengan LLVM. Ini tidak hanya memecahkan masalah dengan endiannes data statis, tetapi juga memberikan kesempatan untuk mengurangi data biner, karena bilangan bulat di bagian data yang kemungkinan akan mengkonsumsi lebih sedikit byte dalam representasi LEB128, sedangkan mereka selalu mengkonsumsi 4 byte ketika dikodekan di bagian data.

Solusi saat ini adalah:

  • jangan gunakan bagian data, gunakan fungsi penginisialisasi besar sebagai gantinya
  • ciptakan format sendiri, sertakan dekoder ke dalam biner WebAssembly, jalankan dari fungsi start

Komentar yang paling membantu

Ada keuntungan signifikan karena tidak harus berurusan dengan banyak endianness di seluruh ekosistem, dan kemungkinan arsitektur CPU yang setidaknya tidak memiliki dukungan efisien untuk akses little-endian menjadi populer di masa mendatang diyakini sangat rendah.

Semua 6 komentar

WebAssembly adalah little-endian. Tampaknya AstSemantics.md tidak menyebutkan ini; Saya sekarang telah mengajukan https://github.com/WebAssembly/design/pull/787 untuk memperbaikinya.

Disebutkan di sini dan di sini dan diuji di sini .

Ide memiliki data yang dikodekan LEB128 di bagian data menarik. Ada berbagai cara yang dapat dilakukan, baik dengan penginisialisasi data jenis baru, atau dengan kompresi lapisan 1 . Kompresi lapisan 2 dapat membantu dengan segmen data yang besar secara umum juga.

Saya mengerti, terima kasih. Bukankah itu persyaratan yang terlalu kuat? Tidak ada CPU yang saya tahu yang menggunakan big-endian, tetapi jika karena alasan tertentu muncul dan digunakan secara luas, WebAssembly akan mengeksekusi CPU ini dengan beberapa overhead.

Ada keuntungan signifikan karena tidak harus berurusan dengan banyak endianness di seluruh ekosistem, dan kemungkinan arsitektur CPU yang setidaknya tidak memiliki dukungan efisien untuk akses little-endian menjadi populer di masa mendatang diyakini sangat rendah.

Pada Sabtu, 3 Sep 2016 jam 16:07, Alexey Andreev [email protected]
menulis:

Saya mengerti, terima kasih. Bukankah itu persyaratan yang terlalu kuat? Tidak ada CPU I
tahu itu menggunakan big-endian, tetapi jika karena alasan tertentu seseorang muncul dan menjadi
banyak digunakan, WebAssembly akan dijalankan pada CPU ini dengan beberapa overhead.

CPU MIPS dan SPARC adalah big-endian, meskipun SPARC memiliki little-endian
memuat/menyimpan untuk beberapa waktu sekarang, dan MIPS memiliki varian yang sedikit.

Kami telah menerapkan dukungan big-endian di V8 melalui pertukaran endianness eksplisit
kode tetapi belum mengukur biaya overhead dengan hati-hati.


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh
.

Alangkah baiknya jika WebAssebmly memiliki sesuatu yang mirip dengan struktur dan inisialisasi struktur yang mirip dengan LLVM.

Ini sudah bisa dilakukan di WebAssembly dengan cara yang persis sama dengan yang dilakukan di C dan C++: sebelum main() dipanggil, fungsi _start dapat memanggil fungsi .init_array. Saya rasa tidak ada yang bisa dilakukan di sini.

Setuju dengan @sunfishcode / @titzer tentang endianness.

Saya percaya ini diselesaikan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ghost picture ghost  ·  7Komentar

mfateev picture mfateev  ·  5Komentar

cretz picture cretz  ·  5Komentar

badumt55 picture badumt55  ·  8Komentar

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Komentar