2 คะแนน โดย GN⁺ 2026-01-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หนังสือที่พาเรียนรู้ การออกแบบและการพัฒนาภาษาการเขียนโปรแกรม ด้วยตัวเอง พร้อมอธิบายกระบวนการสร้างภาษาสคริปต์ที่สมบูรณ์แบบ
  • อธิบายเป็นลำดับขั้นตั้งแต่แนวคิดระดับสูงอย่าง parsing, semantics, bytecode, garbage collection ไปจนถึงการลงมือพัฒนาระดับล่าง
  • เริ่มจากฟังก์ชัน main() แล้วค่อย ๆ เขียนภาษาที่รองรับ dynamic typing, lexical scope, first-class functions, classes, inheritance ด้วยตัวเอง
  • มีให้ใช้งานใน 4 รูปแบบ ได้แก่ ฉบับพิมพ์, eBook, PDF และเวอร์ชันเว็บ โดยบนเว็บสามารถอ่านเนื้อหาทั้งหมดได้ฟรี
  • เขียนโดย Robert Nystrom ผู้พัฒนาภาษา Dart ที่ Google และเป็นแหล่งเรียนรู้เชิงปฏิบัติที่สำคัญสำหรับนักพัฒนาที่สนใจการสร้างภาษา

ภาพรวมหนังสือ

  • Crafting Interpreters เป็นหนังสือว่าด้วยวิธีสร้าง ภาษาสคริปต์ที่มีประสิทธิภาพและใช้งานได้ครบถ้วน ขึ้นมาด้วยตัวเอง
    • ครอบคลุมทั้ง แนวคิดระดับสูง อย่าง parsing และ semantics รวมถึง รายละเอียดการพัฒนาระดับล่าง อย่างการแทนค่าแบบ bytecode และ garbage collection
    • ออกแบบมาให้ผู้อ่านลงมือเขียนโค้ดเองเพื่อทำความเข้าใจโครงสร้างของภาษาได้อย่างครบถ้วน
  • ภาษาที่สร้างเสร็จจะรองรับ ไวยากรณ์ที่หลากหลาย, dynamic typing, garbage collection, lexical scope, first-class functions, closures, classes, inheritance
    • ประกอบด้วย โค้ดที่กระชับและทำงานรวดเร็ว หลายพันบรรทัด ซึ่งผู้อ่านจะเป็นผู้เขียนทั้งหมดด้วยตนเอง

รูปแบบที่มีให้

  • หนังสือมีให้ใน 4 รูปแบบคือ Print, eBook, PDF, Web
    • Print: ความยาว 640 หน้า พร้อมภาพประกอบวาดมือความละเอียดสูงและงานจัดพิมพ์ที่ประณีต
    • eBook: CSS ปรับตามขนาดหน้าจอของอุปกรณ์ และรองรับ การเน้นไวยากรณ์แบบสีและไฮเปอร์ลิงก์
    • PDF: ถ่ายทอดรูปแบบการจัดหน้าและภาพประกอบจากฉบับพิมพ์ไว้อย่างครบถ้วน พร้อมพกพาได้สะดวกขึ้น
    • Web: ใช้ดีไซน์แบบ responsive มีครบทุกบทและภาพประกอบ และ เปิดให้อ่านฟรีทั้งหมด

แนะนำผู้เขียน

  • ผู้เขียน Robert Nystrom มีส่วนร่วมในการพัฒนา ภาษา Dart ที่ Google
    • ก่อนหน้านี้เคยทำงาน พัฒนาเกมเป็นเวลา 8 ปี ที่ Electronic Arts
    • เป็นผู้เขียนหนังสือขายดี Game Programming Patterns ซึ่งเปิดให้อ่านฟรีเช่นกัน
  • ด้วยความหลงใหลในการสร้างภาษา เขาจึงพัฒนา โปรเจกต์ภาษางานอดิเรก (Wren, Magpie, Finch, Vigil) หลายตัว
  • เขาเคลื่อนไหวผ่านบล็อกส่วนตัวและทวิตเตอร์(@munificentbob) พร้อมดูแล เมลลิงลิสต์ ที่เกี่ยวข้องกับหนังสือ

ช่องทางการเข้าถึงและการซื้อ

  • ฉบับพิมพ์สามารถซื้อได้จากร้านหนังสือหลักอย่าง Amazon, Barnes & Noble, Book Depository
  • eBook มีให้บน Kindle, Apple Books, Google Play Books, Smashwords และแพลตฟอร์มอื่น ๆ
  • เวอร์ชัน PDF ซื้อได้ผ่าน Payhip และมี PDF ตัวอย่างฟรี ให้ดาวน์โหลด
  • เวอร์ชันเว็บเปิดให้อ่านได้ครบทั้งเล่มฟรีบนเว็บไซต์ทางการ

