2 điểm bởi GN⁺ 5 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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

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ó

    • Có lẽ đó là cấu trúc có chủ đích
      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 à?

    • Dragon Book hơi đặc biệt
      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
    • Chỉ cần xem lời tựa bản 2006 cũng thấy các tác giả dường như nhìn chung xem cuốn này là giáo trình trình độ cao học
      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

    • Không hẳn vậy
      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
    • Bản thân việc sinh assembly thật ra khá đơn giản; phần khó là tối ưu hóa mọi thứ
      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
    • Khi học một ngôn ngữ mới, thứ tôi thích nhất là nhanh chóng tạo một lexer/parser và REPL
      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 đề

    • Có vẻ là cấu trúc theo các chủ đề cốt lõi để xem ở bậc đại học ngôn ngữ hoạt động như thế nào
      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
    • Nếu muốn học thiết kế ngôn ngữ lập trình thì nên đọc sách nào? Tôi tò mò những chủ đề bị thiếu là gì
  • 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

    • Điều kỳ lạ của thái độ ghét AI một cách mù quáng là người ta có thể gán nhãn rác AI cho bất kỳ bài nào mà không có bằng chứng, và phe chống AI sẽ ghét nó không cần căn cứ
      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