From Opcodes to Algorithms - Day 5

Day 5 of "From Opcodes to Algorithms" in Rust

โปรเจคนี้เราอยากทำ compiler และ interpreter เอง เพราะถ้าต้องเขียนทุกอย่างบน bytecode ไม่น่าจะเขียน algorithms สนุก โชคดีที่วันก่อนชุนป้ายยาหนังสือเรื่อง crafting interpreters มา

Pasted image 20240104013812.png

เล่มนี้เล่าถึงการสร้าง interpreter และ compiler ของตัวเอง ตั้งแต่เรื่อง parsing ไปจนถึงการสร้าง bytecode, virtual machine และ GC เลย ในเล่มจะให้เราสร้างภาษานึงขึ้นมา ที่มีฟีเจอร์ค่อนข้างครบ ครึ่งแรกจะให้เขียน Java และครึ่งหลังเขียนใหม่เป็น C เพื่อให้เราเข้าใจลึกขึ้น

วันนี้ตอนเช้าเลยเริ่มอ่านใน Kindle ดู ปรากฎว่าเขียนสนุกมาก อ่านเพลินเลย ถึงบทแรกๆ คิดว่ารู้ส่วนมากอยู่แล้ว แต่การได้อ่านหนังสือมันช่วย solidify ก้อนความรู้ที่เรารู้มาก่อนสะเปะสะปะ แต่ยังขาดความนุ่มลึก ให้มันเข้าใจการตัดสินใจหรือเหตุผลได้ลึกขึ้น

คิดว่าวันต่อไปน่าจะทำ tutorial ตาม crafting interpreters ไปพร้อมกับเขียน virtual stack machine ของตัวเองคู่กันไปด้วย น่าจะเข้าใจอะไรได้เยอะขึ้น

เป้าหมายคืออยากได้ lisp compiler ที่ compile เป็น bytecode ของเรา เอาไปใช้บน visual assembly canvas ของตัวเอง ตอนนี้โปรเจคเลยจะมี 3 ส่วนให้สลับกันทำแล้ว ปกติเราเบื่อง่าย เวลาเบื่อจะได้สลับไปมา

  1. stack-based virtual machine ตัวหลักที่เขียนด้วย Rust
  2. block-based infinite canvas ที่กะจะเขียนด้วย React เพราะรู้สึกไม่ได้เขียนแอพใหญ่ๆ ใน React มานานมาก อยากลองเล่น Nanostores กับ Radix UI ที่ไม่ได้ลองซะที อยากเขียน Canvas กับทำ animation ด้วย
  3. compiler/interpreter สำหรับภาษาที่กำลังจะสร้าง รันบน bytecode ของ stack-based VM ตอนแรกกะจะทำตามหนังสือก่อน แต่เขียนเป็น Kotlin แทน Java แล้วหลังจากนั้นค่อยลองสร้างอะไรของตัวเอง

วันนี้เขียนโพสต์เสร็จแล้ว กะจะไปทำ loop บน VM ให้เสร็จ แล้วก็อ่าน crafting compilers ต่อ

October 3. Post on Facebook.