Trình biên dịch C4wa đối mặt với sự cạnh tranh từ Clang và Zig trong việc tạo ra WebAssembly tối giản

Nhóm Cộng đồng BigGo
Trình biên dịch C4wa đối mặt với sự cạnh tranh từ Clang và Zig trong việc tạo ra WebAssembly tối giản

Dự án trình biên dịch c4wa , nhằm tạo ra đầu ra WebAssembly tối giản từ mã C , đã khơi dậy các cuộc thảo luận về những cách tiếp cận tốt nhất để tạo ra các tệp WASM nhỏ gọn. Trong khi c4wa hứa hẹn các tệp nhị phân nhỏ mà không cần phụ thuộc runtime, các nhà phát triển đang đặt câu hỏi liệu các công cụ hiện có có thể đã giải quyết những vấn đề tương tự một cách hiệu quả hơn hay không.

Các tính năng chính của C4wa:

  • Tạo ra đầu ra WebAssembly tối giản (ví dụ: hàm Collatz chỉ 99 byte)
  • Không có thư viện nhúng hoặc phụ thuộc JavaScript
  • Hỗ trợ cả định dạng WASM nhị phân và định dạng văn bản WAT có thể đọc được
  • Yêu cầu Java 11 hoặc cao hơn
  • Cập nhật lần cuối: 29 tháng 1, 2022

Sự phụ thuộc vào Java gây ra lo ngại

Một trong những chỉ trích trực tiếp nhất tập trung vào yêu cầu của c4wa đối với Java 11 hoặc cao hơn. Sự phụ thuộc này có vẻ trái ngược với trực giác đối với một công cụ biên dịch một tập con của C thành WebAssembly . Các nhà phát triển không bỏ qua sự mỉa mai khi chỉ ra rằng lý tưởng nhất, một trình biên dịch như vậy có thể được viết bằng chính tập con C mà nó hỗ trợ, cho phép nó tự biên dịch thành WebAssembly .

Clang đã tạo ra các tệp nhị phân WebAssembly nhỏ

Cuộc thảo luận cho thấy rằng Clang hiện đại có thể tạo ra đầu ra WebAssembly cực kỳ nhỏ gọn bằng cách sử dụng tùy chọn --target=wasm32. Một nhà phát triển đã chia sẻ câu chuyện thành công của họ khi tạo ra một trình giả lập x86 16-bit hoàn chỉnh với giả lập BIOS và DOS trong vòng chưa đến 100KB WebAssembly . Thành tựu này chứng minh rằng các toolchain hiện có đã có thể tạo ra các tệp nhị phân tối giản mà c4wa hứa hẹn.

Hiểu biết quan trọng từ cộng đồng là các cờ tối ưu hóa có ý nghĩa quan trọng. Khi so sánh c4wa với Emscripten , có vẻ như việc so sánh có thể không công bằng vì Emscripten không được chạy với tối ưu hóa được bật. Với các cờ -O phù hợp, các trình biên dịch đã được thiết lập có thể tạo ra chất lượng mã tương tự như những gì c4wa tạo ra.

Clang là một front-end trình biên dịch cho C , C++ và các ngôn ngữ khác thuộc dự án LLVM .

Các công cụ thay thế xuất hiện

Ngoài các trình biên dịch C truyền thống, các nhà phát triển đang khám phá các ngôn ngữ khác biên dịch thành WebAssembly độc lập. Zig đã thu hút sự chú ý vì khả năng tạo ra các module WASM độc lập mà không yêu cầu môi trường runtime phức tạp. Cách tiếp cận này thu hút các nhà phát triển xây dựng runtime WebAssembly tùy chỉnh không muốn triển khai toàn bộ bề mặt API WASI hoặc Emscripten .

Cuộc thảo luận cộng đồng cũng làm nổi bật các triển khai thư viện C tối giản, với một số nhà phát triển tạo ra các lựa chọn thay thế nhẹ của riêng họ chỉ thêm vài trăm dòng mã trong khi cung cấp chức năng thiết yếu.

WASI ( WebAssembly System Interface ) là một tiêu chuẩn định nghĩa cách các chương trình WebAssembly tương tác với hệ thống máy chủ.

Các Trình Biên Dịch WebAssembly Thay Thế:

  • Clang: Sử dụng cờ --target=wasm32, có thể tạo ra các tệp nhị phân dưới 100KB
  • Zig: Hỗ trợ biên dịch WebAssembly độc lập
  • Emscripten: Đầy đủ tính năng nhưng yêu cầu các cờ tối ưu hóa để có đầu ra tối thiểu
  • Custom minimal libc: Một số nhà phát triển tạo ra các triển khai chỉ 200 dòng

Mối quan ngại về tình trạng dự án

Một mối quan ngại đáng chú ý được nêu ra trong cuộc thảo luận là commit cuối cùng của c4wa vào ngày 29 tháng 1 năm 2022, cho thấy dự án có thể không còn hoạt động. Thời điểm này đặt ra câu hỏi về tính khả thi lâu dài của việc áp dụng c4wa khi các lựa chọn thay thế được thiết lập và được duy trì tích cực hơn tồn tại.

Cuộc tranh luận cuối cùng phản ánh một câu hỏi rộng hơn trong hệ sinh thái WebAssembly : liệu các công cụ chuyên biệt như c4wa có lấp đầy một khoảng trống thực sự hay không, hoặc liệu các trình biên dịch trưởng thành hiện có với cấu hình phù hợp có thể đạt được những mục tiêu tương tự trong khi cung cấp hỗ trợ và khả năng tương thích lâu dài tốt hơn.

Tham khảo: C compiler for Web Assembly (c4wa)