2 điểm bởi lifthrasiir 20 ngày trước | 2 bình luận | Chia sẻ qua WhatsApp

Lâu rồi tôi mới lại thử làm một thư viện C. Đúng như tên gọi, đây là một trình thông dịch WebAssembly mà mọi thứ đều nằm gọn trong một tệp header C duy nhất. Tất nhiên không phải chỉ có trơ trọi mỗi trình thông dịch, mà còn có:

  • Hỗ trợ 100% đặc tả WebAssembly 3.0. Cả GC và những thứ tương tự đều có đủ.
  • WebAssembly có một tùy chọn gọi là deterministic profile, giúp cho kết quả giống hệt nhau trong bất kỳ môi trường nào, và thư viện này triển khai tùy chọn đó. Vì vậy nó hữu ích để tạo ra kết quả có thể tái lập.
  • Có áp dụng tối ưu hóa theo kiến trúc cho x86-64 và AArch64 NEON.
  • Có các tính năng cần thiết để sandbox mã không đáng tin cậy. Có hỗ trợ fuel metering, tức là chạy bằng cách “đốt” fuel theo số lệnh được thực thi rồi dừng khi fuel cạn, hoặc đặt ngắt sau một khoảng thời gian chạy nhất định, hay kiểm soát mức sử dụng bộ nhớ.
  • API được thiết kế để dù có dừng giữa chừng trong lúc chạy thì vẫn có thể tiếp tục thực thi lại.
  • Có thể tạo module WebAssembly hoàn toàn bằng mã, hoặc liên kết nhiều module vào một module.
  • Có thể giới hạn tính năng cả ở thời điểm biên dịch (giảm lượng mã được biên dịch) lẫn ở thời điểm chạy.
  • Ngay từ đầu đã được thiết kế với mục tiêu cố định ABI. Có thể cấp phát cấu trúc dữ liệu trên C stack, nhưng layout đã được cố định sẵn nên dù phiên bản tăng lên thì ABI vẫn không bị phá vỡ.
  • Ngoài ra còn có lượng kiểm thử nhiều đến mức gần như quá tay, và fuzz testing cũng được thực hiện rất tích cực. (Thực ra fuzzer đến giờ vẫn đang chạy...)

Ban đầu nó vốn được định làm một phần của dự án khác nên tôi không hề nghĩ sẽ làm kỹ đến mức này, nhưng để chạy các bài test của bản triển khai tham chiếu WebAssembly (gọi là spectest) thì rốt cuộc phải triển khai hết tất cả... Và rồi chẳng hiểu sao lại thành ra triển khai 100%. Sao mọi chuyện lại thành thế này nhỉ.

Theo đúng xu hướng dạo này, phần mã ban đầu được viết bằng Gemini CLI, từ giữa chặng đường trở đi là Claude Code và thỉnh thoảng có Codex, còn phần lập kế hoạch thì chủ yếu tận dụng Codex. Với cá nhân tôi, đây cũng là một dự án chứng minh rằng các coding agent, nếu được điều phối tốt, vẫn có thể làm khá tốt cả những công việc lập trình hệ thống hardcore. Tôi cũng có phần muốn biến nó thành một ví dụ phản biện cho nhận xét rằng vibe coding tuy có thể cho ra thứ nhìn khá ổn, nhưng chi tiết bên trong thì lại rất lộn xộn.

2 bình luận

 

Có vẻ như khi đặc tả để kiểm thử đủ rõ ràng thì cách dùng coding agent để dựng workflow và hội tụ dần hoạt động khá hiệu quả. Tôi cũng nhớ đến các trường hợp như vinext, pretext.

Nói chuyện khác một chút, anh/chị có thể kiểm tra lại việc phục vụ CSS của journal được không...? Dù đã khá lâu rồi nhưng vẫn có nhiều bài viết hay tôi muốn giới thiệu cho mọi người xung quanh, nhưng khi truy cập bằng máy tính để bàn thì CSS không được tải T_T

 
lifthrasiir 20 ngày trước

Máy chủ đang phục vụ CSS đã chết rồi T_T Xin lỗi, nhưng trong thời gian tới mong mọi người hãy dùng Wayback Machine...