2018-05-12 22:07:55 -07:00
|
|
|
![ZIG](https://ziglang.org/zig-logo.svg)
|
2015-08-05 17:44:05 -07:00
|
|
|
|
2017-08-09 14:52:02 -07:00
|
|
|
A programming language designed for robustness, optimality, and
|
2017-05-07 11:11:01 -07:00
|
|
|
clarity.
|
2015-08-05 17:44:05 -07:00
|
|
|
|
2018-05-12 22:07:55 -07:00
|
|
|
[ziglang.org](https://ziglang.org)
|
2016-02-09 21:31:49 -08:00
|
|
|
|
2017-04-24 14:04:52 -07:00
|
|
|
## Feature Highlights
|
2016-01-26 00:39:45 -08:00
|
|
|
|
2017-05-07 11:11:01 -07:00
|
|
|
* Small, simple language. Focus on debugging your application rather than
|
2017-09-30 10:59:47 -07:00
|
|
|
debugging knowledge of your programming language.
|
2017-05-07 11:11:01 -07:00
|
|
|
* Ships with a build system that obviates the need for a configure script
|
|
|
|
or a makefile. In fact, existing C and C++ projects may choose to depend on
|
|
|
|
Zig instead of e.g. cmake.
|
|
|
|
* A fresh take on error handling which makes writing correct code easier than
|
|
|
|
writing buggy code.
|
|
|
|
* Debug mode optimizes for fast compilation time and crashing with a stack trace
|
|
|
|
when undefined behavior *would* happen.
|
2017-10-13 06:31:03 -07:00
|
|
|
* ReleaseFast mode produces heavily optimized code. What other projects call
|
2017-05-07 11:11:01 -07:00
|
|
|
"Link Time Optimization" Zig does automatically.
|
2016-01-31 22:40:56 -08:00
|
|
|
* Compatible with C libraries with no wrapper necessary. Directly include
|
|
|
|
C .h files and get access to the functions and symbols therein.
|
2016-01-26 00:39:45 -08:00
|
|
|
* Provides standard library which competes with the C standard library and is
|
2018-07-18 14:56:34 -07:00
|
|
|
always compiled against statically in source form. Zig binaries do not
|
2017-04-24 22:26:37 -07:00
|
|
|
depend on libc unless explicitly linked.
|
2018-07-18 14:56:34 -07:00
|
|
|
* Optional type instead of null pointers.
|
2017-12-26 16:44:08 -08:00
|
|
|
* Safe unions, tagged unions, and C ABI compatible unions.
|
2017-04-24 14:53:00 -07:00
|
|
|
* Generics so that one can write efficient data structures that work for any
|
|
|
|
data type.
|
2016-01-26 00:39:45 -08:00
|
|
|
* No header files required. Top level declarations are entirely
|
|
|
|
order-independent.
|
2017-01-31 10:26:53 -08:00
|
|
|
* Compile-time code execution. Compile-time reflection.
|
2018-07-18 14:56:34 -07:00
|
|
|
* Partial compile-time function evaluation which eliminates the need for
|
2017-01-31 10:26:53 -08:00
|
|
|
a preprocessor or macros.
|
2016-01-26 00:39:45 -08:00
|
|
|
* The binaries produced by Zig have complete debugging information so you can,
|
2018-07-18 14:56:34 -07:00
|
|
|
for example, use GDB, MSVC, or LLDB to debug your software.
|
2017-10-13 06:31:03 -07:00
|
|
|
* Built-in unit tests with `zig test`.
|
2016-02-15 14:51:10 -08:00
|
|
|
* Friendly toward package maintainers. Reproducible build, bootstrapping
|
|
|
|
process carefully documented. Issues filed by package maintainers are
|
|
|
|
considered especially important.
|
2017-04-24 14:04:52 -07:00
|
|
|
* Cross-compiling is a primary use case.
|
2015-12-06 20:55:28 -08:00
|
|
|
* In addition to creating executables, creating a C library is a primary use
|
|
|
|
case. You can export an auto-generated .h file.
|
2015-11-27 23:40:54 -08:00
|
|
|
|
2018-11-27 08:27:45 -08:00
|
|
|
### Supported Targets
|
|
|
|
|
|
|
|
#### Tier 1 Support
|
|
|
|
|
|
|
|
* Not only can Zig generate machine code for these targets, but the standard
|
|
|
|
library cross-platform abstractions have implementations for these targets.
|
|
|
|
Thus it is practical to write a pure Zig application with no dependency on
|
|
|
|
libc.
|
|
|
|
* The CI server automatically tests these targets on every commit to master
|
|
|
|
branch, and updates ziglang.org/download with links to pre-built binaries.
|
|
|
|
* These targets have debug info capabilities and therefore produce stack
|
|
|
|
traces on failed assertions.
|
|
|
|
|
|
|
|
#### Tier 2 Support
|
|
|
|
|
|
|
|
* There may be some standard library implementations, but many abstractions
|
|
|
|
will give an "Unsupported OS" compile error. One can link with libc or other
|
|
|
|
libraries to fill in the gaps in the standard library.
|
|
|
|
* These targets are known to work, but are not automatically tested, so there
|
|
|
|
are occasional regressions.
|
|
|
|
* Some tests may be disabled for these targets as we work toward Tier 1
|
|
|
|
support.
|
|
|
|
|
|
|
|
#### Tier 3 Support
|
|
|
|
|
|
|
|
* The standard library has little to no knowledge of the existence of this
|
|
|
|
target.
|
|
|
|
* Because Zig is based on LLVM, it has the capability to build for these
|
|
|
|
targets, and LLVM has the target enabled by default.
|
|
|
|
* These targets are not frequently tested; one will likely need to contribute
|
|
|
|
to Zig in order to build for these targets.
|
|
|
|
* The Zig compiler might need to be updated with a few things such as
|
|
|
|
- what sizes are the C integer types
|
|
|
|
- C ABI calling convention for this target
|
|
|
|
- bootstrap code and default panic handler
|
|
|
|
|
|
|
|
#### Tier 4 Support
|
|
|
|
|
|
|
|
* Support for these targets is entirely experimental.
|
|
|
|
* LLVM may have the target as an experimental target, which means that you
|
|
|
|
need to use Zig-provided binaries for the target to be available, or
|
|
|
|
build LLVM from source with special configure flags.
|
|
|
|
|
|
|
|
#### Support Table
|
|
|
|
|
|
|
|
| | freestanding | linux | macosx | windows | freebsd | other |
|
|
|
|
|--------|--------------|--------|--------|---------|---------|--------|
|
2018-11-27 17:56:43 -08:00
|
|
|
|x86_64 | Tier 2 | Tier 1 | Tier 1 | Tier 1 | Tier 2 | Tier 3 |
|
2018-11-27 08:27:45 -08:00
|
|
|
|i386 | Tier 2 | Tier 2 | Tier 2 | Tier 2 | Tier 3 | Tier 3 |
|
|
|
|
|arm | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |
|
|
|
|
|arm64 | Tier 2 | Tier 2 | Tier 3 | Tier 3 | Tier 3 | Tier 3 |
|
|
|
|
|bpf | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|hexagon | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|mips | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|powerpc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|r600 | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|amdgcn | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|sparc | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|s390x | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|spir | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|lanai | Tier 3 | Tier 3 | N/A | N/A | Tier 3 | Tier 3 |
|
|
|
|
|wasm32 | Tier 4 | N/A | N/A | N/A | N/A | N/A |
|
|
|
|
|wasm64 | Tier 4 | N/A | N/A | N/A | N/A | N/A |
|
|
|
|
|riscv32 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 |
|
|
|
|
|riscv64 | Tier 4 | Tier 4 | N/A | N/A | Tier 4 | Tier 4 |
|
2017-10-06 09:07:22 -07:00
|
|
|
|
2016-11-23 23:44:03 -08:00
|
|
|
## Community
|
|
|
|
|
2018-07-21 20:26:52 -07:00
|
|
|
* IRC: `#zig` on Freenode ([Channel Logs](https://irclog.whitequark.org/zig/)).
|
2016-11-23 23:44:03 -08:00
|
|
|
* Reddit: [/r/zig](https://www.reddit.com/r/zig)
|
2018-11-16 07:05:52 -08:00
|
|
|
* Email list: [~andrewrk/ziglang@lists.sr.ht](https://lists.sr.ht/%7Eandrewrk/ziglang)
|
2016-11-23 23:44:03 -08:00
|
|
|
|
2015-12-06 20:55:28 -08:00
|
|
|
## Building
|
|
|
|
|
2018-11-06 06:55:54 -08:00
|
|
|
[![Build Status](https://dev.azure.com/ziglang/zig/_apis/build/status/ziglang.zig?branchName=master)](https://dev.azure.com/ziglang/zig/_build/latest?definitionId=1&branchName=master)
|
2017-04-21 08:06:15 -07:00
|
|
|
|
2018-11-01 12:21:41 -07:00
|
|
|
Note that you can
|
|
|
|
[download a binary of master branch](https://ziglang.org/download/#release-master).
|
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
### Stage 1: Build Zig from C++ Source Code
|
2016-01-25 20:56:29 -08:00
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
#### Dependencies
|
2016-09-05 13:36:21 -07:00
|
|
|
|
2017-09-25 09:51:26 -07:00
|
|
|
##### POSIX
|
|
|
|
|
2016-02-12 13:07:12 -08:00
|
|
|
* cmake >= 2.8.5
|
2018-01-15 19:17:22 -08:00
|
|
|
* gcc >= 5.0.0 or clang >= 3.6.0
|
2018-03-22 12:32:47 -07:00
|
|
|
* LLVM, Clang, LLD development libraries == 7.x, compiled with the same gcc or clang version above
|
2016-09-05 13:36:21 -07:00
|
|
|
|
2017-09-25 09:51:26 -07:00
|
|
|
##### Windows
|
|
|
|
|
2018-01-15 19:17:22 -08:00
|
|
|
* cmake >= 2.8.5
|
2018-11-01 12:21:41 -07:00
|
|
|
* Microsoft Visual Studio 2017
|
2018-03-22 12:32:47 -07:00
|
|
|
* LLVM, Clang, LLD development libraries == 7.x, compiled with the same MSVC version above
|
2017-09-25 09:51:26 -07:00
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
#### Instructions
|
2015-12-10 14:34:38 -08:00
|
|
|
|
2018-01-15 19:17:22 -08:00
|
|
|
##### POSIX
|
|
|
|
|
2015-12-06 20:55:28 -08:00
|
|
|
```
|
|
|
|
mkdir build
|
|
|
|
cd build
|
2018-04-10 17:57:37 -07:00
|
|
|
cmake ..
|
2015-12-06 20:55:28 -08:00
|
|
|
make
|
2015-12-10 14:34:38 -08:00
|
|
|
make install
|
2018-04-10 17:57:37 -07:00
|
|
|
bin/zig build --build-file ../build.zig test
|
2015-12-06 20:55:28 -08:00
|
|
|
```
|
2015-12-10 14:34:38 -08:00
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
##### MacOS
|
2017-09-18 07:47:37 -07:00
|
|
|
|
|
|
|
```
|
2018-03-22 12:32:47 -07:00
|
|
|
brew install cmake llvm@7
|
|
|
|
brew outdated llvm@7 || brew upgrade llvm@7
|
2017-09-18 07:47:37 -07:00
|
|
|
mkdir build
|
|
|
|
cd build
|
2018-04-11 15:27:06 -07:00
|
|
|
cmake .. -DCMAKE_PREFIX_PATH=/usr/local/opt/llvm@7/
|
2017-09-18 07:47:37 -07:00
|
|
|
make install
|
2018-04-10 17:57:37 -07:00
|
|
|
bin/zig build --build-file ../build.zig test
|
2017-09-18 07:47:37 -07:00
|
|
|
```
|
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
##### Windows
|
2017-10-10 15:04:02 -07:00
|
|
|
|
2018-05-24 18:27:44 -07:00
|
|
|
See https://github.com/ziglang/zig/wiki/Building-Zig-on-Windows
|
2017-10-10 15:04:02 -07:00
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
### Stage 2: Build Self-Hosted Zig from Zig Source Code
|
2015-12-10 14:34:38 -08:00
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
*Note: Stage 2 compiler is not complete. Beta users of Zig should use the
|
|
|
|
Stage 1 compiler for now.*
|
|
|
|
|
2018-12-18 12:55:00 -08:00
|
|
|
Dependencies are the same as Stage 1, except now you can use stage 1 to compile
|
|
|
|
Zig code.
|
2015-12-15 12:06:42 -08:00
|
|
|
|
2015-12-10 14:34:38 -08:00
|
|
|
```
|
2017-12-22 21:29:39 -08:00
|
|
|
bin/zig build --build-file ../build.zig --prefix $(pwd)/stage2 install
|
|
|
|
```
|
|
|
|
|
2017-12-26 16:44:08 -08:00
|
|
|
This produces `./stage2/bin/zig` which can be used for testing and development.
|
|
|
|
Once it is feature complete, it will be used to build stage 3 - the final compiler
|
|
|
|
binary.
|
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
### Stage 3: Rebuild Self-Hosted Zig Using the Self-Hosted Compiler
|
|
|
|
|
2018-05-20 18:59:20 -07:00
|
|
|
*Note: Stage 2 compiler is not yet able to build Stage 3. Building Stage 3 is
|
|
|
|
not yet supported.*
|
|
|
|
|
2018-12-18 12:55:00 -08:00
|
|
|
Once the self-hosted compiler can build itself, this will be the actual
|
|
|
|
compiler binary that we will install to the system. Until then, users should
|
|
|
|
use stage 1.
|
|
|
|
|
2017-12-22 21:29:39 -08:00
|
|
|
#### Debug / Development Build
|
|
|
|
|
|
|
|
```
|
|
|
|
./stage2/bin/zig build --build-file ../build.zig --prefix $(pwd)/stage3 install
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Release / Install Build
|
|
|
|
|
|
|
|
```
|
|
|
|
./stage2/bin/zig build --build-file ../build.zig install -Drelease-fast
|
2015-12-10 14:34:38 -08:00
|
|
|
```
|