summaryrefslogtreecommitdiffstatshomepage
path: root/README.md
blob: 61d02fb0df6d98a430b80d8f19a28241206e9f01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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.

## Intended Audience

This will probably be difficult if you've _never_ programmed before.
But no specific programming experience is required. And in particular,
you are _not_ expected to have any prior experience with "systems programming"
or a "systems" level language such as C.

Each exercise is self-contained and self-explained. However, you're encouraged
to also check out these Zig language resources for more detail:

* https://ziglearn.org/
* https://ziglang.org/documentation/master/

## 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
exercise with the Zig compiler:

```bash
zig run 01_hello.zig
```

## 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 (or just a Zig application)

Planned exercises:

* [x] Hello world (main needs to be public)
* [x] Importing standard library
* [x] Assignment
* [x] Arrays
* [x] Strings
* [x] If
* [x] While
* [x] For
* [x] Functions
* [x] Errors (error/try/catch/if-else-err)
* [x] Defer (and errdefer)
* [x] Switch
* [x] Unreachable
* [x] Enums
* [ ] Structs
* [ ] Unions
* [ ] Pointers
* [ ] Pointer sized integers
* [ ] Multi pointers
* [ ] Slices
* [ ] 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/). I've since moved things around
in an order that I think best lets each topic build upon each other.