2 điểm bởi GN⁺ 2026-01-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Cuốn sách giúp tự học trực tiếp thiết kế và hiện thực ngôn ngữ lập trình, trình bày quá trình xây dựng một ngôn ngữ kịch bản hoàn chỉnh
  • Giải thích theo từng bước từ các khái niệm cấp cao như phân tích cú pháp, ngữ nghĩa, bytecode, garbage collection đến hiện thực ở mức thấp
  • Bắt đầu từ hàm main(), người đọc sẽ tự tay viết một ngôn ngữ có kiểu động, lexical scope, first-class function, class, kế thừa
  • 4 định dạng gồm bản in, eBook, PDF và bản web; trên web có thể đọc miễn phí toàn bộ nội dung
  • Do Robert Nystrom, nhà phát triển ngôn ngữ Dart tại Google, chấp bút; là tài liệu học thực tiễn quan trọng cho các lập trình viên quan tâm đến việc tạo ngôn ngữ

Tổng quan sách

  • Crafting Interpreters là cuốn sách nói về cách tự hiện thực một ngôn ngữ kịch bản hiệu quả với đầy đủ tính năng
    • Bao gồm cả khái niệm cấp cao như phân tích cú pháp và ngữ nghĩa, lẫn chi tiết hiện thực cấp thấp như biểu diễn bytecode và garbage collection
    • Được cấu trúc để người đọc tự tay viết mã và hiểu trọn vẹn cấu trúc của ngôn ngữ
  • Ngôn ngữ hoàn thiện hỗ trợ cú pháp phong phú, kiểu động, garbage collection, lexical scope, first-class function, closure, class, kế thừa
    • Được xây dựng bằng mã nguồn ngắn gọn và nhanh dài hàng nghìn dòng, và toàn bộ mã đều do người đọc tự viết

Các định dạng cung cấp

  • Sách có bốn định dạng: Print, eBook, PDF, Web
    • Print: 640 trang, kèm minh họa vẽ tay độ phân giải cao và trình bày chữ tinh tế
    • eBook: CSS tự điều chỉnh theo kích thước màn hình thiết bị, hỗ trợ tô sáng cú pháp màu và hyperlink
    • PDF: tái hiện nguyên vẹn dàn trang và minh họa của bản in, đồng thời tăng tính cơ động
    • Web: thiết kế responsive, gồm mọi chương và minh họa, có thể đọc miễn phí toàn bộ

Giới thiệu tác giả

  • Tác giả Robert Nystrom hiện tham gia phát triển ngôn ngữ Dart tại Google
    • Trước đây từng làm phát triển game trong 8 năm tại Electronic Arts
    • Là tác giả cuốn bán chạy Game Programming Patterns, và cuốn này cũng được phát hành miễn phí
  • Bị cuốn hút bởi việc tạo ngôn ngữ, ông đã phát triển nhiều dự án ngôn ngữ cá nhân (Wren, Magpie, Finch, Vigil)
  • Hoạt động qua blog cá nhân và Twitter (@munificentbob), đồng thời vận hành mailing list liên quan đến sách

Cách truy cập và mua sách

  • Bản in có thể mua tại các nhà sách lớn như Amazon, Barnes & Noble, Book Depository
  • eBook có trên Kindle, Apple Books, Google Play Books, Smashwords
  • Bản PDF có thể mua trên Payhip, đồng thời có PDF mẫu miễn phí để tải về
  • Bản web có thể đọc toàn bộ miễn phí trên trang chính thức

