π Welcome to the Rust Learning Group
π¦π¦π¦ π <- A group of Crabs reading a Book.
This is the Home for the Rust Learning Group - the group will organize meetings, workshops and online streams here and share information about their learnings.
Where can I join the learning group?
Get in touch with the group via the IOTA Discord in the #rust channel. A group member will get in contact with you!
For German speakers, we have the same process in the einfachIOTA Discord. Just write in the #rust channel in the development category.
Why Rust?
Since Coordicide is on the Roadmap, things becoming clearer for the IOTA community: The IOTA Foundation is focusing on Rust, a programming language for Web and IoT.
Rust is a multi-paradigm programming language focused on performance and safety. Itβs developed by Mozilla and backed up with sponsoring by big players like Amazon Web Services (AWS), Google Cloud, and Microsoft Azure. Here is a website with some companies which use Rust in production with different uses cases. These use cases are very diverse, for example, Atlassian use Rust in service for analyzing petabytes of their source code and Cloudflare uses it as a replacement for memory-unsafe languages (particularly C) and is using it in their core edge logic.
How to contribute
Just fork the repo, make your changes and create a pull request. Don't know how it works? No problem, this video explains it:
Video: git & GitHub Tutorial for Beginners #12 - Forking (& Contributing).
π Guide
Beginner Basics
-
Rust in Motion: Video Series with some free videos for the basics. Full Course: $27.99
-
Tensor Programming Rust Playlist Free youtube series (43 videos)
-
rustlings: Small interactive exercises to get you used to reading and writing Rust code!
-
The Rust Programming Language Book: Online book with alot of information and sample projects.
Awesome lists
Awesome list are repositories with a lot of awesome resources as links about their topic.
Awesome Rust A curated list of Rust code and resources.
rust-learning A bunch of links to blog posts, articles, videos, etc for learning Rust.
Awesome Rust & IOTA This list contains everything Rust and IOTA related.
πΆ Awesome Rust & IOTA
This list contains everything Rust and IOTA related.
IOTA Client library
IOTA Nodes
- Bee - framework for IOTA nodes, clients and applications in Rust
- Bee prototype
- chronicle.rs - The official IOTA permanode solution and runtime framework
- Videos
IOTA Streams
- IOTA Streams, a framework for cryptographic protocols called Applications.
- iota-channels-lite - A narrow high level API for IOTA streams with Tangle as transport
- Videos
Experience initiatives
This lists holds all IOTA Initiative which includes Rust.
- IOTA Experience Team - Headquarter
- IOTA Bee Initiative
- IOTA Permanode Initiative
- IOTA Libraries Initiative
- IOTA Streams Initiative
A Mental Checklist of Rust Language Learning Outcomes
Starting out with Rust? We're here for you. π
In addition to πΆ Awesome Rust & IOTA, feel free to use this as reference to track your learning outcomes! π¦
Find a good resource on any topics below, or want to add? Share the love and contribute by turning a topic into a URL link. Don't forget to make a PR!
Good resources are/have:
- Videos or Articles
- Clear & Concise instructions and explanations
- Topic coverage: Mutually Exclusive, Collectively Exhaustive
Introduction
- Installing and configuring Rust. [ MacOS ][ Windows ][ Ubuntu ]
- Configuring Rust with your IDE.
- Setting up Cargo, the Rust package manager.
Types & Variables
- Core Data Types
- Operators
- Scope & Shadowing
- Declaring & Using Constants
- Stacks & Heaps
Control Flow
- If Statements
- While and Loop
- For Loops
- Match Statements
Data Structures
- Structs
- Enums
- Unions
- OptionT, if let, while let
- Arrays
- Vectors
- Slices
- Strings vs &str in Rust
- Tuples
- Pattern Matching
- Generics
Functions
- Functions & Function Arguments
- Methods
- Closures
- High-order functions
Traits
- Traits basics
- Operator Overloading
- Static Dispatches
- Dynamic Dispatches
Lifetimes & Memory in Rust
- Ownership
- Borrowing
- Lifetimes
- Reference Counted Variables
- Atomic Reference-counted Variables
- Mutexes & Thread-safe mutability
Crates, Modules, Testing & Documenting
- Consuming Crates
- Building Modules & Crates
- Testing
- Commenting & Documentation
π Guide
Types & Variables
Core Data Types
Integer
fn main() { let integer = 42; println!("{}", integer); let integer2: u32 = "42".parse().expect("Not a number!"); println!("{}", integer2); }
Floating-Point
fn main() { let float = 42.0; // f64 println!("{}", float); let float2: f32 = 4.2; // f32 println!("{}", float2); }
- Operators
- Scope & Shadowing
- Declaring & Using Constants
- Stacks & Heaps
π’ News
You can read the latest news on our Medium Blog.
- IOTA Foundationβs Bee Team Starts Weekly Live Rust Coding Session
- Getting Started with IOTA and WebAssembly(WASM)
- Itβs WASM-Time! WebAssembly with Rust β the Next Big Thing?
- #1 Rust on First Place of the Stack Overflow Developer Survey 2020
- A Rust Learning Group π¦π¦π¦ π
π― Goals
Goals should resutl in a tutorial, where people can step by step though the process. But first - learn and reach a goal!
General Goals
normal rust projects
Internet of Things / Embedded
- Run Rust Code on A ESP32
- Run Rust Code on A ESP8266
- Add your goal
Backend
- Auth Server
- Simple WASM Registry
- Add your goal
WASM
- Add your goal
Fullstack Applications
- Add your goal
CLI Tools
- Simple CLI Tool which can login to a server
IOTA Goals
Goals which includes IOTA projects or the Tangle.
Internet of Things / Embedded
- Bring an IOTA Identity to an ESP32
- Bring an IOTA Identity to an ESP8266
- ESP32 IOTA Wallet
- Add your goal
Backend
- Web Spammer for IOTA Network Spamtests
- Add your goal
- HTTP Wallet Microservice
WASM
- WASM / WASI IOTA Wallet
- Add your goal
Fullstack Applications
- IOTA Stream Explorer
- IOTA Chrysalis Faucet
- Add your goal
Tutorials
The Learning Group create new tutorials to improve the learning experience.
Tutorials have three difficuties:
- Level 0 - Beginner
- Level 1 - Advanced
- Level 2 - Expert
Beginner
This tutorials are for people. which has 0 expirence with Rust nor programming.
Advanced
For developers, which has some expirence with Rust.
Expert
This level is for passionate and professional Rust developers.
Beginner
This tutorials are for people. which has 0 expirence with Rust nor programming.
To the Moon - Setup an IOTA.rs with Rocket
Short Description: Build a small web backend wich returns the current balance of an IOTA address.
Live Demo: here.
Link to Code:
Using:
Introduction
Rocket Rocket is a web framework for Rust that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety.
iota.rs Rust library to interact with the Tangle through IOTA Nodes.
With combination of these two libraries we can build a an endpont of an Web Backend Application, which returns the current value of an IOTA address.
Instructions
Create a new Rust application.
cargo new rocket-iota-demo --bin
Install Heroku buildpack for rust.
heroku buildpacks:set emk/rust
Set the Rocket environment to production.
heroku config:set ROCKET_ENV=production
π Members
This is the list of all Members and their contact information. The list is sorted alphabetically by GitHub accounts.
- GitHub Account | Email | Discord Handle
NewBees
NewBees are new to Rust and help each other by problems.
- huhn511 | huhn@einfachIOTA.de | huhn#0511
- hype08 | hype08
- Lazylefty1 | oezguer.alkan@gmx.ch | lazylefty#8799
- Karuma303 | Ζenny#9251
- meo-rust | Meo#1494
- Thoralf-M | Thoralf#3558
- vanbak | vanbak#7849
π Mentors
Mentors are familiar with Rust and help NewBees by Problems, which they can't find out together.
Daniel Thompson-Yvetot (nothingismagick )
- Salutation: he/him
- Contact:
- Email (daniel.yvetot@iota.org)
- Discord: nothingismagick#9835
- Spoken Languages: English, German, French
- Topics: Binary Reversing and Security Tooling Open Source, Communities, Licensing Testing Creative Coding Video, Audio Talking about opinions
- Read Introduction
Daniel Thompson-Yvetot (nothingismagick )
- Salutation: he/him
- Contact:
- Email (daniel.yvetot@iota.org)
- Discord: nothingismagick#9835
- Spoken Languages: English, German, French
- Topics: Binary Reversing and Security Tooling Open Source, Communities, Licensing Testing Creative Coding Video, Audio Talking about opinions
Introduction
Daniel works at the IOTA Foundation as Senior Architect in the Engineering department. In this role, Daniel is focused on hardening the security posture of the IOTA ecosystem and designing the next generation of wallets. His main project is an advanced system for protecting private keys and seeds.
He is also a champion for open source and contributes to a number of projects, most notably as core-member of the open source project Tauri, which is a framework for building smaller, faster and more secure native applications using Rust and Webtech.
When and how did you learn Rust?
I started learning Rust about a year ago while working on Tauri. I followed some video tutorials, completed the rustlings course and have the amazing opportunity to work with professionals.
What is currently fascinating you on Rust?
Using rust as a single source of code truth in order to make its artifacts / libraries consumable by any other programming language.
What would you do better - if you had to learn Rust again?
Spend more time learning about unsafe rust. Itβs really powerful and not as scary as it sounds. Still dangerous, but I wouldnβt have just merely ignored it from the beginning.