พัฒนาคอมไพเลอร์ย้อนยุคของคุณเอง
(t3x.org)- Write Your Own Retro Compiler เป็นหนังสือ 339 หน้า ว่าด้วย คอมไพเลอร์แบบ self-hosting ที่ทำงานบน CP/M ซึ่งใช้ Z80 และสร้างโค้ดสำหรับสภาพแวดล้อมเดียวกัน พร้อมซอร์สโค้ดทั้งหมด
- T3X/0 ซึ่งเป็นเป้าหมายของการติดตั้งใช้งาน เป็นภาษาที่เรียบง่าย มีรากฐานมาจาก Pascal และ BCPL และในหนังสือมีคู่มือฉบับเต็มความยาว 20 หน้า
- ต้องมีความรู้เกี่ยวกับ ภาษาขั้นตอนวิธี อย่าง C หรือ Pascal และภาษาแอสเซมบลี โดยหากมีพื้นฐาน Z80 แอสเซมบลีและ CP/M จะตามได้ง่ายขึ้น
- อธิบายการวิเคราะห์ศัพท์ การแยกวากยสัมพันธ์ การสร้างโค้ด การปรับแต่งอย่างง่าย อินเทอร์เฟซ BDOS และไลบรารีรันไทม์ ด้วยไดอะแกรม ตาราง และตัวอย่าง
- โค้ดทั้งหมดเผยแพร่เป็น สาธารณสมบัติ และมีการเปิดเผยลิงก์สำหรับซื้อหนังสือฉบับพิมพ์และ PDF รวมถึงสารบัญ หน้าตัวอย่าง และดาวน์โหลดซอร์ส
ขอบเขตและกลุ่มผู้อ่านของหนังสือ
- Write Your Own Retro Compiler เป็นหนังสือ 339 หน้า จาก Lulu Press ในปี 2023 มีภาพประกอบ 91 ภาพ ขนาด 6" x 9"
- หัวข้อหลักคือคอมไพเลอร์แบบ self-hosting ที่ทำงานบน CP/M ของโปรเซสเซอร์ Z80 และสร้างโค้ดสำหรับสภาพแวดล้อมเดียวกัน
- ออกแบบมาให้ผู้ที่ไม่มีประสบการณ์สร้างคอมไพเลอร์ก็สามารถทำตามได้
- ภาษาในการพัฒนาที่ใช้คือ T3X/0 ซึ่งเป็นภาษาที่เรียบง่าย มีรากฐานมาจาก Pascal และ BCPL
- ในหนังสือมีคู่มือฉบับเต็มของ T3X/0 ความยาว 20 หน้า
ความรู้ที่จำเป็น
- ควรรู้จักอย่างน้อยหนึ่ง ภาษาโปรแกรมเชิงกระบวนวิธี
- ยกตัวอย่าง C และ Pascal
- ควรรู้ภาษาแอสเซมบลีอย่างน้อยหนึ่งภาษา และตามหลักแล้วควรมีความรู้แอสเซมบลีสำหรับ Z80 CPU
- ต้องมีความรู้พื้นฐานเกี่ยวกับระบบปฏิบัติการ CP/M ด้วย
- สำหรับผู้อ่านที่ศึกษาด้วยตนเอง มีบทแนะนำสั้น ๆ เกี่ยวกับภาษาแอสเซมบลีของ Z80 รวมอยู่ด้วย
องค์ประกอบของคอมไพเลอร์
- อธิบายการทำงานภายในของคอมไพเลอร์ด้วย ไดอะแกรม ตาราง และตัวอย่างจำนวนมาก
- หัวข้อที่ครอบคลุมมีดังนี้
- การวิเคราะห์ศัพท์
- การแยกวากยสัมพันธ์
- การสร้างโค้ด
- การปรับแต่งอย่างง่าย
-
อินเทอร์เฟซ BDOS
- ไลบรารีรันไทม์
ลิงก์ที่ให้ไว้และโค้ด
- โค้ดทั้งหมดในหนังสือเป็น สาธารณสมบัติ
- สั่งซื้อหนังสือฉบับพิมพ์
- สั่งซื้อฉบับ PDF
- PDF สารบัญ
- PDF หน้าตัวอย่าง
- ดาวน์โหลดซอร์ส
- หน้าโค้ด
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ได้ออกหนังสือคอมไพเลอร์เล่มใหม่แล้ว ค่อนข้างเป็นฉบับขยายของ “Write Your Own Compiler” และคราวนี้พูดถึง การสร้างโค้ด CP/M สำหรับ Z80 แทน ELF ของระบบสมัยใหม่ ทำให้หลายส่วนเรียบง่ายขึ้นมาก
จะได้เห็นว่าต้องซับซ้อนแค่ไหนถึงจะสร้างคอมไพเลอร์ที่คอมไพล์ตัวเองได้ภายใน 10 นาทีบนระบบ Z80 4MHz โค้ดฟรี แต่หนังสือมีค่าใช้จ่าย
นอกจากนี้ก็อยากเห็นหนังสือเกี่ยวกับ Forth แบบไม่เยิ่นเย้อ และการตีความในสไตล์ของ Nils ด้วย
เมื่อเร็ว ๆ นี้ผมทำ คอมไพเลอร์ C แบบหลายพาส และแอสเซมเบลอร์สำหรับ CPU x86 รุ่นเก่าแบบนี้ด้วย TypeScript
https://github.com/Mati365/ts-c-compiler
ผมมีหนังสือ Practical Compiler Construction ฉบับพิมพ์ครั้งที่ 2 แบบเล่มจริง และค่อนข้างชอบเลย ขอแนะนำ หนังสือของ Nils สำหรับคนที่สนใจ
หนังสือเล่มนี้ดูน่าสนุก แต่ผมก็ยังรอภาคต่อที่เหมาะสมของ The Dragon Book อยู่
อยากได้หนังสือที่ครอบคลุม CPU สมัยใหม่ และถ้าเป็นไปได้ก็รวมถึงการปรับแต่งประสิทธิภาพ GPU ด้วย รวมทั้งวิธีออกแบบและเขียนเวอร์ชวลแมชชีนสมัยใหม่ที่มี garbage collector แบบ concurrent ที่รวดเร็วด้วย ในบางแง่อาจยากกว่าการเขียนคอมไพเลอร์เสียอีก
ครอบคลุมตั้งแต่การสร้างกราฟควบคุมการไหล การปรับแต่งหลายแบบที่ทำได้บนกราฟนั้น การวิเคราะห์ alias รูปแบบ static single assignment การปรับแต่งโดยอิง dominator ของ CFG การจัดตารางคำสั่ง การจัดสรรเรจิสเตอร์ ไปจนถึงการสร้าง object code ไม่ได้พูดถึง lexical analysis, parsing, NFA/DFA เหมือนหนังสือคอมไพเลอร์ส่วนใหญ่
สำหรับคนที่อยากสร้างคอมไพเลอร์ปรับแต่งประสิทธิภาพที่ต้องใช้การวิเคราะห์ขั้นสูง Static Program Analysis ก็น่าจะช่วยได้: https://cs.au.dk/~amoeller/spa/
ส่วน garbage collection มี Garbage Collection handbook: https://gchandbook.org/
ถ้ามีพื้นฐานอยู่บ้างแล้ว อาจชอบคอร์สนี้: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
โดยเฉพาะวิธีแนะนำ รูปแบบ SSA ที่ผมชอบ
หัวข้อขั้นสูงกว่านี้อยู่ที่นี่: https://www.cs.cmu.edu/~15745/handouts.html
เวลาอะไรสักอย่างให้ความรู้สึกเหมือน “เวทมนตร์” ผมมักมองว่าเป็นสัญญาณว่ามีใครบางคนหาทางเลี่ยงอย่างชาญฉลาดในสิ่งที่เคยคิดว่าเป็นข้อจำกัด ช่วงนี้ผมกำลังอ่านเรื่อง เบสปลอม ที่ทำให้ลำโพงขนาดเล็กดูเหมือนปล่อยเสียงทุ้มได้มากกว่าที่มันทำได้จริง วิธีที่ใช้ฮาร์มอนิกส์เพื่อหลอกสมองให้ได้ยินเสียงต่ำกว่าความจริงนั้นน่าสนใจดี
ดูน่าสนใจ แต่มีข้อเสียคือผู้อ่านต้องรู้หรือเรียนรู้ภาษาโปรแกรมใหม่อย่าง T3X ก่อน
ผมยังสงสัยด้วยว่าจะสามารถเขียนและพัฒนาคอมไพเลอร์ตั้งแต่ศูนย์บนระบบ CP/M ย้อนยุคที่เชื่อมต่อกับโลกภายนอกได้แค่คีย์บอร์ดกับหน้าจอหรือไม่
SubC มี 3815 บรรทัด ส่วน T3X/0 มี 2330 บรรทัด
แน่นอนว่าสามารถเริ่มบน CP/M โดยไม่ใช้เครื่องมือภายนอกได้ แต่ถ้าเป็นแบบนั้นก็ต้องเขียนคอมไพเลอร์สำหรับ bootstrap ด้วย ภาษาแอสเซมบลี ใช้เวลามากแต่ทำได้แน่นอน เพียงแต่ไม่แน่ใจว่าจะน่าอ่านหรือเปล่า
การใช้ไวยากรณ์แนว ALGOL แทนไวยากรณ์แนว C อาจดูแปลกนิดหน่อย แต่นั่นอาจเป็นอคติของผมเอง การจับคู่
DOกับENDในหัวให้เป็น{กับ}ก็ไม่ได้เป็นภาระอะไรมากบทเรียนคอมไพเลอร์ ที่ไปไกลกว่าขั้น lexical analysis และ parsing นี่แทบจะเป็นครั้งแรกเลยหรือเปล่า
พูดเล่นนะ แต่จริง ๆ แล้วแหล่งข้อมูลจำนวนมากก็หยุดอยู่ตรงนั้น ผมคิดว่าจะซื้อเล่มนี้
ถ้ามีหนังสือเขียน ระบบปฏิบัติการ แบบคล้าย CP/M ของตัวเองก็น่าจะสนุก
แน่นอนว่ามันแสดงวิธีสร้างระบบปฏิบัติการไมโครเคอร์เนลแนว Unix แต่ก็แค่ข้ามทุกอย่างไป ยกเว้นบทระบบไฟล์ และอย่าทำตามคำแนะนำเรื่องโครงสร้างข้อมูลแบบ tree ให้ใช้แต่ตารางแบน ๆ และไม่ต้องสนใจการทำขนาดไฟล์ให้ถูกต้องเป๊ะ เท่านี้ก็กลายเป็น CP/M แล้ว
ส่วนตัวผมชอบฉบับพิมพ์ครั้งที่ 2 มากกว่า ฉบับที่ 3 ผมมองว่าโค้ดเดโม Minix ซับซ้อนเกินจำเป็น เพราะต้องทำให้รันบนพีซีปลายยุค 1990 แทนพีซียุค 1980
ไม่ได้เขียนในแง่ลบ แต่เป็นข้อสังเกตที่อาจช่วยได้
ผมอ่านบทฟรีแล้ว และดูเหมือนบางส่วนอาจยากสำหรับคนที่มีความรู้เรื่องนี้ไม่มาก ใต้หัวข้อแต่ละอันจะอธิบายแนวคิดตั้งแต่ต้น เช่น “ไวยากรณ์ของภาษาคือ...” แต่ผ่านไปไม่กี่ประโยคก็มีหัวข้อขั้นสูงอย่าง คำสั่งแอสเซมบลี โผล่มาโดยไม่มีคำอธิบาย
ถ้าผู้อ่านอยู่ในระดับที่ต้องเรียนรู้ความหมายของไวยากรณ์ ก็น่าจะเข้าใจประโยคถัดไปได้ยาก ดังนั้นถ้าทำให้สม่ำเสมอขึ้นอีกหน่อย หนังสือน่าจะสมบูรณ์ขึ้น
ดังนั้นผมจึงคิดว่าสามารถสมมติได้ว่าผู้อ่านรู้จักสิ่งอย่างคำสั่งแอสเซมบลีแล้ว
ภาคผนวกของหนังสือมีบทนำสั้น ๆ เกี่ยวกับแอสเซมบลี Z80 ด้วย แต่ตรงนั้นก็สมมติว่ารู้พื้นฐานของภาษาแอสเซมบลีอยู่แล้ว
หนังสือทุกเล่มต้องเริ่มจากที่ใดที่หนึ่ง เป็นเรื่องยากที่จะเขียนหนังสือการสร้างคอมไพเลอร์โดยสมมติว่าผู้อ่านไม่มีความรู้การเขียนโปรแกรมคอมพิวเตอร์เลย แต่ก็ไม่ได้หมายความว่าจะไม่มีคำสาปของความรู้ ผมจะจำประเด็นนี้ไว้แน่นอน
นอกเหนือจากเนื้อหาจริงของหนังสือแล้ว ผมชอบ ดีไซน์เว็บที่ย้อนยุคและมินิมอล พอดีตัวด้วย
กระตุ้นความคิดถึงอย่างแรง ทำให้นึกถึงความทรงจำดี ๆ ตอนมีหนังสือหนา 6 นิ้วชื่อประมาณ “HTML 3.2 UNLEASHED!!!!” วางอยู่บนโต๊ะ แล้วสร้างเว็บเอง
แต่พอพยายามใช้การเปลี่ยนแปลงแบบ global กับหน้าสแตติกสัก 1500 หน้า ความสนุกก็จบลง ตอนนี้ความเจ็บปวดยังไม่มากพอให้สร้าง CMS เอง แต่ถึงจะสร้าง ผมก็จะคงดีไซน์ไว้เหมือนเดิม
https://web.archive.org/web/20231210141834/http://t3x.org/t3...