Tag: fundamentals
5 รายการ
Blog

Zig 0.16 บทที่ 8: allocator คืออะไร และใครเป็นเจ้าของหน่วยความจำ
หัวใจของ Zig คือไม่มี allocator ตั้งต้น — ทำความเข้าใจ interface ที่มีแค่สี่ฟังก์ชัน, ธรรมเนียมว่าใครเป็นเจ้าของผลลัพธ์, เขียน allocator ของตัวเองที่นับการใช้งานได้, และรายงาน leak จริงจาก DebugAllocator ที่ผมรันให้ดูทั้ง output และรหัสจบโปรแกรม

Zig 0.16 บทที่ 6: error ที่คอมไพเลอร์ไม่ยอมให้คุณเมิน
ระบบ error ของ Zig ไม่มี exception ไม่มีการคลี่ stack และเมินไม่ได้ — error set เป็นชนิดข้อมูล, try/catch/errdefer, switch บน error ที่ต้องครบทุกกรณี และ error return trace ที่ผมรันจริงแล้วพบว่า ReleaseSafe ปิดไว้ ต่างจากที่เอกสารส่วนใหญ่บอก พร้อมเทียบกับ C++, Java, C#, Go และ Rust

Zig 0.16 บทที่ 4: ทำไม I/O ต้องส่ง io ไปทุกที่ และข้อความที่เขียนไม่เหมือนเดิม
หัวใจของการเปลี่ยนแปลงใน Zig 0.16 — I/O กลายเป็นพารามิเตอร์เหมือน allocator, writer ที่คุณต้องส่ง buffer ให้เองและต้อง flush, อ่านไฟล์ทีละบรรทัดด้วย takeDelimiter, จัดการ CRLF ของ Windows และ format method ที่เปลี่ยน signature จนโค้ดเก่าใช้ไม่ได้

Zig 0.16 บทที่ 3: struct, enum, union และคอนเทนเนอร์ที่เปลี่ยนไปทั้งหมด
ประกอบข้อมูลเป็นก้อนใหญ่ใน Zig 0.16 — struct กับ decl literal, enum ที่ switch ครบทุกกรณีหรือคอมไพล์ไม่ผ่าน, tagged union แทน inheritance, การจัดวางหน่วยความจำที่คอมไพเลอร์เรียงให้เอง และ ArrayList/HashMap/MultiArrayList แบบ 0.16 ที่ใช้ไม่เหมือนเดิม

Zig 0.16 บทที่ 2: ชนิดข้อมูลและการควบคุมการทำงาน ที่ไม่มีอะไรซ่อนไว้
เจาะพื้นฐานภาษา Zig 0.16 — จำนวนเต็มความกว้างใดก็ได้, การล้นที่ Zig ถือว่าผิดกฎทั้ง signed และ unsigned, optional ที่แทน null ได้จริง, ความต่างของ array กับ slice, ลูปที่วิ่งหลายชุดพร้อมกัน, labeled switch และ defer พร้อมตัวอย่างที่รันผ่านจริงทุกชิ้น