All Projects → ratfactor → Ziglings

ratfactor / Ziglings

Licence: mit
Learn the Zig programming language by fixing tiny broken programs.

Projects that are alternatives of or similar to Ziglings

Py regular expressions
Learn Python Regular Expressions step by step from beginner to advanced levels
Stars: ✭ 770 (+8.76%)
Mutual labels:  learning-by-doing, exercises
Javascript Exercises
📚 Collection of JavaScript exercises and coding challenges.
Stars: ✭ 385 (-45.62%)
Mutual labels:  learning-by-doing, exercises
Learn gnugrep ripgrep
Example based guide to mastering GNU grep and ripgrep
Stars: ✭ 204 (-71.19%)
Mutual labels:  learning-by-doing, exercises
Ruby Regexp
Learn Ruby Regexp step by step from beginner to advanced levels with plenty of examples and exercises
Stars: ✭ 79 (-88.84%)
Mutual labels:  exercises, learning-by-doing
Learn4haskell
👩‍🏫 👨‍🏫 Learn Haskell basics in 4 pull requests
Stars: ✭ 448 (-36.72%)
Mutual labels:  learning-by-doing
Full Speed Python
Full Speed Python: a book for self-learners
Stars: ✭ 3,447 (+386.86%)
Mutual labels:  learning-by-doing
Pytorch exercises
Stars: ✭ 304 (-57.06%)
Mutual labels:  exercises
Renderhelp
⚡️ 可编程渲染管线实现,帮助初学者学习渲染
Stars: ✭ 494 (-30.23%)
Mutual labels:  learning-by-doing
Learninggo
Learning Go Book in mmark
Stars: ✭ 438 (-38.14%)
Mutual labels:  exercises
Docker Basiclearning
🐬 Understand Docker step by step. A tutorial repo for beginners 🔥
Stars: ✭ 296 (-58.19%)
Mutual labels:  learning-by-doing
Futurecoder
A platform for beginners to learn programming in Python
Stars: ✭ 363 (-48.73%)
Mutual labels:  learning-by-doing
50 Projects For React And The Static Web
⚛ 50 project ideas to learn by doing complete with project briefs, layout ideas, and resources!
Stars: ✭ 319 (-54.94%)
Mutual labels:  learning-by-doing
Learn Php
🐘 Learn modern PHP
Stars: ✭ 455 (-35.73%)
Mutual labels:  learning-by-doing
Little Javascript Book
Early draft for The Little JavaScript Book
Stars: ✭ 305 (-56.92%)
Mutual labels:  exercises
Learnyoubash
Learn you how to write your first bash script
Stars: ✭ 589 (-16.81%)
Mutual labels:  exercises
Gitstery
A Git Murder Mystery
Stars: ✭ 297 (-58.05%)
Mutual labels:  learning-by-doing
Bartosz Basics Of Haskell
Code and exercises from Bartosz Milewski's Basics of Haskell Tutorial
Stars: ✭ 483 (-31.78%)
Mutual labels:  exercises
Php Interview Exercises
Some exercises to practice whiteboard interview questions in PHP.
Stars: ✭ 351 (-50.42%)
Mutual labels:  exercises
Exercises answers
计算机网络:自顶向下方法 (原书第七版)陈鸣译 课后习题参考答案(中文版+英文版);计算机系统基础(第2版)袁春风 课后习题参考答案;操作系统教程(第5版)费翔林 课后习题参考答案;数据结构(用C++描述)殷人昆)课后习题参考答案;算法设计与分析 黄宇 课后习题参考答案;
Stars: ✭ 332 (-53.11%)
Mutual labels:  exercises
Teaching App Dev Swift
DEPRECATED. Instructor lesson plans that accompany Xcode projects, for guiding in-class experiential learning.
Stars: ✭ 699 (-1.27%)
Mutual labels:  learning-by-doing

Ziglings

Welcome to Ziglings! This project contains a series of tiny broken programs. By fixing them, you'll learn how to read and write Zig code.

ziglings

Those tiny broken programs need your help! (You'll also save the planet from evil aliens and help some friendly elephants stick together, which is very sweet of you.)

This project was directly inspired by the brilliant and fun rustlings project for the Rust language. Indirect inspiration comes from Ruby Koans and the Little LISPer/Little Schemer series of books.

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:

Also, the Zig community is incredibly friendly and helpful!

Getting Started

Install a development build of the Zig compiler. (See the "master" section of the downloads page.)

Verify the installation and build number of zig like so:

$ zig version
0.8.0-dev.1065+xxxxxxxxx

Clone this repository with Git:

$ git clone https://github.com/ratfactor/ziglings
$ cd ziglings

Then run zig build and follow the instructions to begin!

$ zig build

A Note About Versions

The Zig language is under very active development. In order to be current, Ziglings tracks development builds of the Zig compiler rather than versioned release builds. The last stable release was 0.7.1, but Ziglings needs a dev build with pre-release version "0.8.0" and a build number at least as high as that shown in the example version check above.

It is likely that you'll download a build which is greater than the minimum.

Once you have a build of the Zig compiler that works with Ziglings, they'll continue to work together. But keep in mind that if you update one, you may need to also update the other.

Advanced Usage

It can be handy to check just a single exercise or start from a single exercise:

zig build 19
zig build 19_start

You can also run without checking for correctness:

zig build 19_test

Or skip the build system entirely and interact directly with the compiler if you're into that sort of thing:

zig run exercises/001_hello.zig

Calling all wizards: To prepare an executable for debugging, install it to zig-cache/bin with:

zig build 19_install

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

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
  • [x] Structs
  • [x] Pointers
  • [x] Optionals
  • [x] Struct methods
  • [x] Slices
  • [x] Many-item pointers
  • [x] Unions
  • [ ] Numeric types (integers, floats)
  • [ ] Labelled blocks and loops
  • [ ] Loops as expressions
  • [ ] Comptime
  • [ ] Inline loops (how to DEMO this?)
  • [ ] Anonymous structs
  • [ ] Sentinel termination
  • [ ] Vectors
  • [ ] Imports
  • [ ] Allocators
  • [ ] Arraylist
  • [ ] Filesystem
  • [ ] Readers and Writers
  • [ ] Formatting
  • [ ] JSON
  • [ ] Random Numbers
  • [ ] Crypto
  • [ ] Threads
  • [ ] Hash Maps
  • [ ] Stacks
  • [ ] Sorting
  • [ ] Iterators
  • [ ] Formatting specifiers
  • [ ] Advanced Formatting
  • [ ] Suspend / Resume
  • [ ] Async / Await
  • [ ] Nosuspend
  • [ ] Async Frames, Suspend Blocks

The initial topics for these exercises were unabashedly cribbed from ziglearn.org. I've since moved things around in an order that I think best lets each topic build upon each other.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].