├── .gitignore ├── LICENSE.md ├── README.md ├── samples ├── README.md ├── docker-dev │ ├── docker-compose.yml │ └── dockerfile └── docker-prod │ ├── docker-compose.yml │ └── dockerfile └── slides └── Rust.pptx /.gitignore: -------------------------------------------------------------------------------- 1 | rust-code-examples/target -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2012-2022 Adrien Gras 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust🦀, le langage des 10 prochaines années 2 | *Edition 2022 - Adrien Gras* 3 | 4 | ## Concept 5 | 6 | Cette présentation se déroule dans le cadre du DevFest organisé par Developers Group Dijon le 2 Décembre 2022. 7 | 8 | La présentation a pour but de présenter rapidement le langage Rust, ainsi que ses utilisations possibles, ses pours et ses contres, et un panel d'ouverture sur ce que pourrait devenir le langage dans les 10 prochaines années. 9 | 10 | ## Au programme 11 | 12 | * Présentation personnelle 13 | * Présentation de Rust 14 | * Installation, premier programme 15 | * Déploiement, packaging 16 | * Rust, on en fait quoi ? 17 | * Les performances 18 | * En résumé 19 | * 🎁 20 | 21 | Et voici les slides : [Lien vers la présentation](./slides/Rust.pptx) 22 | 23 | ## Les ressources 24 | 25 | Vous pourrez trouver dans cette section quelques ressources utiles pour commencer Rust ou appronfondir vos connaissances. 26 | 27 | ### Installer Rust 28 | 29 | [Installation Rust sur toutes plateformes](https://doc.rust-lang.org/book/ch01-01-installation.html) 30 | 31 | ### Configurer son IDE 32 | 33 | Après avoir utilisé plusieurs IDE pour créer du code Rust, il s'avère que VSCode est le plus adapté et dispose du meilleur pack d'outils pour écrire efficacement du Rust. 34 | 35 | Je vous recommande les extensions VS suivantes pour être efficace : 36 | 37 | * [Rust Analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) - Code completion, imports, goto, références, documentation au survol, etc. 38 | * [Crates](https://marketplace.visualstudio.com/items?itemName=serayuzgur.crates) - Auto-complétion des fichiers Cargo depuis la base de paquets crates.io. 39 | * [Code LLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) - Breakpoints avancés, intégration du débugger au code, etc. 40 | * [Better TOML](https://marketplace.visualstudio.com/items?itemName=bungcip.better-toml) - Synthax highlight et auto-complétion des fichiers TOML. 41 | * [Error lens (optionnel)](https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens) - Permet d'avoir les erreurs de compilation en bout de ligne de code en place des simples sous-lignages jaunes et rouges. 42 | 43 | Vous trouverez l'installation de ces extensions et leurs configurations dans [cette vidéo de Let's Get Rusty - IDE Setup For Rust Development](https://youtu.be/x_iZEK6Rww4) 44 | 45 | ### Apprendre Rust 46 | 47 | Voici un petit parcours pour apprendre à votre rythme à utiliser Rust et créer des applications : 48 | 49 | 1. [Le cookbook](https://jimskapt.github.io/rust-book-fr/) - Le cookbook pour commencer à apprendre et utiliser Rust 📙. 50 | 2. [Rust by examples](https://doc.rust-lang.org/rust-by-example/) - Des exemples concrêts pour comprendre Rust 🚀. 51 | 3. [Rustlings](https://github.com/rust-lang/rustlings) - Des exercices intéractifs pour apprendre Rust ⏩. 52 | 4. [Learn rust](https://plugins.jetbrains.com/plugin/16631-learn-rust) - Un plugin JetBrains vous permettrant d'apprendre Rust de manière dynamique 🎮. 53 | 54 | Alternativement, Google vient de sotir un programme en 4 jours pour maitriser les bases de Rust, vous pouvez le trouver ici : [Comprehensive Rust 🦀](https://google.github.io/comprehensive-rust/) 55 | 56 | ### Des vidéos pour comprendre Rust 57 | 58 | * [Let's Get Rusty - The rust lang book](https://youtube.com/playlist?list=PLai5B987bZ9CoVR-QEIN9foz4QCJ0H2Y8) - playlist qui suit et explique le Rust cookbook. 59 | * [No Boilerplate - Rust makes you feel like a GENIUS](https://youtu.be/0rJ94rbdteE) - vidéo qui permet de comprendre facilement le concept de "borrow" 60 | * [Code to the moon - Rust Demystified 🪄 Simplifying The Toughest Parts](https://youtu.be/TJTDTyNdJdY) - vidéo d'explication sur les concepts complexes à aborder pour un nouveau développeur 61 | * [Code to the moon - Rust's Alien Data Types 👽 Box, Rc, Arc](https://youtu.be/CTTiaOo4cbY) - explication des types de smart-pointers 62 | 63 | ### Quelques librairies utiles 64 | 65 | * [Clap](https://crates.io/crates/clap) pour créer des CLI facilement. 66 | * [Serde](https://serde.rs/) pour la manipulation de JSON. 67 | * [Rocket](https://rocket.rs/) comme framework web. *(équivalent Symfony/Laravel, Django, etc.)* 68 | * [Actix](https://actix.rs/) pour créer un serveur web rapidement. *(Equivalent expressJS)* 69 | * [Diesel](https://diesel.rs/) comme ORM SQL. *(Equivalent Doctrine, Sequelize, etc.)* 70 | * [sqlx](https://github.com/launchbadge/sqlx) pour intéragir plus simplement avec une base de données. 71 | * [Rettle](https://docs.rs/rettle/latest/rettle/) L'ETL simple et performant. 72 | * [yew](https://yew.rs/) pour un frontend moderne en Rust *(Equivalent React)* 73 | * [Rust + WASM](https://rustwasm.github.io/docs/book/) ou WASM pour intégrer simplement Rust et Javascript. 74 | * [TauRi](https://tauri.app/) pour construire des apps hybrides *(Equivalent Electron)* 75 | * [Iced.rs](https://book.iced.rs/) pour construire des app types "client lourd". 76 | * [Bevy](https://bevyengine.org/) comme moteur de jeu-vidéo. 77 | 78 | ### Des conteneurs docker prêts à l'emploi 79 | 80 | Vous pourrez trouver mes conteneurs docker prêt à l'emploi dans le dossier [samples](./samples/README.md). 81 | 82 | ### Quelques autres médias 83 | 84 | * [Fireship - Rust in 100 seconds](https://youtu.be/5C_HPTJg5ek) 85 | * [NoBoilerplate - Rust talks](https://youtube.com/playlist?list=PLZaoyhMXgBzoM9bfb5pyUOT3zjnaDdSEP) 86 | * [Fireship - Tauri in 100 seconds](https://youtu.be/-X8evddpu7M) 87 | * [Fireship - WASM in 100 seconds](https://youtu.be/cbB3QEwWMlA) 88 | * [kostya - benchmarks](https://github.com/kostya/benchmarks#measurements) 89 | * [Vercel - benchmarks](https://programming-language-benchmarks.vercel.app/go-vs-rust) 90 | 91 | ## Licence 92 | 93 | Les sources de ce repository sont sous [licence MIT](./LICENSE.md). 94 | 95 | La présentation et son contenu peuvent être utilisés de manière libre, à la seule condition de citer la source et l'auteur original. 96 | -------------------------------------------------------------------------------- /samples/README.md: -------------------------------------------------------------------------------- 1 | # Samples 2 | 3 | ## Conteneurs docker 4 | 5 | Vous pouvez trouver ici deux conteneurs docker prêt à être utilisés : 6 | 7 | * [docker-dev](./docker-dev/) est un conteneur utilisable en développement. 8 | * [docker-prod](./docker-prod/) est un conteneur à deux stages pour déployer une application en production. 9 | 10 | ### Docker-dev 11 | 12 | Ce conteneur lance juste un environement Rust prêt pour le développement. Copiez simplement les fichiers `docker-compose.yml` et `dockerfile` à la racine de votre projet Rust. 13 | 14 | Pour le lancer : 15 | ```bash 16 | docker-compose up --build -d 17 | ``` 18 | 19 | Puis pour s'y connecter : 20 | ```bash 21 | docker-compose exec rust bash 22 | ``` 23 | 24 | Vous pourrez en suite lancer toutes vos commandes `cargo`. 25 | 26 | > **Note :** N'hésitez pas à modifier le fichier `dockerfile` pour ajouter vos propres outils au build de l'image. 27 | 28 | ### Docker-prod 29 | 30 | Ce conteneur va se construire en 2 étapes : 31 | - Un builder qui va build l'exécutable de votre application 32 | - Un runner qui sera plus léger et devra simplement exécuter votre application. C'est cette image que vous pouvez exporter sur une registry par exemple. 33 | 34 | Comme le conteneur précédent, vous n'avez qu'à copier les fichiers `docker-compose.yml` et `dockerfile` à la racine de votre projet Rust. 35 | 36 | Pour build l'image : 37 | ```bash 38 | docker-compose build 39 | ``` 40 | 41 | Pour lancer votre app en mode "production" : 42 | ```bash 43 | docker-compose up --build -d 44 | ``` -------------------------------------------------------------------------------- /samples/docker-dev/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | rust: 5 | build: 6 | dockerfile: dockerfile 7 | image: rust:latest 8 | container_name: rust-runner 9 | stdin_open: true 10 | tty: true 11 | volumes: 12 | - .:/srv/app 13 | # you can add ports, tags, and other settings after this 14 | # ports: 15 | # - "8080:80" 16 | -------------------------------------------------------------------------------- /samples/docker-dev/dockerfile: -------------------------------------------------------------------------------- 1 | #--------------------------------------------------------------------------------- 2 | # Build stage 3 | #--------------------------------------------------------------------------------- 4 | FROM rust:latest 5 | 6 | WORKDIR /srv/app 7 | 8 | RUN rustup component add clippy 9 | 10 | # You can add more tools here to suit your needs 11 | 12 | CMD [ "sleep", "86400" ] 13 | #--------------------------------------------------------------------------------- 14 | -------------------------------------------------------------------------------- /samples/docker-prod/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | 3 | services: 4 | rust: 5 | build: 6 | dockerfile: dockerfile 7 | restart: "unless-stopped" 8 | image: rust-prod-runner 9 | container_name: rust-prod-runner -------------------------------------------------------------------------------- /samples/docker-prod/dockerfile: -------------------------------------------------------------------------------- 1 | #--------------------------------------------------------------------------------- 2 | # Build stage 3 | #--------------------------------------------------------------------------------- 4 | FROM rust:latest as builder 5 | WORKDIR /usr/src/app 6 | COPY . . 7 | RUN sed -i "s/name = .*/name = \"app\"/g" Cargo.toml 8 | RUN cargo build --release --bin app 9 | #--------------------------------------------------------------------------------- 10 | 11 | #--------------------------------------------------------------------------------- 12 | # Runtime stage 13 | #--------------------------------------------------------------------------------- 14 | FROM debian:buster-slim as runtime 15 | 16 | # Use this to install extra dependencies needed to run your app. 17 | # RUN apt-get update && \ 18 | # apt-get install -y extra-runtime-dependencies && \ 19 | # rm -rf /var/lib/apt/lists/* 20 | 21 | COPY --from=builder /usr/src/app/target/release/app /usr/local/bin/app 22 | 23 | CMD ["/usr/local/bin/app"] 24 | #--------------------------------------------------------------------------------- -------------------------------------------------------------------------------- /slides/Rust.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdrienGras/presentation-rust-2022/5f69ca5c4f2cf5d194bfed3aed71f83940354c38/slides/Rust.pptx --------------------------------------------------------------------------------