2 คะแนน โดย GN⁺ 5 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นตำราออนไลน์ฟรีที่พัฒนาขึ้นสำหรับวิชาคอมไพเลอร์ 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 ความคิดเห็น

 
GN⁺ 5 시간 전
ความคิดเห็นจาก 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 อยู่ระดับบัณฑิตศึกษาขั้นสูงหรือ?

    • Dragon Book ค่อนข้างแปลก
      แม้จะเป็นหนังสือคลาสสิก แต่ครอบคลุมพื้นฐานทฤษฎีการคำนวณเพียงพอประมาณ และเนื้อหาคอมไพเลอร์ที่เหลือก็ออกแนวกวาดผ่านอย่างรวดเร็ว
      ไม่ได้ครอบคลุมหัวข้อคอมไพเลอร์ระดับบัณฑิตศึกษายุคใหม่อย่างจริงจัง และก็ไม่ใช่หนังสือเชิงปฏิบัติด้วย Tiger Book เป็นหนังสือเริ่มต้นที่ดีกว่ามากในแง่สมดุลระหว่างงานจริงกับทฤษฎี
      ผมคิดว่าหัวข้อคอมไพเลอร์ที่ขั้นสูงจริงๆ คงยากที่จะครอบคลุมได้ดีด้วยหนังสือเล่มเดียว
    • แค่ดูคำนำฉบับปี 2006 ก็เหมือนผู้เขียนมองหนังสือนี้โดยรวมว่าเป็น ตำราระดับบัณฑิตศึกษา
      มีข้อความว่า “หากจะครอบคลุมหนังสือเล่มนี้ทั้งหมดหรือเกือบทั้งหมด ต้องใช้เวลาอย่างน้อยสองควอเตอร์หรือสองภาคการศึกษา โดยทั่วไปครึ่งแรกสอนในระดับปริญญาตรี ส่วนครึ่งหลังที่เน้นการปรับแต่งโค้ดให้เหมาะสม สอนในระดับบัณฑิตศึกษาหรือเป็นคอร์สที่สองระดับกลาง”
  • บางครั้งพอเห็นคนที่ออกแบบภาษาและสร้างคอมไพเลอร์ ก็รู้สึกว่าพวกเขาสุดยอดจริงๆ
    ผมเคยอยากลองสร้างภาษาเองด้วยความสงสัย แต่ยากเกินไปเลยประนีประนอมด้วย C backend แบบง่ายๆ คนที่มีส่วนร่วมกับ LLVM น่าจะรู้ทุกอย่างไปจนถึงการสร้างแอสเซมบลี น่าทึ่งจริงๆ

    • ไม่จำเป็นต้องเป็นแบบนั้นเสมอไป
      ผมเคยเป็นเว็บดีเวลลอปเปอร์แล้วเปลี่ยนมาทำงานด้านคอมไพเลอร์ที่อิง LLVM ตัว LLVM เองใหญ่มาก จึงไม่ง่ายที่จะเรียนรู้ทุกส่วนและกลไกทั้งหมด
      แต่การเขียน pass ที่ไม่ซับซ้อน การแก้บั๊ก และการแก้ regression ไม่ได้ต้องใช้ความรู้พิเศษเหนือชั้นอะไรมากนัก
    • การสร้างแอสเซมบลี เองจริงๆ แล้วค่อนข้างเรียบง่าย สิ่งที่ยากคือการปรับทุกอย่างให้เหมาะสม
      การลองเขียน assembler เป็นวิธีที่ดีในการคุ้นเคยกับโครงสร้างของคอมไพเลอร์ เพราะไม่ต้องกังวลเรื่อง optimization, type หรือฟีเจอร์ต่างๆ ที่ทำให้ภาษาระดับสูงซับซ้อน
    • เวลาเรียนภาษาใหม่ ผมชอบที่สุดคือการรีบทำ lexer/parser กับ REPL ขึ้นมา
      แค่ทำฟรอนต์เอนด์ของไวยากรณ์ภาษาที่สร้างเองกับลูปประเมินผลเล็กๆ ก็ทำให้ได้สำรวจหลายส่วนของภาษาจริงแล้ว และไม่ติดขัดกับการแก้ปัญหาจริง จึงดีทั้งสำหรับการเรียนและการสอน
      ดังนั้นไม่จำเป็นต้องรู้สึกอายเลยที่ประนีประนอมด้วย C backend แบบง่ายๆ
  • แค่ไล่ดูสารบัญก็แทบไม่เห็นหัวข้อสำคัญของ การออกแบบภาษา
    ดูเหมือนใกล้เคียงกับ “คอมไพเลอร์เบื้องต้น” มากกว่าชื่อหนังสือ

    • ดูเหมือนเป็นโครงสร้างที่พาไปดูหัวข้อแก่นๆ ว่าภาษาทำงานอย่างไรในระดับปริญญาตรี
      เป็นระดับที่เหมาะกับการทำความเข้าใจสิ่งอย่าง Python หรือ Ruby หรือคอมไพเลอร์ Pascal ที่เรียบง่ายกว่า
      คอมไพเลอร์และการออกแบบภาษาเป็นสาขาที่เก่าแก่พอๆ กับอุตสาหกรรมนี้ จึงมีความรู้มากเกินกว่าจะยัดลงในวิชาเดียวได้ ถึงอย่างนั้นผมว่าคอร์สนี้ก็ใช้ได้ และดีกว่าคอร์สลักษณะคล้ายกันที่อิง Dragon Book
    • ถ้าอยากเรียน การออกแบบภาษา โปรแกรมมิง ควรแนะนำหนังสือเล่มไหน? อยากรู้ว่าหัวข้อที่ขาดไปคืออะไรบ้าง
  • ดีใจที่ได้เห็น บทความเรื่องคอมไพเลอร์ แบบนี้ท่ามกลางหัวข้อ AI และเสียงรบกวนต่างๆ

    • สิ่งแปลกของการเกลียด AI แบบมืดบอดคือ ต่อให้แปะป้ายว่า ขยะ AI ให้บทความไหนก็ได้โดยไม่มีหลักฐาน ฝั่งต่อต้าน AI ก็จะเกลียดมันอย่างไม่มีเหตุผลรองรับ
      การใช้ AI อย่างถูกต้องและมีคุณภาพสูงก็มีคุณค่า และงานที่ไม่ใช่ AI ก็มีคุณค่าเช่นกัน คงจะดีถ้ามีเกณฑ์ที่สมเหตุสมผลสำหรับผลงานที่เกี่ยวข้องกับ AI แทนที่จะลดคุณค่างานของคนอื่นแบบเหมาๆ
  • เป็นบทความที่ดี
    น่าประทับใจตรงที่ช่วย ขัดเกลาให้ชัดเจนขึ้น ซึ่งความรู้ที่เคยเรียนมา ด้วยตัวอย่างดีๆ มากมาย