3 คะแนน โดย bus710 12 일 전 | 2 ความคิดเห็น | แชร์ทาง WhatsApp

เผยแพร่เมื่อวันที่ 14 เมษายน 2026 เป็นรีลีสที่สร้างขึ้นจาก 1,183 คอมมิตตลอด 8 เดือนโดยผู้มีส่วนร่วม 244 คน

I/O as an Interface — หัวใจสำคัญของรีลีสนี้

นี่คือการเปลี่ยนแปลงที่ใหญ่ที่สุดในรีลีสนี้ สิ่งเกือบทั้งหมดที่อาจเกิดการบล็อกได้ เช่น ไฟล์ซิสเต็ม เครือข่าย ตัวจับเวลา และการซิงโครไนซ์ ถูกนำมารวมไว้ภายใต้อินเทอร์เฟซ std.Io ใหม่ เช่นเดียวกับที่การจัดสรรหน่วยความจำต้องใช้ Allocator ตอนนี้โค้ดทั้งหมดที่ใช้ I/O ก็ต้องรับอินสแตนซ์ Io ด้วยเช่นกัน ทำให้สามารถสร้างแพ็กเกจที่นำกลับมาใช้ซ้ำได้โดยไม่ขึ้นกับโมเดล concurrency และยังทำให้ event loop ถูกจัดการได้อย่างเหมาะสมในระดับภาษา

มี implementation อยู่ 3 แบบ:

  • Io.Threaded — implementation ที่สมบูรณ์บนพื้นฐานของเธรด รองรับ cancellation และเมื่อย้ายมาจาก 0.15.x ก็จะยังคงพฤติกรรมเดิมไว้
  • Io.Evented — implementation เชิงทดลองที่ใช้วิธี user-space stack switching (green thread)
  • Io.Uring — implementation แบบ PoC ที่อิงกับ Linux io_uring

คอมไพเลอร์

  • รองรับ Incremental Compilation บน LLVM backend ด้วย — หากมี compile error จะข้ามขั้นตอน LLVM Emit Object จึงตรวจพบข้อผิดพลาดได้เร็วขึ้นมาก
  • ยกเครื่อง Type Resolution ใหม่ทั้งหมด — กราฟ dependency ภายในเปลี่ยนจากโครงสร้างแบบวนกลับเป็น DAG ประเภทที่ใช้เป็นเพียง namespace จะไม่ถูกวิเคราะห์โดยไม่จำเป็น ทำให้ขนาดไบนารีลดลงด้วย ข้อความ error ของ dependency loop ก็จะแสดงได้ชัดขึ้นมากว่าปัญหาเริ่มพันกันจากตรงไหน
  • aarch64 backend — กำลังพัฒนาอย่างหนักโดยมีเป้าหมายให้เป็นค่าเริ่มต้นในโหมด Debug
  • Fuzzer ในตัวแข็งแกร่งขึ้น — เพิ่มการ fuzzing แบบหลายโปรเซสบนพื้นฐาน AST Smith, Infinite Mode และความสามารถในการสร้าง crash dump

การเปลี่ยนแปลงของภาษา (Breaking Changes)

ต่อไปนี้คือการเปลี่ยนแปลงที่ต้องมีการย้ายโค้ด:

  • @cImport ถูกย้ายไปอยู่ในระบบ build
  • built-in @Type ถูกถอดออก — แทนที่ด้วย built-in แยกตามแต่ละประเภท
  • มี Lazy Field Analysis เพิ่มเข้ามา — ประเภทที่ใช้เป็นเพียง namespace จะไม่วิเคราะห์ฟิลด์
  • ไม่สามารถใส่พอยน์เตอร์ไว้ใน packed union/struct ได้อีกต่อไป
  • API ที่เกี่ยวข้องกับ posix และ os.windows จำนวนมากถูกนำออก

ไลบรารีมาตรฐาน

  • heap.ArenaAllocator เปลี่ยนเป็น thread-safe + lock-free และ heap.ThreadSafe Allocator ถูกถอดออก
  • เพิ่มการบีบอัด Deflate และ API สำหรับคลายบีบอัดก็เรียบง่ายขึ้น
  • เพิ่ม AES-SIV, AES-GCM-SIV, Ascon-AEAD, Ascon-Hash ใน std.crypto
  • Thread.Pool, GenericReader / AnyReader / FixedBufferStream ถูกถอดออก
  • Windows networking ทำงานได้โดยไม่ต้องพึ่ง ws2_32.dll และการย้ายไป NtDll ก็เสร็จสมบูรณ์แล้ว

อัปเดตทูลเชน

อัปเกรดเป็น LLVM 21, musl 1.2.5, glibc 2.43, Linux 6.19 headers, macOS 26.4 headers และ FreeBSD 15.0 libc


ทิศทางของรีลีสถัดไป (0.17.0)

เป้าหมายหลักคือทำให้ async I/O เสถียร เปลี่ยน aarch64 backend ให้เป็นค่าเริ่มต้นในโหมด Debug เอาการพึ่งพา LLD ออก และทำลิงเกอร์ที่รองรับ Incremental Compilation

2 ความคิดเห็น

 
bus710 12 일 전

เมื่อคืนนี้ Zig Language Server ก็ได้ออกเวอร์ชัน 0.16 เช่นกัน

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

 
bus710 12 일 전

อ๊ะ ลิงก์...

https://github.com/zigtools/zls/releases