Pengkompil C4wa Menghadapi Persaingan daripada Clang dan Zig untuk Output WebAssembly Minimal

Pasukan Komuniti BigGo
Pengkompil C4wa Menghadapi Persaingan daripada Clang dan Zig untuk Output WebAssembly Minimal

Projek pengkompil c4wa , yang bertujuan untuk mencipta output WebAssembly minimal daripada kod C , telah mencetuskan perbincangan mengenai pendekatan terbaik untuk menghasilkan fail WASM yang padat. Walaupun c4wa menjanjikan binari kecil tanpa pergantungan masa jalan, pembangun mempersoalkan sama ada alat sedia ada mungkin sudah menyelesaikan masalah yang sama dengan lebih berkesan.

Ciri-ciri Utama C4wa :

  • Menghasilkan output WebAssembly yang minimalistik (contoh: fungsi Collatz sebesar 99-bait)
  • Tiada perpustakaan terbenam atau kebergantungan JavaScript
  • Menyokong kedua-dua format binari WASM dan format teks WAT yang boleh dibaca
  • Memerlukan Java 11 atau lebih tinggi
  • Kemas kini terakhir: 29 Januari 2022

Pergantungan Java Menimbulkan Keraguan

Salah satu kritikan yang paling segera tertumpu kepada keperluan c4wa untuk Java 11 atau yang lebih tinggi. Pergantungan ini kelihatan berlawanan dengan intuisi untuk alat yang mengkompil subset C kepada WebAssembly . Ironinya tidak hilang pada pembangun yang menunjukkan bahawa idealnya, pengkompil sedemikian boleh ditulis dalam subset C yang disokongnya, membolehkannya mengkompil dirinya sendiri kepada WebAssembly .

Clang Sudah Menghasilkan Binari WebAssembly Kecil

Perbincangan mendedahkan bahawa Clang moden boleh menghasilkan output WebAssembly yang sangat padat menggunakan pilihan --target=wasm32. Seorang pembangun berkongsi kisah kejayaan mereka mencipta emulator x86 16-bit lengkap dengan emulasi BIOS dan DOS dalam kurang daripada 100KB WebAssembly . Pencapaian ini menunjukkan bahawa rantaian alat sedia ada sudah boleh menghasilkan binari minimal yang dijanjikan oleh c4wa .

Wawasan utama daripada komuniti ialah bendera pengoptimuman sangat penting. Apabila membandingkan c4wa dengan Emscripten , nampaknya perbandingan mungkin tidak adil kerana Emscripten tidak dijalankan dengan pengoptimuman diaktifkan. Dengan bendera -O yang betul, pengkompil yang mantap boleh menghasilkan kualiti kod yang serupa dengan apa yang dihasilkan oleh c4wa .

Clang ialah bahagian hadapan pengkompil untuk C , C++ , dan bahasa lain yang merupakan sebahagian daripada projek LLVM .

Alat Alternatif Muncul

Selain pengkompil C tradisional, pembangun sedang meneroka bahasa lain yang mengkompil kepada WebAssembly yang berdiri sendiri. Zig telah mendapat perhatian kerana keupayaannya untuk menghasilkan modul WASM berdiri bebas tanpa memerlukan persekitaran masa jalan yang kompleks. Pendekatan ini menarik minat pembangun yang membina masa jalan WebAssembly tersuai yang tidak mahu melaksanakan keseluruhan permukaan API WASI atau Emscripten .

Perbincangan komuniti juga menyerlahkan pelaksanaan perpustakaan C minimal, dengan beberapa pembangun mencipta alternatif ringan mereka sendiri yang menambah hanya beberapa ratus baris kod sambil menyediakan fungsi penting.

WASI ( WebAssembly System Interface ) ialah standard yang mentakrifkan bagaimana program WebAssembly berinteraksi dengan sistem hos.

Pengkompil WebAssembly Alternatif:

  • Clang: Menggunakan flag --target=wasm32, boleh menghasilkan binari di bawah 100KB
  • Zig: Menyokong kompilasi WebAssembly freestanding
  • Emscripten: Berfitur lengkap tetapi memerlukan flag pengoptimuman untuk output minimal
  • Custom minimal libc: Sesetengah pembangun mencipta implementasi 200-baris

Kebimbangan Status Projek

Kebimbangan ketara yang dibangkitkan dalam perbincangan ialah komit terakhir c4wa adalah pada 29 Januari 2022, menunjukkan projek mungkin tidak aktif. Masa ini menimbulkan persoalan mengenai daya maju jangka panjang untuk menggunakan c4wa apabila alternatif yang lebih mantap dan diselenggara secara aktif wujud.

Perdebatan akhirnya mencerminkan persoalan yang lebih luas dalam ekosistem WebAssembly : sama ada alat khusus seperti c4wa mengisi jurang yang tulen, atau jika pengkompil matang sedia ada dengan konfigurasi yang betul boleh mencapai matlamat yang sama sambil menawarkan sokongan jangka panjang dan keserasian yang lebih baik.

Rujukan: C compiler for Web Assembly (c4wa)