Giáo trình nhập môn về trình biên dịch và thiết kế ngôn ngữ (2021)
(dthain.github.io)- Đây là giáo trình trực tuyến miễn phí được phát triển cho môn học trình biên dịch CSE 40243 của Notre Dame, có thể tải ngay toàn bộ PDF hoặc PDF theo từng chương để học
- Nội dung tương đương một học kỳ, đi theo quy trình xây dựng trình biên dịch, trình bày quá trình dịch chương trình ngôn ngữ bậc cao sang chương trình ngôn ngữ bậc thấp
- Người học hướng tới việc hiện thực một trình biên dịch đơn giản nhận đầu vào là ngôn ngữ tương tự C và chuyển đổi sang hợp ngữ X86 hoặc ARM
- Phù hợp nhất với trình độ sinh viên đại học đã có kinh nghiệm lập trình C và đã học cấu trúc dữ liệu cùng kiến trúc máy tính
- PDF có thể dùng cho mục đích cá nhân và học thuật, nhưng cấm in ấn hoặc phân phối thương mại; tài liệu mới nhất cần được kiểm tra tại compilerbook.org
Giáo trình dựa trên môn học trình biên dịch của Notre Dame
- Introduction to Compilers and Language Design là giáo trình trực tuyến miễn phí do Douglas Thain phát triển cho môn học trình biên dịch CSE 40243 của University of Notre Dame
- Ấn bản thứ 2 là bản năm 2020, ngày chỉnh sửa được ghi là 15 tháng 1 năm 2021
- Độc giả muốn có sách bản in có thể mua bản bìa cứng hoặc bìa mềm
- Giáo trình tiếp cận cả khía cạnh lý thuyết lẫn thực tiễn của khoa học máy tính thông qua quá trình xây dựng trình biên dịch từ đầu
- Mục tiêu học tập cuối cùng là hiện thực một trình biên dịch đơn giản nhận đầu vào là ngôn ngữ tương tự C và dịch sang hợp ngữ X86 hoặc ARM
PDF, mã ví dụ và điều kiện sử dụng
- Có cung cấp PDF toàn bộ giáo trình và PDF theo từng chương
- Phần phụ lục bao gồm Sample Course Project, The B-Minor Language, Coding Conventions
- Kho GitHub compilerbook-examples có các tài liệu thực hành tương ứng với sách
- Nhiều scanner và parser
- Cấu trúc mã khởi đầu cho trình biên dịch của dự án
- Các bộ ca kiểm thử mẫu cho từng giai đoạn: scanner, parser, type checker và code generator
- PDF có thể được tải xuống, in và sử dụng cho mục đích cá nhân và học thuật
- Cấm in ấn hoặc phân phối thương mại; thay vì sao chép PDF về máy để phân phối, nên hướng dẫn sinh viên tới trang compilerbook.org
- Có thể gửi email các lỗi chính tả hoặc lỗi nội dung tới
dthain@nd.eduvới tiêu đềCompiler Book Errata
1 bình luận
Ý kiến trên Hacker News
Tôi đã học lớp trình biên dịch của Dr. Thain ở đại học và thật sự là tuyệt vời
Thầy là một giảng viên xuất sắc, và nhờ dự án của môn học mà tôi đã có thể tự tay xây dựng một trình biên dịch kiểu C theo từng bước. Dự án ví dụ ở đây trông cũng gần giống với dự án chúng tôi đã làm khi đó, và tôi rất khuyến nghị nên theo đến cùng
Tôi chưa biết nó được dạy trong khóa nào, nhưng C4(https://news.ycombinator.com/item?id=8558822) và C4x86(https://news.ycombinator.com/item?id=8746054) có vẻ là chủ đề học tập tốt cho một học kỳ
Đây là trình biên dịch tự biên dịch cho một tập con rất nhỏ của C, nên có vẻ cũng phù hợp làm nền tảng cho các bài tập bổ sung mở rộng tính năng
Bài liên quan: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - tháng 5/2022, 68 bình luận
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - tháng 4/2019, 1 bình luận
Có cảm giác chỉ quanh quẩn trong phạm vi hẹp xoay quanh C và các quy ước kỳ lạ của nó
Phần mô tả sách cũng nói đây là “giáo trình nhập môn kéo dài một học kỳ, giúp độc giả có thể xây dựng một trình biên dịch đơn giản chấp nhận ngôn ngữ giống C”
Theo lời tựa thì Dragon Book là ở trình độ cao học nâng cao à?
Nó là kinh điển, nhưng chỉ đề cập ở mức nào đó đến nền tảng lý thuyết tính toán, còn phần nội dung trình biên dịch còn lại thì gần như lướt qua khá nhanh
Nó không thật sự bao quát các chủ đề trình biên dịch ở trình độ cao học hiện đại, và cũng không phải sách thực dụng. Tiger Book là sách nhập môn cân bằng giữa thực hành và lý thuyết tốt hơn nhiều
Tôi nghĩ những chủ đề trình biên dịch thật sự nâng cao khó có thể được bao phủ tốt chỉ bằng một cuốn sách duy nhất
Trong đó có viết: “Để học toàn bộ hoặc phần lớn cuốn sách này cần ít nhất hai quý học hoặc hai học kỳ. Thông thường nửa đầu được dạy ở bậc đại học, còn nửa sau, nhấn mạnh vào tối ưu hóa mã, được dạy ở bậc cao học hoặc trong khóa thứ hai ở mức trung cấp”
Đôi khi tôi thấy những người thiết kế ngôn ngữ và xây dựng trình biên dịch thật sự rất đáng nể
Vì tò mò tôi đã thử tự tạo một ngôn ngữ, nhưng quá khó nên đành thỏa hiệp bằng một backend C đơn giản. Những người đóng góp cho LLVM chắc hẳn biết hết cả phần sinh assembly, thật đáng kinh ngạc
Tôi từng là web developer rồi chuyển sang làm về trình biên dịch dựa trên LLVM; bản thân LLVM rất đồ sộ nên không dễ để nắm hết mọi lĩnh vực và cơ chế
Nhưng để viết pass không quá phức tạp, sửa lỗi, sửa hồi quy thì không cần kiến thức quá đặc biệt
Thử viết một assembler là cách hay để làm quen với cấu trúc trình biên dịch, vì bạn không cần bận tâm đến tối ưu hóa, kiểu dữ liệu, hay các tính năng khiến ngôn ngữ bậc cao trở nên phức tạp
Chỉ cần triển khai frontend cho cú pháp ngôn ngữ tự tạo và một vòng lặp đánh giá nhỏ là đã có thể xem xét nhiều phần của một ngôn ngữ thực tế. Vì không bị vướng vào giải quyết vấn đề thực tế nên cũng rất tốt cho việc học và giảng dạy
Vì vậy hoàn toàn không cần thấy xấu hổ vì đã thỏa hiệp với một backend C đơn giản
Chỉ lướt qua mục lục thôi cũng thấy hầu như không có các chủ đề chính về thiết kế ngôn ngữ
Có vẻ nó gần với “nhập môn trình biên dịch” hơn là như tiêu đề
Mức này phù hợp để hiểu những thứ như trình biên dịch Python, Ruby, hoặc Pascal đơn giản hơn
Trình biên dịch và thiết kế ngôn ngữ là lĩnh vực lâu đời ngang với ngành này, nên lượng kiến thức quá nhiều để nhét vào một môn học. Dù vậy tôi thấy khóa này ổn, và tốt hơn các khóa tương tự dựa trên Dragon Book
Thật vui khi thấy một bài về trình biên dịch như thế này giữa các chủ đề AI và đủ thứ nhiễu
Việc dùng AI đúng cách và chất lượng cao cũng có giá trị, và công việc không dùng AI cũng có giá trị. Sẽ tốt hơn nếu có các tiêu chí hợp lý cho những sản phẩm liên quan đến AI, thay vì vô cớ hạ thấp công sức của người khác
Bài hay
Điều ấn tượng là nó dùng các ví dụ xuất sắc để mài giũa lại cho rõ nét những kiến thức tôi từng học