πŸ‘‹ 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

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

IOTA Streams

Experience initiatives

This lists holds all IOTA Initiative which includes Rust.

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.

🎯 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

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.

πŸ‘‘ 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:
  • 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:
  • 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.