Jalur Zig membawa pembaca dari fondasi bahasa sampai pengerjaan proyek nyata dengan menempatkan keeksplisitan sebagai benang merahnya. Cakupannya meliputi nilai dan array, alur kendali beserta error, struct dan union, pengelolaan memori dengan allocator, comptime, pengujian, thread, model I/O std.Io, build beserta interop C, hingga ekosistem package. Materi disusun untuk Zig 0.17.0 dengan contoh yang dapat dijalankan dan keluaran asli. Prasyaratnya berupa komputer dengan toolchain 0.17.0 terpasang dan akses terminal.
Zig
Jalur belajar Zig dari fondasi hingga interop C dan pengerjaan proyek nyata, dengan disiplin allocator eksplisit, comptime, dan model I/O terbaru Zig 0.17.0.
0/0 selesai
Modul pembuka: identitas Zig sebagai bahasa sistem, kontrak pra-1.0, dan penyiapan toolchain.
- Apa itu Zig ?Mengidentifikasi Zig sebagai bahasa sistem eksplisit yang bersaing dengan C tanpa runtime dan tanpa pengelolaan memori tersembunyi.
- Kontrak pra-1.0Memahami status pra-1.0 Zig: tidak ada janji stabilitas dan perubahan merusak datang pada setiap rilis.
- Penyiapan toolchainMemasang toolchain 0.17.0, memeriksa versi dengan zig version, dan menyiapkan editor.
Fondasi data Zig: integer berlebar eksplisit, pengikatan nilai, array, slice, dan string.
- Integer dengan lebar eksplisitMenggunakan u8, i32, u64 beserta operator wrapping dan saturating untuk aritmetika yang eksplisit.
- const, var, dan literalMembedakan const dan var, memahami pengikatan immutable, dan tipe literal yang ditentukan konteks.
- ArrayBekerja dengan array [N]T berpanjang tetap yang ukurannya diketahui saat kompilasi.
- SliceMenggunakan slice sebagai tampilan yang membawa panjang dan batas atas memori kontigu.
- StringMemahami string sebagai slice u8 dan pola sentinel berakhiran null.
Percabangan, perulangan, switch, error union, defer, dan pemeriksaan keamanan runtime.
- if, while, dan forMenulis percabangan dan perulangan yang terlihat atas rentang dan slice.
- switchMemanfaatkan pencocokan exhaustif dan switch berlabel untuk mesin keadaan.
- Error unionMemodelkan kegagalan dengan error set, error union !T, try, dan catch.
- defer dan errdeferMenjadwalkan pembersihan deterministik pada setiap jalur keluar fungsi.
- Keamanan dan unreachableMemahami pemeriksaan mode debug, panic, dan semantik unreachable.
Tipe data bentukan: struct, namespace, enum, union bertag, dan optional.
- StructMendefinisikan struct dengan field, nilai bawaan, dan sintaks inisialisasi.
- Namespace dan metodeMengorganisasi kode dengan deklarasi container dan memahami desugaring pemanggilan titik.
- EnumMendefinisikan konstanta bernama dengan tag integer yang diketahui saat kompilasi.
- Union bertagMemodelkan tipe sum dengan union bertag yang di-switch dengan aman atas tag runtime.
- OptionalMenangani ketiadaan nilai dengan ?T secara eksplisit.
Poros seri ini: pointer, antarmuka Allocator, disiplin kepemilikan, ArrayList, ArenaAllocator, dan pengujian kebocoran.
- PointerMenggunakan pointer satu item, banyak item, dan pointer opsional.
- Antarmuka AllocatorMengalokasikan memori secara eksplisit melalui antarmuka Allocator.
- Disiplin kepemilikanMenetapkan pihak yang mengalokasikan dan pihak yang membebaskan memori.
- ArrayListMengelola koleksi yang tumbuh dengan ArrayList yang terikat pada sebuah allocator.
- ArenaAllocatorMengelola masa hidup terlingkup dengan ArenaAllocator yang dibebaskan dalam satu panggilan.
- Pengujian kebocoranMenangkap kebocoran memori dengan std.testing.allocator sebelum kode dipakai di luar pemeriksaan.
Eksekusi kode saat kompilasi: evaluasi comptime, parameter comptime, container generik, refleksi, dan konstruk inline.
- Evaluasi comptimeMenjalankan kode selama kompilasi dan memahami semantik comptime_int.
- Parameter comptimeMenulis fungsi generik melalui parameter comptime.
- Container generikMendefinisikan satu container yang melayani semua tipe.
- Refleksi @typeInfoMengintrospeksi tipe pada waktu kompilasi dengan @typeInfo.
- Konstruk inlineMengendalikan perulangan dan percabangan inline pada waktu kompilasi.
Budaya test bawaan: blok test, asersi ekspektasi, dan penyambungan test ke graf build.
- Blok testMenulis test bernama yang ditemukan oleh test runner.
- EkspektasiMemakai expectEqual, asersi error, dan verifikasi allocator dalam test.
- Test dalam build.zigMenyambungkan test suite ke graf build sehingga zig build test menjalankannya.
Abstraksi std.Io generasi baru: Reader, Writer, operasi stream, sistem berkas, dan kisah async yang dihapus.
- Antarmuka Reader dan WriterMengenal abstraksi std.Io Reader dan Writer yang diperkenalkan pada 0.15.
- Menyusun operasi streamMenyusun wrapper generik atas sumber dan tujuan apa pun.
- Sistem berkasBekerja dengan std.Io.Dir: berkas, direktori, dan penelusuran isi direktori.
- Kisah async secara jujurMemahami sejarah async/await yang dihapus dan model Io yang menggantikannya.
Sisi pengerjaan: build.zig, kompilasi silang, konsumsi header C, ekspor ke C, dan tata letak struct.
- build.zigMenyusun graf build dengan Zig itu sendiri melalui berkas build.zig dan langkah-langkahnya.
- Kompilasi silangMenghasilkan biner untuk platform lain dengan satu toolchain melalui opsi -target.
- translate-cMengonsumsi header dan pustaka C melalui penerjemah translate-c dan @import.
- Ekspor ke CMenyediakan fungsi Zig untuk dipanggil dari program C melalui export dan tautan objek.
- Struct packed dan externMengendalikan tata letak memori struct dengan packed untuk susunan bit dan extern untuk ABI C.
Konkurensi kelas satu: std.Thread, atomics, dan mutex.
- std.ThreadMembuat dan menggabung kembali thread sistem operasi dengan std.Thread.spawn dan join.
- Atomics dan pengurutanMemperbarui memori bersama tanpa data race melalui std.atomic.Value dan tingkat pengurutan.
- MutexMelindungi satu rentang operasi pada state bersama dengan std.Io.Mutex.
Distribusi kode: package build.zig.zon dan lanskap package komunitas.
- Package build.zig.zonMendeklarasikan dependensi pada build.zig.zon dengan fingerprint dan memakainya melalui build.zig.
- Lanskap packageMengenali bentuk package Zig, perintah zig init, dan lanskap komunitas pasca migrasi Codeberg.
Penutup jalur: pemilihan proyek, perancangan memori, dan pengerjaan bertahap dengan titik pemeriksaan.
- Pemilihan proyekMemilih proyek penutup yang realistis antara alat CLI, basis data kecil, atau pembungkus pustaka C.
- Rencanakan memori dahuluMenggambar strategi alokasi sebelum menulis kode dan menerjemahkannya menjadi program nyata.
- Membangun dengan titik pemeriksaanMenjaga proyek tetap berjalan dan diuji pada setiap tahap melalui titik pemeriksaan build dan silang.