- Tác giả đã thực hiện một thử thách khó: viết một trình biên dịch C chỉ với 500 dòng mã Python
- Trình biên dịch hoạt động theo kiểu một lượt; khác với trình biên dịch hai lượt thông thường vốn xây dựng cây cú pháp trước rồi chuyển đổi sang mã máy, nó sinh mã ngay trong quá trình phân tích cú pháp
- Trình biên dịch nhắm đến WebAssembly, một lựa chọn xuất phát từ sự tò mò hơn là tính thực dụng. Bài viết nhấn mạnh các thách thức đặc thù của WebAssembly, như không có thanh ghi và sử dụng máy ngăn xếp
- Do giới hạn 500 dòng, trình biên dịch không hỗ trợ một số tính năng của C như struct, enum, union, chỉ thị tiền xử lý, số thực dấu phẩy động và các kiểu 8 byte
- Trình biên dịch vượt qua 34 trong số 220 ca kiểm thử của c-testsuite, và có thể biên dịch cũng như chạy thành công một chương trình tính dãy Fibonacci
- Bài viết cung cấp phần phân tích chi tiết về mã của trình biên dịch, giải thích cách nó xử lý nhiều khía cạnh khác nhau của cú pháp C và những khó khăn khi làm việc với WebAssembly
- Dù trình biên dịch rất phức tạp, bài viết cho thấy rằng nếu chấp nhận hy sinh chất lượng mã và làm mọi thứ trong một lượt duy nhất, kết quả có thể ngắn gọn đến đáng ngạc nhiên
- Tác giả gợi ý rằng kiểu trình biên dịch một lượt như vậy có thể rất phù hợp làm stage0 cho một ngôn ngữ tự lưu trữ nhờ tính cô đọng của nó
- Số dòng mã được đo bằng công cụ
sloccount, trong đó loại trừ chú thích, docstring và dòng trống
1 bình luận
Ý kiến trên Hacker News
structsơ khai nhất của Ritchie và trình biên dịch C của Unix v7