2015-08-05 23:23:15 +01:00
|
|
|
# zig lang
|
2015-08-06 01:44:05 +01:00
|
|
|
|
2015-11-02 05:21:33 +00:00
|
|
|
An experiment in writing a low-level programming language with the intent to
|
|
|
|
replace C. Zig intends to be a small language, yet powerful enough to write
|
2015-12-07 04:55:28 +00:00
|
|
|
optimal, readable, safe, and concise code to solve any computing problem.
|
|
|
|
|
|
|
|
Porting a C project to Zig should be a pleasant experience - every C feature
|
|
|
|
needs a corresponding Zig feature which solves the problem equivalently or
|
|
|
|
better.
|
|
|
|
|
|
|
|
Zig is not afraid to roll the major version number of the language if it
|
|
|
|
improves simplicity, fixes poor design decisions, or adds a new feature which
|
|
|
|
compromises backward compatibility.
|
2015-08-06 01:44:05 +01:00
|
|
|
|
2015-11-02 05:21:33 +00:00
|
|
|
## Goals
|
|
|
|
|
|
|
|
* Completely compatible with C libraries with no wrapper necessary.
|
2015-12-07 04:55:28 +00: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-04 05:31:27 +00:00
|
|
|
* Do not depend on libc unless explicitly imported.
|
2015-12-07 04:55:28 +00:00
|
|
|
* Provide standard library which competes with the C standard library and is
|
|
|
|
always compiled against statically in source form.
|
|
|
|
* Generics so that one can write efficient data structures that work for any
|
|
|
|
data type.
|
|
|
|
* Ability to run arbitrary code at compile time and generate code.
|
|
|
|
* A type which represents an error and has some convenience syntax with
|
|
|
|
regards to resources.
|
|
|
|
* Defer statement.
|
|
|
|
* Memory zeroed by default, unless you explicitly ask for uninitialized memory.
|
|
|
|
* Eliminate the need for configure, make, cmake, etc.
|
|
|
|
* Eliminate the need for header files (when using zig internally).
|
2015-11-05 00:15:46 +00:00
|
|
|
* Tagged union enum type.
|
2015-11-02 05:21:33 +00:00
|
|
|
* Resilient to parsing errors to make IDE integration work well.
|
|
|
|
* Source code is UTF-8.
|
2015-11-07 05:11:47 +00:00
|
|
|
* Ability to mark functions as test and automatically run them in test mode.
|
2015-11-27 22:46:06 +00:00
|
|
|
This mode should automatically provide test coverage.
|
2015-12-07 04:55:28 +00:00
|
|
|
* Friendly toward package maintainers.
|
|
|
|
* Ability to declare dependencies as Git URLS with commit locking (can
|
|
|
|
provide a tag or sha1).
|
|
|
|
* Include documentation generator.
|
|
|
|
* Shebang line OK so language can be used for "scripting" as well.
|
2015-11-02 05:21:33 +00:00
|
|
|
|
2015-12-07 04:55:28 +00:00
|
|
|
### Current Status
|
2015-11-28 07:40:54 +00:00
|
|
|
|
2015-12-07 04:55:28 +00:00
|
|
|
* Core language features are lacking such as structs, enums, loops.
|
2015-12-11 11:37:23 +00:00
|
|
|
* Only Linux x86_64 is supported.
|
2015-12-07 05:12:49 +00:00
|
|
|
* Only building for the native target is supported.
|
2015-12-07 04:55:28 +00:00
|
|
|
* Have a look in the examples/ folder to see some code examples.
|
|
|
|
* Optimized machine code that Zig produces is indistinguishable from
|
|
|
|
optimized machine code produced from equivalent C program.
|
2015-12-07 05:12:49 +00:00
|
|
|
* Zig can generate dynamic libraries, executables, object files, and C
|
|
|
|
header files.
|
|
|
|
* The binaries produced by Zig have complete debugging information so you can,
|
|
|
|
for example, use GDB to debug your software.
|
2015-12-11 11:37:23 +00:00
|
|
|
* Inline assembly is supported.
|
2015-11-28 07:40:54 +00:00
|
|
|
|
2015-12-07 04:55:28 +00:00
|
|
|
## Building
|
|
|
|
|
2015-12-10 22:34:38 +00:00
|
|
|
### Debug / Development Build
|
|
|
|
|
2015-12-07 04:55:28 +00:00
|
|
|
```
|
|
|
|
mkdir build
|
|
|
|
cd build
|
2015-12-10 22:34:38 +00:00
|
|
|
cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)
|
2015-12-07 04:55:28 +00:00
|
|
|
make
|
2015-12-10 22:34:38 +00:00
|
|
|
make install
|
2015-12-07 04:55:28 +00:00
|
|
|
./run_tests
|
|
|
|
```
|
2015-12-10 22:34:38 +00:00
|
|
|
|
|
|
|
### Release / Install Build
|
|
|
|
|
|
|
|
```
|
|
|
|
mkdir build
|
|
|
|
cd build
|
|
|
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
|
|
|
make
|
|
|
|
sudo make install
|
|
|
|
```
|