1 bình luận

 
GN⁺ 2026-01-17
Ý kiến trên Hacker News
  • Khi đọc cuốn sách này, tôi đã hiểu rõ hơn về expression problemvisitor pattern như một cách giải quyết nó
    Nhờ đó tôi cũng hoàn toàn nắm được khái niệm Class Hierarchy Inheritance không cần visitor
    Trong ngôn ngữ Newspeak, có thể đặt các lớp lồng nhau bên trong một lớp, nên khi kế thừa thì các lớp lồng nhau đó cũng được kế thừa theo
    Tính năng này được đề cập trong bài blog này như nền tảng giúp Free Object Algebras trở nên khả thi
    Tham khảo: bài viết về Expression Problem, trang chính thức của Newspeak
  • Đã có hai cuộc thảo luận rất nổi bật về cuốn sách tuyệt vời này
    Năm 2020 đạt 777 điểm, và năm 2024 đạt 607 điểm
  • Đây là tài liệu thực sự rất tốt khi học một ngôn ngữ mới
    Vì bạn sẽ học bằng cách tự tay triển khai nhiều tính năng và pattern của ngôn ngữ
    Với những ngôn ngữ có các tính năng mà Java không có, việc áp dụng các pattern tương tự sẽ khó hơn, nhưng chính thử thách đó lại rất thú vị
  • Tôi đã đọc xong cuốn sách này trong kỳ nghỉ đông
    Tôi thực sự thích văn phong gần gũi của tác giả cùng những câu hài hước rải rác khắp sách
    Mong sẽ có phần tiếp theo kiểu như “Thêm type checker cho Lox”
  • Đây là một cuốn sách thực sự rất hay
    Ban đầu tôi mua bản in, nhưng nó quá to và nặng nên cuối cùng lại mua thêm ebook
    Việc ghi chú và tìm kiếm tiện hơn rất nhiều
    Dù vậy, khi đọc đôi lúc vẫn có cảm giác như bị lạc đường giữa núi rừng :)
    Tôi cũng khuyên nên đọc cuốn Game Programming Patterns khác của tác giả
    • Tôi thậm chí đã đổi đóng gáy thành lò xo cho sách để dùng
      Tiệm in có thể làm việc này rất dễ, và dùng trên bàn làm việc thì thuận tiện hơn nhiều
      Tuy vậy, Crafting Interpreters là cuốn sách tôi tuyệt đối không thể vứt đi nên vẫn giữ nguyên
  • Tôi đã mua bản in của cuốn sách này tới ba lần để làm quà tặng
    Chỉ vậy thôi cũng đủ nói lên nó tuyệt vời đến mức nào
    • Xin cảm ơn vì đã mua tặng bản sao :)
  • Đây là một trong những tài liệu tốt nhất để học thiết kế compiler
    Hơn nữa, việc có bản web miễn phí là một sự hào phóng đáng kinh ngạc
    • Tuy nhiên, trong tiêu đề sách lại không trực tiếp có từ ‘compiler’
  • Tôi rất thích cuốn sách này
    Chỉ tiếc là phiên bản Java đã cũ
    Giá mà có một bản tái bản phản ánh các tính năng được thêm gần đây như sealed classes hay exhaustive switch
    • Tự nâng cấp nó lên Java mới hơn cũng là một bài tập luyện tập khá hay
      Làm vậy thì sẽ không cần đến công cụ sinh mã tạm thời mà tác giả đã tạo nữa
  • Tôi từng thắc mắc làm sao để parse được cú pháp phụ thuộc ngữ cảnh như typedef trong C++
    Có cách tiếp cận kiểu hack là thêm context stack vào parser dựa trên PEG, nhưng vấn đề chuyển đổi cú pháp vẫn rất khó
    Có vẻ persistent data structure hoặc transactional data structure có thể giúp ích, nhưng tôi vẫn chưa tìm ra một cách hình thức hóa rõ ràng
    • Chỉ cần tham khảo Lexer hack là được
      Cách này cho phép parser truyền trạng thái sang lexer để lexer biết được tập tên kiểu
    • Một cách khác là dùng functional parser
      Ví dụ với thư viện như Parsec, có thể tận dụng ký pháp ‘do’ để các parser phía sau dùng chung kết quả từ các bước trước
    • Chính thiết kế ngữ pháp của C/C++ quá tệ nên mới phát sinh vấn đề này
      May là Rust hay Go đã tránh được kiểu rắc rối đó, và với thiết kế cẩn thận thì hoàn toàn có thể phòng tránh
  • Tôi chia sẻ thêm vài tài liệu cho những ai muốn bắt đầu với interpreter
    Có thể tham khảo dự án shi, và nếu quan tâm đến C thì xem hacktical-c