ถ้าเรา build from scratch ตั้งแต่ instruction sets, memory management, compilers, interpreters, data structures, algorithms แล้ว build on top ของที่สร้างเรื่อยๆ จนแก้โจทย์ LeetCode ได้สักข้อสองข้อ โดยที่ทุกอย่างเขียนเอง รันบน runtime ของตัวเองบน WebAssembly แล้วเอาไป visualize ในแต่ละ layer ได้ น่าจะน่าสนุกดี
Day 1 of "From Opcodes to Algorithms" in Rust
เมื่อวานเริ่มจากทำ stack memory แบบกากๆ ก่อน เริ่มจากสร้าง fixed-size array สองเซ็ต คือ registers (16 ตัว) กับ memory (0x0000 - 0xFFFF) แล้วก็แบ่ง memory layout ออกมาเป็น text, data, bss, heap+stack
stack แบบบ้านๆ ก็แค่ increment/decrement stack pointer ก่อน ให้มันเริ่มจาก high address (0xFFFF) แล้วก็ยัดของเข้าไปเรื่อยๆ จนกว่ามันจะ overflow/underflow เดี๋ยววันนี้กะจะเพิ่ม heap กับ stack frame
รู้สึกว่าเอา Rust มาเขียน runtime / simulator เอาไว้ใช้เล่นเองแบบนี้แล้วเวริคมาก เพราะตัวภาษามันบาลานซ์ให้เขียนอะไรแบบนี้ได้ดี พวก array, u8, usize, error handling, struct, impl, unit tests ทำให้ ergonomics ในการเขียนดีมาก เขียนแล้วสนุก
ยังแอบขี้เกียจ annotate lifetime อยู่ หวังว่าเขียนเก่งกว่านี้แล้วจะชิน (มั้ง)
September 23, 2023. Post on Facebook.