1 ความคิดเห็น

 
GN⁺ 2026-01-17
ความเห็นจาก Hacker News
  • หนังสือเล่มนี้ทำให้เข้าใจ expression problem และ visitor pattern ในฐานะแนวทางแก้ไขได้ดีขึ้นมาก
    และยังทำให้เข้าใจแนวคิด Class Hierarchy Inheritance แบบที่ไม่ต้องพึ่ง visitor อย่างถ่องแท้ด้วย
    ในภาษา Newspeak สามารถมี nested class อยู่ภายในคลาสได้ และเมื่อสืบทอดคลาส nested class เหล่านั้นก็จะถูกสืบทอดไปด้วย
    ฟีเจอร์นี้คือสิ่งที่ทำให้ Free Object Algebras เป็นไปได้ ซึ่งกล่าวถึงไว้ในบล็อกโพสต์นี้
    อ้างอิง: บทความ Expression Problem, เว็บไซต์ทางการของ Newspeak
  • เคยมีการพูดคุยยอดนิยมเกี่ยวกับหนังสือยอดเยี่ยมเล่มนี้มาแล้วสองครั้ง
    ในปี 2020 ได้ 777 คะแนน และในปี 2024 ได้ 607 คะแนน
  • หนังสือเล่มนี้เป็นสื่อที่ดีมากสำหรับการเรียนรู้ภาษาใหม่
    เพราะได้เรียนรู้ผ่านการลงมือสร้างฟีเจอร์และแพตเทิร์นของภาษาต่าง ๆ ด้วยตัวเอง
    สำหรับภาษาที่มีฟีเจอร์ซึ่ง Java ไม่มี การนำแพตเทิร์นคล้ายกันมาใช้จะยากหน่อย แต่ ความท้าทายนั้นเองก็สนุก
  • อ่านหนังสือเล่มนี้จบช่วงวันหยุดฤดูหนาว
    ชอบ สำนวนการเขียนแบบสบาย ๆ ของผู้เขียนและมุกตลกที่แทรกอยู่ตลอดมาก
    อยากให้มีภาคต่ออย่าง “เพิ่ม type checker ให้ Lox”
  • เป็นหนังสือที่ดีมากจริง ๆ
    ตอนแรกซื้อฉบับกระดาษ แต่เล่มใหญ่และหนักเกินไป สุดท้ายเลยซื้อ e-book อีกรอบ
    จดโน้ตและค้นหาได้สะดวกกว่ามาก
    แต่เวลาอ่านก็ยังมีบางช่วงที่ให้ความรู้สึกเหมือนหลงทางอยู่กลางภูเขา :)
    และขอแนะนำหนังสืออีกเล่มของผู้เขียนคือ Game Programming Patterns ด้วย
    • ฉันเคยเปลี่ยน การเข้าเล่มเป็นแบบ ring binding เพื่อใช้งานด้วย
      ร้านพิมพ์ทำให้ได้ไม่ยาก และใช้งานบนโต๊ะสะดวกกว่ามาก
      แต่สำหรับ Crafting Interpreters เป็นหนังสือที่ไม่มีทางทิ้งได้ เลยยังคงสภาพเดิมไว้
  • ฉันซื้อฉบับพิมพ์ของหนังสือเล่มนี้เป็น ของขวัญ ไปแล้วถึงสามครั้ง
    แค่นี้ก็บอกได้แล้วว่ามันยอดเยี่ยมแค่ไหน
    • ขอบคุณที่ซื้อสำเนาให้เป็นของขวัญ :)
  • เป็นหนึ่งในสื่อที่ดีที่สุดสำหรับการเรียนรู้การออกแบบคอมไพเลอร์
    แถม เวอร์ชันเว็บยังเปิดให้อ่านฟรี ซึ่งใจกว้างมากจริง ๆ
    • แต่ในชื่อหนังสือก็ไม่ได้มีคำว่า ‘compiler’ อยู่ตรง ๆ
  • ชอบหนังสือเล่มนี้มากจริง ๆ
    แค่เสียดายที่ เวอร์ชัน Java ค่อนข้างเก่า
    อยากให้มีฉบับปรับปรุงที่สะท้อนฟีเจอร์ใหม่อย่าง sealed classes หรือ exhaustive switch
    • การลองอัปเกรดให้เป็น Java รุ่นใหม่ด้วยตัวเองก็เป็น แบบฝึกหัด ที่ดี
      ถ้าทำแบบนั้น ก็ไม่จำเป็นต้องใช้เครื่องมือสร้างโค้ดชั่วคราวที่ผู้เขียนทำไว้
  • สงสัยว่าควร parse ไวยากรณ์ที่ขึ้นกับบริบท แบบ typedef ของ C++ อย่างไร
    มีวิธีแบบแฮ็ก ๆ คือเพิ่ม context stack เข้าไปใน PEG-based parser แต่ปัญหาเรื่องการสลับไวยากรณ์ก็ยังยากอยู่ดี
    คิดว่า persistent data structure หรือ transactional data structure อาจช่วยได้ แต่ก็ยังไม่เจอการนิยามเชิงรูปแบบที่ชัดเจน
    • ลองดู Lexer hack ได้
      วิธีคือทำให้ parser ส่งสถานะไปยัง lexer เพื่อให้ lexer รู้จักชุดของชื่อประเภท
    • อีกวิธีคือใช้ functional parser
      ตัวอย่างเช่นในไลบรารีอย่าง Parsec สามารถใช้สัญกรณ์ ‘do’ เพื่อให้ผลลัพธ์ของแต่ละขั้นถูกแชร์ไปยัง parser ขั้นถัดไปได้
    • ปัญหานี้เกิดขึ้นเพราะ การออกแบบไวยากรณ์ของ C/C++ แย่มาก
      โชคดีที่ Rust และ Go หลีกเลี่ยงปัญหาแบบนี้ได้ และถ้าออกแบบอย่างระมัดระวังก็ป้องกันได้เพียงพอ
  • ขอแชร์แหล่งข้อมูลเล็กน้อยสำหรับคนที่อยากเริ่มทำอินเทอร์พรีเตอร์
    แนะนำให้ดู โปรเจกต์ shi และถ้าสนใจฝั่งภาษา C ก็ลองดู hacktical-c