-
Notifications
You must be signed in to change notification settings - Fork 68
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
branch Zig merge on main #97
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,261 @@ | ||
# Workshop 32 - Introduction to Zig | ||
|
||
Welcome to this introductory workshop on Zig! Zig is a modern programming language that emphasizes robustness, performance and clarity. Today, you'll learn : | ||
✔️ how to install Zig | ||
✔️ create your first project | ||
✔️ discover the language's key concepts by creating a few projects | ||
|
||
## Introduction | ||
|
||
Zig is a general-purpose programming language focused on robustness, performance, and simplicity. It offers manual memory management, safety features, built-in cross-compilation, and seamless C interoperability, making it ideal for system programming and high-performance applications. | ||
|
||
### Prerequisites | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can remove the Prerequisites, it's not really useful. You can learn a new language even if you don't know C or other programming languages. About the computer with internet access, if their are seeing this it means they are reading it with internet, they can also clone the repo but that's more rare 🤷🏻♂️ Instead you can see what was done for the rust workshop nb 13, they advised people to do the Tour of rust, you could do the same for Zig. |
||
|
||
- Basic programming skills (C, C++, or any other language) | ||
- A computer with Internet access | ||
|
||
## Step 0 - SETUP | ||
|
||
All the required information to install dependencies can be found in [SETUP.md](./SETUP.md). | ||
|
||
> 💡 We recommend you to follow the [Getting started](https://ziglang.org/learn/getting-started/) for this workshop. | ||
|
||
## Step 1 - Hello World! in Zig | ||
|
||
> ❗ We strongly advise you to use the documentation provided for this exercise. | ||
|
||
📑 Description: | ||
|
||
For the first exercise, we simply ask you to write `Hello world!` in your terminal when you run your program. | ||
|
||
📌 Tasks: | ||
|
||
create a file `main.zig` in a folder called `src` with your logic to print the "hello world" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Create instead of create. You can add this, it makes the instructions more clear even if they are simple :) and if the architecture becomes harder to understand they can use it to see what changed from the beginning to the end.
|
||
|
||
📚 Documentation: | ||
|
||
> 💡 Zig file has `zig` extension. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's pretty obvious that it has the zig extension because you asked the user to create a main.zig file. |
||
> 💡 Now, that you have created a file `main.zig`, you can use other files. To use them in your `main.zig` you have to integrate the module ([read more](https://stackoverflow.com/questions/71186556/how-do-i-include-one-zig-file-from-another-zig-file)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rephrase "you can use other files", like witch type of files, json files, db files, ... When you write something you need to be very explicit even if you think that they will understand. You can say something like, now if you want to use the code that you wrote in another files you can use modueles and then add the link, try to add the more explicit senteces that you can. |
||
|
||
- [Build System](https://ziglang.org/learn/build-system/) | ||
- [Doc.Zig](https://ziglang.org/documentation/master/) | ||
|
||
✔️ Validation: | ||
|
||
you should see the following : | ||
|
||
```sh | ||
Hello, World! | ||
``` | ||
|
||
## Step 2 - Palindrome? | ||
|
||
> ❗ We strongly advise you to use the resources given for this exercise. | ||
|
||
📑 Description: | ||
|
||
For the second exercise, you have to create a function that takes as parameter a string `word`. | ||
|
||
📌 Tasks: | ||
|
||
Create a file `palindrome.zig` for this new function. | ||
|
||
This function must return true if the word given in parameter is a palindrome and false in the opposite case. | ||
|
||
📚 Documentation: | ||
|
||
-[What is a palindrome ?](https://www.wikiwand.com/en/Palindrome) | ||
-[New function](https://ziglang.org/documentation/master/#Functions) | ||
-[The types in Zig](https://ziglang.org/documentation/master/#Primitive-Types) | ||
-[Control_Structures](https://zig.guide/language-basics/while-loops) | ||
|
||
✔️ Validation: | ||
|
||
When you compile and run palindrome.zig, the output should be: | ||
|
||
```sh | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here you are printing "madam is palindrome: true", you should create an main function with the example so the user can understand how you test it even if it seems that the palindrome function returns a boolean and you print it then in the main function. |
||
madam is palindrome: true | ||
``` | ||
or | ||
|
||
```sh | ||
hello is palindrome: false | ||
``` | ||
|
||
## Step 3 - Fibonacci sequence | ||
|
||
> ❗ We strongly advise you to use the resources given for this exercise. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. By the way you don't need to add this warning everytime, use it one time at the beginning. |
||
|
||
📑 Description: | ||
|
||
For the third exercise, you need to create a function that generates and displays the Fibonacci sequence up to a specified number of elements. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do you think there could be another exercice that the fibonacci? I don't think imlementing the Fibonacci sequence will use Zig features that are useful + this step has already been done in rust workshop, try to not copy the steps and only change the langage, people comming from the rust workshop will change a few keywords and they will finish the step, they learned nothing but just replace keywords from rurst to zig. |
||
|
||
📌 Tasks: | ||
|
||
- Create a file `fibonacci.zig` for this new function. | ||
|
||
For the third exercise, create a function that takes one parameter: | ||
|
||
- A number `max` with type `i32` that represent the number of element to compute. | ||
|
||
- You must now display the sequence of Fibonacci from the number of starts to the `max` value. | ||
|
||
Here is a small example of the beginning of the Fibonacci sequence: | ||
|
||
```shell | ||
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... | ||
``` | ||
|
||
📚 Documentation: | ||
|
||
-[Fibonacci number](https://www.wikiwand.com/en/Fibonacci_number) | ||
-[Match](https://ziglang.org/documentation/master/#Standard-Library-Math-Functions) | ||
-[Vector](https://ziglang.org/documentation/master/#Vectors) | ||
|
||
✔️ Validation: | ||
|
||
Given the Fibonacci sequence (see previous example), if max is 5, the function should output: | ||
|
||
```sh | ||
0, 1, 1, 2, 3 | ||
``` | ||
|
||
## Step 4 - A simple and useful `Calculator` | ||
|
||
> ❗ We strongly advise you to use the resources given for this exercise. | ||
|
||
📑 Description: | ||
|
||
Let's go further now! | ||
|
||
The objective of this fifth exercise is to create a simplifying calculator. | ||
|
||
📌 Tasks: | ||
|
||
- Create a file `calculator.zig` for this new function. | ||
|
||
To do this, you have to make a calculator that can do: | ||
|
||
- `Addition` | ||
- `Multiplication` | ||
- `Division` | ||
- `Subtraction` | ||
|
||
- between two values that must be retrieved one after the other from the user's input. | ||
|
||
> 💡 Pay attention to your error handling ! | ||
|
||
- Display the result of the calculation in your terminal. | ||
|
||
📚 Documentation: | ||
-[Errors](https://ziglang.org/documentation/master/#Errors) | ||
-[Memory](https://zig.guide/standard-library/allocators) | ||
-[ArrayList](https://zig.guide/standard-library/arraylist) | ||
|
||
✔️ Validation: | ||
|
||
You should get something like this : | ||
|
||
```sh | ||
First number: 5 | ||
Operation: + | ||
Second number: 3 | ||
8 | ||
``` | ||
|
||
Here's a typical error handeling example : | ||
|
||
```sh | ||
First number: abc | ||
Operation: + | ||
Second number: 3 | ||
Expected Output: Error message indicating invalid input. | ||
``` | ||
|
||
## Bonuses - TO DO List and C Code translation | ||
|
||
### TO DO List | ||
|
||
📑 Description: | ||
|
||
Now that you're used to the basics, you will do a little project to apply what you've learnt so far. | ||
|
||
📌 Tasks: | ||
|
||
Create a command-line todo list application where you can: | ||
|
||
- Add a new todo | ||
- Delete a todo by ID | ||
- View all todos | ||
|
||
Each todo should have at least three fields: | ||
|
||
- id (auto-incremented) | ||
- name | ||
- description | ||
|
||
> 💡 To easily test your functions during this workshop remember to check the testing tools mentioned above | ||
|
||
📚 Documentation: | ||
|
||
- [New function](https://ziglang.org/documentation/master/#Functions) | ||
- [The types in Zig](https://ziglang.org/documentation/master/#Primitive-Types) | ||
|
||
✔️ Validation: | ||
|
||
```sh | ||
./zig-out/bin/main | ||
|
||
Choose an action: | ||
1. Add Todo | ||
2. Delete Todo | ||
3. View Todos | ||
4. Exit | ||
> 1 | ||
Enter name: Buy groceries | ||
Enter description: Milk, eggs, and bread | ||
Todo added successfully. | ||
``` | ||
|
||
```sh | ||
Choose an action: | ||
5. Add Todo | ||
6. Delete Todo | ||
7. View Todos | ||
8. Exit | ||
> 3 | ||
ID: 1, Name: Buy groceries, Description: Milk, eggs, and bread | ||
Choose an action: | ||
9. Add Todo | ||
10. Delete Todo | ||
11. View Todos | ||
12. Exit | ||
> 4 | ||
``` | ||
|
||
> 💡 Pay attention to your error handling ! | ||
|
||
### Use The C Translation tool | ||
|
||
📑 Description: | ||
|
||
Zig provides the command zig translate-c for automatic translation from C source code. You can try to read the documentation and have fun with the tool. | ||
|
||
📚 Documentation: | ||
|
||
-[Translate-C](https://zig.guide/working-with-c/translate-c) | ||
-[cImport](https://zig.guide/working-with-c/c-import) | ||
-[LinkLibC](https://zig.guide/working-with-c/linking-libc) | ||
|
||
## Conclusion | ||
|
||
Well done ! You've accomplished a lot with the Zig Workshop, and there is so much more to discover. Refer to the official documentation to deep-dive into it. | ||
|
||
Hope you enjoyed the workshop! | ||
|
||
## Authors | ||
|
||
- Elie STROUN | ||
- Pierre LISSOPE | ||
|
||
> 🚀 Follow us on our different social networks, and put a star 🌟 on `PoC's` repositories. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Installing Zig | ||
|
||
## For Fedora | ||
|
||
Since most students use Fedora, installing Zig is very simple. Just open a terminal and run the following command: | ||
|
||
```sh | ||
sudo dnf install zig | ||
``` | ||
|
||
### For other operating systems | ||
|
||
- Visit the official Zig website: ziglang.org. | ||
|
||
### to check installation | ||
|
||
```sh | ||
zig version | ||
``` | ||
|
||
## Initializing a Zig Project | ||
|
||
### Step 1: Create a new project | ||
|
||
To create a new Zig project, open a terminal and navigate to the directory where you wish to create your project. Then run the following command: | ||
|
||
```sh | ||
zig init | ||
``` | ||
|
||
This command will create a basic project structure with the necessary files. | ||
|
||
### Step 2: Explore the project structure | ||
|
||
Once the project has been created, you'll see the following structure: | ||
|
||
```css | ||
. | ||
├── build.zig | ||
├── build.zig.zon | ||
└── src | ||
├── main.zig | ||
└── root.zig | ||
``` | ||
|
||
- build.zig: This file is a build script for your Zig project. | ||
- src/main.zig: This is the entry point for your Zig program. | ||
- src/root.zig: This is a sub-file of example (don't worry if you don't have it). | ||
|
||
### Step 3: Compile and run the project | ||
|
||
To compile your project, run the following command in your project directory: | ||
|
||
```sh | ||
zig build | ||
``` | ||
|
||
After compilation, a binary will be generated in the zig-out/bin folder (it may be called something different depending on the name of your folder). To run this binary, use the following command: | ||
|
||
```sh | ||
./zig-out/bin/main | ||
``` | ||
|
||
You should see the messages: | ||
"All your codebase are belong to us. | ||
Run `zig build test` to run the tests." are displayed, indicating that your project has been correctly configured and compiled. | ||
|
||
### Next step | ||
|
||
Now that your basic project is ready, let's explore the basic concepts of the Zig language and develop a palindrome detection program. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use a capital letter for all new sentences after the ✔️