LLVM is smart enough to produce tight overflow checking sequences. On x86_64 a simple v4u32 addition is turned from: ``` c5 e9 d4 d4 vpaddq %xmm4, %xmm2, %xmm2 c5 f1 d4 cb vpaddq %xmm3, %xmm1, %xmm1 c5 f8 28 e9 vmovaps %xmm1, %xmm5 c4 e3 55 18 ea 01 vinsertf128 $1, %xmm2, %ymm5, %ymm5 c5 f0 c6 da 88 vshufps $136, %xmm2, %xmm1, %xmm3 c5 c8 57 f6 vxorps %xmm6, %xmm6, %xmm6 c4 e3 55 0c ee aa vblendps $170, %ymm6, %ymm5, %ymm5 c4 e3 7d 19 ec 01 vextractf128 $1, %ymm5, %xmm4 c4 e2 69 29 d4 vpcmpeqq %xmm4, %xmm2, %xmm2 c5 e9 ef d0 vpxor %xmm0, %xmm2, %xmm2 c4 e2 71 29 cd vpcmpeqq %xmm5, %xmm1, %xmm1 c5 f1 ef c0 vpxor %xmm0, %xmm1, %xmm0 c5 f9 6b c2 vpackssdw %xmm2, %xmm0, %xmm0 c5 f8 50 c0 vmovmskps %xmm0, %eax 84 c0 testb %al, %al ``` into: ``` c5 f9 fe c9 vpaddd %xmm1, %xmm0, %xmm1 c4 e2 71 3f c0 vpmaxud %xmm0, %xmm1, %xmm0 c5 f1 76 c0 vpcmpeqd %xmm0, %xmm1, %xmm0 c5 f8 50 c0 vmovmskps %xmm0, %eax 34 0f xorb $15, %al 0f 95 c1 setne %cl f6 c1 01 testb $1, %cl ```
A general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
Resources
- Introduction
- Download & Documentation
- Chapter 0 - Getting Started | ZigLearn.org
- Community
- Contributing
- Code of Conduct
- Frequently Asked Questions
- Community Projects
Installation
- download a pre-built binary
- install from a package manager
- build from source
- bootstrap zig for any target
License
The ultimate goal of the Zig project is to serve users. As a first-order effect, this means users of the compiler, helping programmers to write better software. Even more important, however, are the end-users.
Zig is intended to be used to help end-users accomplish their goals. Zig should be used to empower end-users, never to exploit them financially, or to limit their freedom to interact with hardware or software in any way.
However, such problems are best solved with social norms, not with software licenses. Any attempt to complicate the software license of Zig would risk compromising the value Zig provides.
Therefore, Zig is available under the MIT (Expat) License, and comes with a humble request: use it to make software better serve the needs of end-users.
This project redistributes code from other projects, some of which have other licenses besides MIT. Such licenses are generally similar to the MIT license for practical purposes. See the subdirectories and files inside lib/ for more details.