Introduce "inline" variants of ZIR tags: * block => block_inline * repeat => repeat_inline * break => break_inline * condbr => condbr_inline The inline variants perform control flow at compile-time, and they utilize the return value of `Sema.analyzeBody`. `analyzeBody` now returns an Index, not a Ref, which is the ZIR index of a break instruction. This effectively communicates both the intended break target block as well as the operand, allowing parent blocks to find out whether they, in turn, should return the break instruction up the call stack, or accept the operand as the block's result and continue analyzing instructions in the block. Additionally: * removed the deprecated ZIR tag `block_comptime`. * removed `break_void_node` so that all break instructions use the same Data. * zir.Code: remove the `root_start` and `root_len` fields. There is now implied to be a block at index 0 for the root body. This is so that `break_inline` has something to point at and we no longer need the special instruction `break_flat`. * implement source location byteOffset() for .node_offset_if_cond .node_offset_for_cond is probably redundant and can be deleted. We don't have `comptime var` supported yet, so this commit adds a test that at least makes sure the condition is required to be comptime known for `inline while`.
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.