Problems to solve in this branch before merging: * Liveness and AIR printing want a ZIR instance. This issue is addressed by #10784. * linker: updateFunc / updateDecl want a Module instance which currently represents only Zig code. These functions should be changed to accept a Compilation, not a Module. The relevant state that it needed to touch on Module should be moved to Compilation instead. * `Decl` needs to be shared by both the C frontend and the Zig frontend. It currently has Zig-only fields and the functions to create Decl objects don't really fit the API that the C frontend needs. * A lot of the incremental compilation infrastructure doesn't quite match up, for example Decl objects being owned by Namespaces which is a Zig concept. Maybe there could be 1 Namespace globally across all C files and 1 more Namespace per C file for functions and globals declared `static`. * There is common code to be extracted from Sema that is shared with Aro frontend. All the helper functions having to do with the air_instructions and air_extra arrays. There are many instances of calling `@panic("TODO")` that need to be cleaned up. There is a lot of compiler options that Zig is not communicating to Aro, for example we do not pass the -D switches that we pass to Clang yet. Need to audit `addCCArgs` and do the equivalent things for setting up the Aro Compilation. The Aro code is copied from https://github.com/Vexu/arocc, commit 7a0e54227e1ea2b2df8aa7bd2b7075f735109317. The only patches are to delete Codegen and replace it with our own, and to delete main.zig, and add Type and Value to lib.zig. I believe the current plan is for main Aro development to happen upstream on the arocc repository and periodically sync it downstream with the Zig repository. It's up to @Vexu whether to keep that process or change it in the future. |
||
|---|---|---|
| .builds | ||
| .github | ||
| ci | ||
| cmake | ||
| deps | ||
| doc | ||
| lib | ||
| src | ||
| test | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| build.zig | ||
| CMakeLists.txt | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
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.