Zig requires manual memory management, but attempts to improve memory safety through option types and a unit testing framework.
Untuk membantu mengurangi potensi kesalahan akibat pengelolaan memori manual, Zig menyediakan jenis opsi, sintaksis sederhana untuk menggunakannya, serta kerangka kerja pengujian unit bawaan.
Even with these changes, Zig can compile into and against existing C code; C headers can be included in a Zig project and their functions called, and Zig code can be linked into C projects by including the compiler-built headers.
Sebaliknya, kode Zig juga dapat ditautkan ke dalam proyek C dengan menghasilkan header C yang dibuat oleh kompiler Zig.
Zig has a more conservative extension of the type system, supporting compile time generics and accommodating a form of duck typing with the comptime directive.
Sebaliknya, Zig mengadopsi ekstensi sistem tipe yang lebih konservatif, termasuk dukungan untuk compile time generics dan bentuk sederhana dari duck typing melalui penggunaan direktif comptime.
One of the primary sources of bugs in C programs is the memory management system, based on malloc.
Salah satu sumber utama kesalahan dalam pemrograman menggunakan bahasa C adalah sistem manajemen memori yang berbasis pada fungsi malloc.
Although this greatly reduces, or even eliminates, memory errors, types of GC systems may have unpredictable performance that makes them unsuited to real-time computing and systems programming.
Meskipun efektif dalam mengurangi kesalahan memori, GC cenderung memperkenalkan overhead kinerja dan ketidakpastian waktu eksekusi, sehingga kurang sesuai untuk pemrograman sistem yang menuntut determinisme dan efisiensi tinggi.
In this code, the allocator variable is passed a struct that describes what code should perform the allocation, and the repeat function returns either the resulting string or, using the optional type as indicated by the !, an Allocator.
Sebagai contoh, variabel allocator diberikan struktur yang menjelaskan kode apa yang bertanggung jawab melakukan alokasi, sementara fungsi repeat mengembalikan string yang dihasilkan atau, dalam beberapa kasus, menggunakan tipe opsional yang ditunjukkan dengan tanda seru (!), seperti pada Allocator.
They do not have to be used to solve null pointer problems; they are also useful for any type of value where "no value" is an appropriate answer.
Tipe ini tidak hanya berguna untuk menangani masalah penunjuk null, tetapi juga untuk semua tipe nilai di mana "tidak ada nilai" merupakan jawaban yang tepat.
Another more general feature of Zig that also helps manage memory problems is the concept of defer, which marks some code to be performed at the end of a scope no matter what happens, including possible runtime errors.
Fitur Zig lainnya yang berguna dalam manajemen memori adalah konsep defer, yang memungkinkan kode tertentu untuk dijalankan di akhir fungsi, terlepas dari apa yang terjadi selama eksekusi fungsi, termasuk kemungkinan kesalahan.
Zig promotes a gradual approach to portability that combines new Zig code with existing C code.
Zig mengadopsi pendekatan bertahap terhadap portabilitas yang memungkinkan penggabungan kode Zig baru dengan kode C yang sudah ada.
As Zig uses new data types that are explicitly defined, unlike C’s more generic int and float, a small number of directives are used to move data between the C and Zig types, including @intCast and @ptrCast.
Untuk memastikan interoperabilitas antara Zig dan pustaka C, sejumlah kecil direktif digunakan untuk mengonversi dan memindahkan data antara tipe data Zig dan C. Beberapa direktif penting yang digunakan dalam proses ini meliputi: @intCast: Digunakan untuk mengonversi tipe data integer Zig ke tipe data integer C, atau sebaliknya, dengan memastikan kompatibilitas ukuran dan representasi.
Being able to run code at compile time allows Zig to have the functionality of macros and conditional compilation without the need for a separate preprocessor language.
Kemampuan ini memungkinkan Zig untuk memiliki fitur makro dan kompilasi bersyarat tanpa memerlukan bahasa praprosesor terpisah, memberikan fleksibilitas lebih kepada pengembang dalam menulis kode yang lebih efisien dan dapat disesuaikan.
Zig also includes a C and C++ compiler, and can be used with either or both languages by leveraging with the commands zig cc and zig c++, providing many headers including the C standard library (libc) and C++ Standard Library (libcxx) for many different platforms.
Dengan menggunakan perintah zig cc dan zig c++, Zig menyediakan banyak header termasuk pustaka standar C (libc) dan pustaka standar C++ (libcxx) untuk berbagai platform.
This allows Zig’s cc and c++ sub-commands to act as cross compilers out of the box (similarly to Clang).
Hal ini memungkinkan perintah zig cc dan zig c++ berfungsi sebagai kompiler silang secara langsung, mirip dengan alat seperti Clang.
This means any Zig compiler can compile runnable binaries for any of its target platforms, of which there are dozens.
Artinya, setiap kompiler Zig dapat menghasilkan biner yang dapat dijalankan untuk berbagai platform target.
These include not only widely-used modern systems like ARM and x86-64, but also PowerPC, SPARC, MIPS, RISC-V, LoongArch64 and even the IBM z/Architectures (S390).
Platform-platform ini mencakup sistem yang banyak digunakan seperti ARM dan x86-64, serta arsitektur yang lebih jarang seperti PowerPC, SPARC, MIPS, RISC-V, LoongArch64, dan IBM z/Architectures (S390).
Zig uses LLVM (written in C++) as a backend for optimization.
Zig menggunakan LLVM (yang ditulis dalam C++) sebagai backend untuk optimasi.
Since version 0.10 the Zig compiler is written in the Zig programming language, i.e., it is a self-hosting compiler.
Sejak versi 0.10, kompiler Zig telah dihosting menggunakan bahasa pemrograman Zig itu sendiri, menjadikannya kompiler yang menghosting dirinya (self-hosting compiler).
The previous bootstrapping compiler, written in Zig and C++ using LLVM as a back-end, supporting many of its native targets, was removed in version 0.11.
Sebelum versi 0.11, Zig menggunakan kompiler bootstrapping yang ditulis dalam kombinasi bahasa Zig dan C++, dengan LLVM sebagai backend.
Newer versions of Zig use a prebuilt WebAssembly version of Zig to bootstrap itself.
Sebagai gantinya, Zig versi terbaru menggunakan versi WebAssembly Zig yang telah dibuat sebelumnya untuk melakukan proses bootstrap terhadap dirinya sendiri.
Each package ideally includes a standard build.zig file (that the Zig compiler uses by convention to compile the source code) and a build.zig.zon file containing metadata with name and version of the package.
Idealnya, setiap paket Zig harus menyertakan berkas standar yang digunakan oleh kompiler Zig sesuai dengan konvensi untuk mengompilasi kode sumber.
Archived from the original on 1 October 2020.
Diarsipkan dari versi asli pada 1 Oktober 2020.
Yegulalp, Serdar (29 August 2016).
Yegulalp, Serdar (29 Agustus 2016).
"New challenger joins Rust to topple C language".
"New challenger joins Rust to topple C language"".