Tag: fundamentals

5 รายการ

Blog

ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กใส่เอี๊ยมยืนหลังเคาน์เตอร์ไม้ ผลักกล่องไม้เปล่าที่มีป้ายเล็กสีอำพันติดอยู่ข้างฝาข้ามเคาน์เตอร์มาให้ ด้านหลังเป็นชั้นวางกล่องเปล่าหลายขนาด
zigtutorialmemory-management

Zig 0.16 บทที่ 8: allocator คืออะไร และใครเป็นเจ้าของหน่วยความจำ

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

พี่โชว์
ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กยืนดูรางน้ำไม้ที่แยกเป็นสองทาง ทางหนึ่งไหลต่อไปข้างหน้า อีกทางเทลงถาดที่มีป้ายสีอำพันวางรออยู่ ไม่มีน้ำหกออกนอกราง
zigtutorialerror-handling

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

พี่โชว์
ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กยืนข้างถังไม้ที่มีท่อน้ำไหลลงมา มือหนึ่งจับก๊อกที่ยังปิดอยู่ น้ำสะสมอยู่ในถังรอปล่อยทีเดียว
zigtutorialio

Zig 0.16 บทที่ 4: ทำไม I/O ต้องส่ง io ไปทุกที่ และข้อความที่เขียนไม่เหมือนเดิม

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

พี่โชว์
ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กยืนหน้าตู้ลิ้นชักไม้ที่ดึงออกมาสามช่อง แต่ละช่องมีของคนละแบบ กำลังติดป้ายกำกับช่องที่สามด้วยแปรงจุ่มสีเหลืองอำพัน
zigtutorialfundamentals

Zig 0.16 บทที่ 3: struct, enum, union และคอนเทนเนอร์ที่เปลี่ยนไปทั้งหมด

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

พี่โชว์
ภาพวาดโทนมิ้นต์สว่าง อิกัวนาตัวเล็กกำลังจัดบล็อกไม้ขนาดไม่เท่ากันลงในรางไม้ที่มีช่องพอดีตัว มีบล็อกใบหนึ่งใหญ่เกินช่องถูกวางแยกไว้ข้าง ๆ อย่างชัดเจน
zigtutorialfundamentals

Zig 0.16 บทที่ 2: ชนิดข้อมูลและการควบคุมการทำงาน ที่ไม่มีอะไรซ่อนไว้

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

พี่โชว์