- Write Your Own Retro Compiler là cuốn sách dày 339 trang trình bày về một trình biên dịch tự lưu trữ chạy trên CP/M dựa trên Z80 và sinh mã cho chính môi trường đó, kèm toàn bộ mã nguồn
- T3X/0, đối tượng được hiện thực, là một ngôn ngữ đơn giản bắt nguồn từ Pascal và BCPL, và sách có kèm bản hướng dẫn đầy đủ dài 20 trang
- Cần có kiến thức về ngôn ngữ thủ tục như C hoặc Pascal và hợp ngữ; nếu biết thêm hợp ngữ Z80 và kiến thức cơ bản về CP/M thì sẽ dễ theo dõi hơn
- Phân tích từ vựng, phân tích cú pháp, sinh mã, tối ưu hóa đơn giản, giao diện BDOS và thư viện thời gian chạy được giải thích bằng sơ đồ, bảng và ví dụ
- Toàn bộ mã được phát hành dưới dạng phạm vi công cộng, đồng thời công khai liên kết mua sách giấy, PDF, mục lục, trang mẫu và tải mã nguồn
Phạm vi và đối tượng của sách
- Write Your Own Retro Compiler là cuốn sách 339 trang, 91 hình minh họa, khổ 6" x 9", do Lulu Press xuất bản năm 2023
- Chủ đề trung tâm là một trình biên dịch tự lưu trữ chạy trên CP/M của bộ xử lý Z80 và sinh mã nhắm tới chính môi trường đó
- Nội dung được tổ chức để ngay cả người chưa có kinh nghiệm làm trình biên dịch cũng có thể theo dõi
- T3X/0, ngôn ngữ hiện thực, là một ngôn ngữ đơn giản bắt nguồn từ Pascal và BCPL
- Sách bao gồm bản hướng dẫn đầy đủ dài 20 trang về T3X/0
Kiến thức cần có
- Cần biết ít nhất một ngôn ngữ lập trình thủ tục
- Ví dụ được nêu là C và Pascal
- Cũng cần biết ít nhất một ngôn ngữ hợp ngữ, và lý tưởng nhất là có kiến thức hợp ngữ cho CPU Z80
- Cũng cần có kiến thức cơ bản về hệ điều hành CP/M
- Sách có kèm phần giới thiệu ngắn về hợp ngữ Z80 dành cho độc giả tự học
Các thành phần của trình biên dịch
- Giải thích hoạt động bên trong của trình biên dịch bằng nhiều sơ đồ, bảng và ví dụ
- Các chủ đề được đề cập gồm:
- Phân tích từ vựng
- Phân tích cú pháp
- Sinh mã
- Tối ưu hóa đơn giản
-
Giao diện BDOS
- Thư viện thời gian chạy
Liên kết và mã được cung cấp
- Toàn bộ mã trong sách thuộc phạm vi công cộng
- Đặt mua sách giấy
- Đặt mua bản PDF
- PDF mục lục
- PDF trang mẫu
- Tải mã nguồn
- Trang mã
1 bình luận
Ý kiến trên Hacker News
Vừa xuất bản một cuốn sách mới về trình biên dịch. Nó gần như là bản mở rộng của “Write Your Own Compiler”, nhưng lần này xử lý sinh mã CP/M cho Z80 thay vì ELF của hệ thống hiện đại nên nhiều phần đơn giản hơn hẳn
Có thể thấy cần mức độ phức tạp đến đâu để làm ra một trình biên dịch có thể tự biên dịch chính nó trong chưa đến 10 phút trên hệ Z80 4MHz. Mã nguồn miễn phí nhưng sách thì có phí
Nhân tiện, tôi cũng muốn xem một cuốn sách gọn gàng, không rườm rà về Forth cùng cách diễn giải kiểu Nils
Gần đây tôi đã làm một trình biên dịch C đa lượt và assembler cho các CPU x86 đời cũ bằng TypeScript
https://github.com/Mati365/ts-c-compiler
Tôi có bản in Practical Compiler Construction bản 2 và khá thích nó. Với ai quan tâm thì tôi khuyên đọc các cuốn sách của Nils
Cuốn sách này có vẻ thú vị. Tuy vậy tôi vẫn đang chờ một hậu duệ xứng đáng của The Dragon Book
Sẽ hay nếu có một cuốn nói về CPU hiện đại và nếu được thì cả tối ưu hóa GPU, đồng thời hướng dẫn cách thiết kế và viết một máy ảo hiện đại có bộ gom rác đồng thời tốc độ cao. Ở một số khía cạnh, chuyện này có khi còn khó hơn viết trình biên dịch
Nó đề cập đến xây dựng đồ thị luồng điều khiển, nhiều kiểu tối ưu hóa có thể làm trên đó, phân tích bí danh, static single assignment, tối ưu hóa dựa trên dominator của CFG, lập lịch lệnh, phân bổ thanh ghi và sinh mã đích. Giống phần lớn sách về trình biên dịch, nó không nói về phân tích từ vựng, phân tích cú pháp hay NFA/DFA
Nếu muốn làm một trình biên dịch tối ưu hóa cần phân tích nâng cao thì Static Program Analysis cũng có thể hữu ích: https://cs.au.dk/~amoeller/spa/
Về gom rác thì có Garbage Collection handbook: https://gchandbook.org/
Nếu đã có chút kiến thức nền thì có thể bạn sẽ thích khóa học này: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
Tôi đặc biệt thích cách nó giới thiệu dạng SSA
Các chủ đề nâng cao hơn có ở đây: https://www.cs.cmu.edu/~15745/handouts.html
Khi một thứ gì đó cho cảm giác như “phép thuật”, tôi xem đó là dấu hiệu cho thấy có ai đó đã khéo léo vượt qua điều từng bị cho là giới hạn. Gần đây tôi đang đọc về âm trầm giả, kiểu như một chiếc loa nhỏ dường như phát ra dải trầm lớn hơn khả năng thực tế của nó; cách dùng họa âm để đánh lừa não bộ nghe như thể âm thấp hơn thực tế thật sự rất thú vị
Trông có vẻ hấp dẫn, nhưng có nhược điểm là người đọc phải biết hoặc học trước T3X, một ngôn ngữ lập trình mới
Tôi cũng tò mò không biết có thể viết và phát triển một trình biên dịch từ đầu trên một hệ CP/M retro chỉ có bàn phím và màn hình để giao tiếp với bên ngoài hay không
SubC dài 3815 dòng còn T3X/0 là 2330 dòng
Tất nhiên cũng có thể bắt đầu trên CP/M mà không cần công cụ bên ngoài, nhưng khi đó phải viết trình biên dịch bootstrap bằng assembly. Việc này tốn nhiều thời gian nhưng hoàn toàn khả thi. Chỉ là tôi không chắc nó có thú vị để đọc hay không
Việc dùng cú pháp kiểu ALGOL thay vì cú pháp kiểu C thì hơi bất ngờ một chút, nhưng có thể đó là thiên kiến của tôi. Việc ánh xạ
DOvàENDsang{và}trong đầu không phải gánh nặng gì lớnMột tutorial về trình biên dịch mà đi xa hơn cả bước phân tích từ vựng và phân tích cú pháp, chắc gần như là đầu tiên tôi thấy
Nói đùa vậy thôi nhưng thực sự rất nhiều tài liệu dừng ở đó. Tôi đang tính mua cuốn này
Sẽ thú vị nếu cũng có một cuốn sách về cách viết một hệ điều hành kiểu giống CP/M của riêng mình
Dĩ nhiên nó chỉ cách làm một hệ điều hành microkernel kiểu Unix, nhưng bạn chỉ cần bỏ qua toàn bộ trừ chương hệ thống tệp. Và đừng làm theo lời khuyên về cấu trúc dữ liệu cây, cứ dùng bảng phẳng thôi, cũng đừng quá bận tâm chuyện cài đặt kích thước tệp chính xác. Là sẽ ra CP/M
Cá nhân tôi thích bản 2 hơn. Tôi thấy bản 3 bị phức tạp hóa không cần thiết chỉ để đoạn mã Minix minh họa chạy được trên PC cuối thập niên 1990 thay vì PC thập niên 1980
Tôi không nói theo hướng tiêu cực đâu, chỉ là một nhận xét có thể hữu ích
Tôi đã đọc chương miễn phí và cảm giác là một số phần có thể hơi khó với người chưa có nhiều kiến thức về chủ đề này. Dưới mỗi tiêu đề thì sách bắt đầu giải thích khái niệm từ đầu kiểu như “ngữ pháp của ngôn ngữ là...”, nhưng chỉ vài câu sau đã xuất hiện những chủ đề nâng cao như lệnh assembly mà không có giải thích
Nếu người đọc đang ở mức cần học cả ý nghĩa của ngữ pháp thì có thể sẽ khó hiểu những câu ngay sau đó. Vì vậy nếu tăng độ nhất quán hơn một chút thì cuốn sách có lẽ sẽ hoàn thiện hơn
Vì thế tôi thấy có thể giả định người đọc đã biết những thứ như lệnh assembly
Phụ lục của sách cũng có một phần nhập môn ngắn về assembly Z80, nhưng phần đó cũng giả định là bạn đã biết những điều cơ bản của assembly
Mọi cuốn sách đều phải bắt đầu từ đâu đó. Rất khó để viết một cuốn sách về xây dựng trình biên dịch mà lại giả định người đọc hoàn toàn không có kiến thức lập trình máy tính. Dù vậy, điều đó không có nghĩa là tôi không thể mắc “lời nguyền của tri thức”, nên tôi chắc chắn sẽ lưu ý điểm này
Ngoài nội dung cuốn sách, tôi cũng thích phần thiết kế web retro và tối giản rất đúng chất
Nó gợi cảm giác hoài niệm mạnh mẽ. Tôi nhớ lại những ngày vui khi tự làm website, trên bàn là một cuốn dày cộp 6 inch với kiểu tiêu đề như “HTML 3.2 UNLEASHED!!!!”
Chỉ có điều khi phải áp dụng một thay đổi toàn cục cho khoảng 1500 trang tĩnh thì niềm vui chấm dứt. Nỗi đau đó vẫn chưa đủ lớn để tôi tự làm CMS, nhưng kể cả có làm thì tôi vẫn sẽ giữ nguyên thiết kế
https://web.archive.org/web/20231210141834/http://t3x.org/t3...