2020-12-23 12:02:35 -05:00
|
|
|
# ziglings
|
|
|
|
|
|
|
|
Welcome to `ziglings`. This project contains a series of incomplete exercises.
|
|
|
|
By completing the exercises, you learn how to read and write
|
|
|
|
[Zig](https://ziglang.org/)
|
|
|
|
code.
|
|
|
|
|
|
|
|
This project was directly inspired by the brilliant and fun
|
|
|
|
[rustlings](https://github.com/rust-lang/rustlings)
|
|
|
|
project for the [Rust](https://www.rust-lang.org/) language.
|
|
|
|
|
|
|
|
## Getting Started
|
|
|
|
|
|
|
|
_Note: This currently uses a shell (Bash) script to automate the "game". A
|
|
|
|
future update may remove this requirement. See TODO below._
|
|
|
|
|
|
|
|
Install the [master release](https://ziglang.org/download/) of the Zig compiler.
|
|
|
|
|
|
|
|
Verify the installation and version of `zig` like so:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
$ zig version
|
|
|
|
0.7.1+<some hexadecimal string>
|
|
|
|
```
|
|
|
|
|
|
|
|
Clone this repository with Git:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
git clone https://github.com/ratfactor/ziglings
|
|
|
|
cd ziglings
|
|
|
|
```
|
|
|
|
|
|
|
|
Then run the `ziglings` script and follow the instructions to begin!
|
|
|
|
|
|
|
|
```bash
|
|
|
|
./ziglings
|
|
|
|
```
|
|
|
|
|
|
|
|
## Manual Usage
|
|
|
|
|
|
|
|
If you can't (or don't want to) use the script, you can manually verify each
|
2021-01-03 12:21:11 -05:00
|
|
|
exercise with the Zig compiler:
|
2020-12-23 12:02:35 -05:00
|
|
|
|
|
|
|
```bash
|
2021-02-03 16:22:49 -05:00
|
|
|
zig run 01_hello.zig
|
2020-12-23 12:02:35 -05:00
|
|
|
```
|
|
|
|
|
|
|
|
## TODO
|
|
|
|
|
|
|
|
Contributions are very welcome! I'm writing this to teach myself and to create
|
|
|
|
the learning resource I wished for. There will be tons of room for improvement:
|
|
|
|
|
|
|
|
* Wording of explanations
|
|
|
|
* Idiomatic usage of Zig
|
|
|
|
* Additional exercises
|
|
|
|
* Re-write the `ziglings` script using the Zig build system (???)
|
|
|
|
|
|
|
|
Planned exercises:
|
|
|
|
|
2021-01-03 12:21:11 -05:00
|
|
|
* [x] Hello world (main needs to be public)
|
|
|
|
* [x] Importing standard library
|
2021-01-03 18:55:45 -05:00
|
|
|
* [x] Assignment
|
2021-01-03 20:34:26 -05:00
|
|
|
* [x] Arrays
|
2021-01-05 19:26:02 -05:00
|
|
|
* [x] Strings
|
2021-01-08 17:53:22 -05:00
|
|
|
* [x] If
|
2021-01-10 11:46:42 -05:00
|
|
|
* [x] While
|
2021-01-18 19:21:18 -05:00
|
|
|
* [x] For
|
2021-01-22 17:42:03 -05:00
|
|
|
* [x] Functions
|
2021-02-03 19:19:31 -05:00
|
|
|
* [x] Errors (error/try/catch/if-else-err)
|
|
|
|
* [x] Defer (and errdefer)
|
2021-01-31 17:48:34 -05:00
|
|
|
* [x] Switch
|
2021-02-03 19:19:31 -05:00
|
|
|
* [x] Unreachable
|
2020-12-23 12:02:35 -05:00
|
|
|
* [ ] Pointers
|
|
|
|
* [ ] Pointer sized integers
|
|
|
|
* [ ] Multi pointers
|
|
|
|
* [ ] Slices
|
|
|
|
* [ ] Enums
|
|
|
|
* [ ] Structs
|
|
|
|
* [ ] Unions
|
|
|
|
* [ ] Integer rules
|
|
|
|
* [ ] Floats
|
|
|
|
* [ ] Labelled blocks
|
|
|
|
* [ ] Labelled loops
|
|
|
|
* [ ] Loops as expressions
|
|
|
|
* [ ] Optionals
|
|
|
|
* [ ] Comptime
|
|
|
|
* [ ] Inline loops
|
|
|
|
* [ ] Anonymous structs
|
|
|
|
* [ ] Sentinel termination
|
|
|
|
* [ ] Vectors
|
|
|
|
* [ ] Imports
|
|
|
|
|
|
|
|
The initial topics for these exercises were unabashedly cribbed from
|
|
|
|
[ziglearn.org](https://ziglearn.org/).
|