ตำราเบื้องต้นเรื่องคอมไพเลอร์และการออกแบบภาษา (2021)
(dthain.github.io)- เป็นตำราออนไลน์ฟรีที่พัฒนาขึ้นสำหรับวิชาคอมไพเลอร์ Notre Dame CSE 40243 โดยสามารถดาวน์โหลดได้ทันทีทั้ง PDF ฉบับเต็มและ PDF แยกตามบทเพื่อนำไปศึกษา
- ครอบคลุมเนื้อหาระดับหนึ่งภาคการศึกษา โดยไล่ตามลำดับการสร้างคอมไพเลอร์และอธิบายกระบวนการแปลโปรแกรมภาษาระดับสูงให้เป็นโปรแกรมภาษาระดับต่ำ
- ผู้เรียนจะตั้งเป้าหมายในการสร้างคอมไพเลอร์แบบง่ายที่รับภาษาคล้าย C แล้วแปลงเป็นแอสเซมบลี X86 หรือ ARM
- เหมาะที่สุดสำหรับผู้เรียนระดับปริญญาตรีที่มีประสบการณ์เขียนโปรแกรม C และเคยเรียนโครงสร้างข้อมูลกับสถาปัตยกรรมคอมพิวเตอร์มาแล้ว
- PDF สามารถใช้ได้เพื่อการใช้งานส่วนตัวและทางวิชาการ แต่ห้ามพิมพ์หรือแจกจ่ายเชิงพาณิชย์ และควรตรวจสอบข้อมูลล่าสุดที่ compilerbook.org
ตำราที่อ้างอิงจากวิชาคอมไพเลอร์ของ Notre Dame
- Introduction to Compilers and Language Design เป็นตำราออนไลน์ฟรีที่ Douglas Thain พัฒนาขึ้นสำหรับวิชาคอมไพเลอร์ CSE 40243 ของ University of Notre Dame
- ฉบับพิมพ์ครั้งที่ 2 เป็นฉบับปี 2020 และระบุวันที่แก้ไขเป็น 15 มกราคม 2021
- ผู้อ่านที่ต้องการหนังสือฉบับเล่มสามารถซื้อได้ทั้งแบบปกแข็งหรือปกอ่อน
- ตำราเล่มนี้ครอบคลุมทั้งมิติทางทฤษฎีและภาคปฏิบัติของวิทยาการคอมพิวเตอร์ ผ่านกระบวนการสร้างคอมไพเลอร์ตั้งแต่ต้นจนจบ
- เป้าหมายการเรียนรู้สุดท้ายคือการสร้างคอมไพเลอร์อย่างง่ายที่รับภาษาคล้าย C แล้วแปลเป็นแอสเซมบลี X86 หรือ ARM
PDF, โค้ดตัวอย่าง, และเงื่อนไขการใช้งาน
- มีทั้ง PDF ของตำราทั้งเล่มและ PDF แยกตามบท
- ภาคผนวกประกอบด้วย Sample Course Project, The B-Minor Language, และ Coding Conventions
- คลัง GitHub compilerbook-examples มีสื่อฝึกปฏิบัติที่สอดคล้องกับหนังสือ
- สแกนเนอร์และพาร์เซอร์หลายแบบ
- โครงสร้างโค้ดตั้งต้นสำหรับโปรเจ็กต์คอมไพเลอร์
- ชุดทดสอบตัวอย่างสำหรับแต่ละขั้นตอน ได้แก่ สแกนเนอร์ พาร์เซอร์ ตัวตรวจสอบชนิด และตัวสร้างโค้ด
- PDF สามารถดาวน์โหลด พิมพ์ และใช้งานได้เพื่อวัตถุประสงค์ส่วนตัวและทางวิชาการ
- ห้ามพิมพ์หรือแจกจ่ายเชิงพาณิชย์ และแทนที่จะคัดลอก PDF ไปแจกจ่ายในเครื่องท้องถิ่น ควรแนะนำให้นักศึกษาไปที่หน้า compilerbook.org
- หากพบคำผิดหรือข้อผิดพลาด สามารถส่งอีเมลไปที่
dthain@nd.eduโดยตั้งหัวข้อเป็นCompiler Book Errata
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมเคยเรียน วิชาคอมไพเลอร์ ของ Dr. Thain ตอนมหาวิทยาลัย และมันยอดเยี่ยมมากจริงๆ
เขาเป็นอาจารย์ที่ดีมาก และโปรเจกต์ในวิชาทำให้ได้ค่อยๆ สร้างคอมไพเลอร์สไตล์ C ด้วยตัวเองทีละขั้น โปรเจกต์ตัวอย่างที่นี่ก็ดูแทบเหมือนกับโปรเจกต์ที่ทำตอนนั้นเลย ขอแนะนำอย่างยิ่งให้ลองทำตามจนจบ
ยังไม่แน่ใจว่าถูกนำไปใช้ในคอร์สไหน แต่ C4(https://news.ycombinator.com/item?id=8558822) และ C4x86(https://news.ycombinator.com/item?id=8746054) น่าจะเป็นหัวข้อเรียนหนึ่งภาคการศึกษาที่ดี
เพราะเป็นคอมไพเลอร์ซับเซตของ C ที่คอมไพล์ตัวเองได้และมีขนาดเล็กมาก จึงดูเหมาะจะใช้เป็นฐานสำหรับงานเพิ่มเติมที่ให้ขยายฟีเจอร์ต่างๆ
บทความที่เกี่ยวข้อง: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - พฤษภาคม 2022, 68 ความคิดเห็น
Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - เมษายน 2019, 1 ความคิดเห็น
รู้สึกเหมือนวนอยู่ในขอบเขตแคบๆ แถวภาษา C และธรรมเนียมแปลกๆ ของมันเท่านั้น
ในคำอธิบายหนังสือก็บอกว่าเป็น “ตำราเบื้องต้นสำหรับหนึ่งภาคการศึกษา ที่ช่วยให้ผู้อ่านสร้างคอมไพเลอร์อย่างง่ายที่รับ ภาษาคล้าย C ได้”
ตามคำนำ หมายความว่า Dragon Book อยู่ระดับบัณฑิตศึกษาขั้นสูงหรือ?
แม้จะเป็นหนังสือคลาสสิก แต่ครอบคลุมพื้นฐานทฤษฎีการคำนวณเพียงพอประมาณ และเนื้อหาคอมไพเลอร์ที่เหลือก็ออกแนวกวาดผ่านอย่างรวดเร็ว
ไม่ได้ครอบคลุมหัวข้อคอมไพเลอร์ระดับบัณฑิตศึกษายุคใหม่อย่างจริงจัง และก็ไม่ใช่หนังสือเชิงปฏิบัติด้วย Tiger Book เป็นหนังสือเริ่มต้นที่ดีกว่ามากในแง่สมดุลระหว่างงานจริงกับทฤษฎี
ผมคิดว่าหัวข้อคอมไพเลอร์ที่ขั้นสูงจริงๆ คงยากที่จะครอบคลุมได้ดีด้วยหนังสือเล่มเดียว
มีข้อความว่า “หากจะครอบคลุมหนังสือเล่มนี้ทั้งหมดหรือเกือบทั้งหมด ต้องใช้เวลาอย่างน้อยสองควอเตอร์หรือสองภาคการศึกษา โดยทั่วไปครึ่งแรกสอนในระดับปริญญาตรี ส่วนครึ่งหลังที่เน้นการปรับแต่งโค้ดให้เหมาะสม สอนในระดับบัณฑิตศึกษาหรือเป็นคอร์สที่สองระดับกลาง”
บางครั้งพอเห็นคนที่ออกแบบภาษาและสร้างคอมไพเลอร์ ก็รู้สึกว่าพวกเขาสุดยอดจริงๆ
ผมเคยอยากลองสร้างภาษาเองด้วยความสงสัย แต่ยากเกินไปเลยประนีประนอมด้วย C backend แบบง่ายๆ คนที่มีส่วนร่วมกับ LLVM น่าจะรู้ทุกอย่างไปจนถึงการสร้างแอสเซมบลี น่าทึ่งจริงๆ
ผมเคยเป็นเว็บดีเวลลอปเปอร์แล้วเปลี่ยนมาทำงานด้านคอมไพเลอร์ที่อิง LLVM ตัว LLVM เองใหญ่มาก จึงไม่ง่ายที่จะเรียนรู้ทุกส่วนและกลไกทั้งหมด
แต่การเขียน pass ที่ไม่ซับซ้อน การแก้บั๊ก และการแก้ regression ไม่ได้ต้องใช้ความรู้พิเศษเหนือชั้นอะไรมากนัก
การลองเขียน assembler เป็นวิธีที่ดีในการคุ้นเคยกับโครงสร้างของคอมไพเลอร์ เพราะไม่ต้องกังวลเรื่อง optimization, type หรือฟีเจอร์ต่างๆ ที่ทำให้ภาษาระดับสูงซับซ้อน
แค่ทำฟรอนต์เอนด์ของไวยากรณ์ภาษาที่สร้างเองกับลูปประเมินผลเล็กๆ ก็ทำให้ได้สำรวจหลายส่วนของภาษาจริงแล้ว และไม่ติดขัดกับการแก้ปัญหาจริง จึงดีทั้งสำหรับการเรียนและการสอน
ดังนั้นไม่จำเป็นต้องรู้สึกอายเลยที่ประนีประนอมด้วย C backend แบบง่ายๆ
แค่ไล่ดูสารบัญก็แทบไม่เห็นหัวข้อสำคัญของ การออกแบบภาษา
ดูเหมือนใกล้เคียงกับ “คอมไพเลอร์เบื้องต้น” มากกว่าชื่อหนังสือ
เป็นระดับที่เหมาะกับการทำความเข้าใจสิ่งอย่าง Python หรือ Ruby หรือคอมไพเลอร์ Pascal ที่เรียบง่ายกว่า
คอมไพเลอร์และการออกแบบภาษาเป็นสาขาที่เก่าแก่พอๆ กับอุตสาหกรรมนี้ จึงมีความรู้มากเกินกว่าจะยัดลงในวิชาเดียวได้ ถึงอย่างนั้นผมว่าคอร์สนี้ก็ใช้ได้ และดีกว่าคอร์สลักษณะคล้ายกันที่อิง Dragon Book
ดีใจที่ได้เห็น บทความเรื่องคอมไพเลอร์ แบบนี้ท่ามกลางหัวข้อ AI และเสียงรบกวนต่างๆ
การใช้ AI อย่างถูกต้องและมีคุณภาพสูงก็มีคุณค่า และงานที่ไม่ใช่ AI ก็มีคุณค่าเช่นกัน คงจะดีถ้ามีเกณฑ์ที่สมเหตุสมผลสำหรับผลงานที่เกี่ยวข้องกับ AI แทนที่จะลดคุณค่างานของคนอื่นแบบเหมาๆ
เป็นบทความที่ดี
น่าประทับใจตรงที่ช่วย ขัดเกลาให้ชัดเจนขึ้น ซึ่งความรู้ที่เคยเรียนมา ด้วยตัวอย่างดีๆ มากมาย