← Workshop ทั้งหมด

Zig Workshop: สร้าง CLI วิเคราะห์ log ด้วย Zig 0.16

สร้าง CLI วิเคราะห์ log ด้วย Zig 0.16 ใน 6 บทเรียน · 6 บทเรียน

ตอนที่ 1-3: อ่านและแยกวิเคราะห์ข้อมูล

1

Zig Workshop #1: วางโครง CLI ที่รันได้จริงด้วย build.zig ของ 0.16

เริ่ม workshop สร้าง zlog เครื่องมือวิเคราะห์ nginx access log — zig init ของจริงใน 0.16, build.zig.zon ที่บังคับ fingerprint, main ที่รับ std.process.Init, อ่าน argument, buffered stdout พร้อม flush และรหัสจบโปรแกรมที่ถูกต้อง

2

Zig Workshop #2: อ่านไฟล์ 94 MB ด้วยแรม 1.8 MB

อ่าน log ทีละบรรทัดแบบ streaming ด้วย Io.Reader ของ Zig 0.16 — ทำไม buffer ถึงเป็นพารามิเตอร์, takeDelimiter ทำงานยังไง, จัดการบรรทัดแบบ Windows และผลวัดจริงที่ streaming ใช้แรม 1.8 MB เทียบกับอ่านทั้งไฟล์ที่ใช้ 100 MB บนไฟล์เดียวกัน

3

Zig Workshop #3: แยกวิเคราะห์ log โดยไม่ขอหน่วยความจำแม้แต่ไบต์เดียว

เขียน parser สำหรับ nginx combined log ที่ไม่ copy อะไรเลย — ทุกฟิลด์เป็น slice ที่ชี้กลับเข้าไปในบรรทัดต้นทาง, error set ที่บอกได้ว่าผิดตรงไหน, โหมด --strict และบทเรียนเรื่องอายุของข้อมูลที่คอมไพเลอร์ Zig ไม่ได้ตรวจให้

ตอนที่ 4-6: หน่วยความจำ comptime และการส่งมอบ

4

Zig Workshop #4: บั๊ก slice ที่ชี้ไปในอากาศ และวิธีแก้ด้วย arena

เก็บสถิติจาก log ที่อ่านมาแบบไม่ copy — สร้างบั๊ก dangling slice ขึ้นมาจริงแล้วแก้ด้วย arena interning, ใช้ getOrPut ให้ hash ครั้งเดียวแทนสามครั้ง, เรียง top-N ด้วย sort.pdq และให้ std.testing.allocator จับ leak ให้อัตโนมัติ

5

Zig Workshop #5: ให้ comptime สร้างตัวเลือกของ CLI จาก struct

เพิ่มฟิลด์ใน struct หนึ่งบรรทัด แล้ว --by, ข้อความ --help และตัวแปลงค่าของ CLI รองรับให้เองทันที — ใช้ @typeInfo กับ inline for อ่านโครงสร้าง LogLine ตอนคอมไพล์ และ @compileError ดักชื่อฟิลด์ผิดตั้งแต่ยังไม่ได้รัน

6

Zig Workshop #6: 1 ล้านบรรทัดใน 62 มิลลิวินาที และส่งขึ้นทุกแพลตฟอร์ม

บทจบของ workshop zlog — เก็บข้อมูลแบบ struct-of-arrays เพื่อคำนวณ percentile, เทียบเวลา Debug กับ Release ที่ต่างกัน 14 เท่า, คอมไพล์ binary ให้ห้าแพลตฟอร์มจากเครื่องเดียว และ benchmark เทียบกับ awk และ Python บนไฟล์ 94 MB เดียวกันที่ reproduce ได้