{"id":14991948,"url":"https://github.com/instrumentisto/rust-incubator","last_synced_at":"2025-10-25T20:06:44.439Z","repository":{"id":39485720,"uuid":"192924752","full_name":"instrumentisto/rust-incubator","owner":"instrumentisto","description":"Learning Rust step-by-step.","archived":false,"fork":false,"pushed_at":"2024-09-03T13:26:14.000Z","size":2840,"stargazers_count":199,"open_issues_count":0,"forks_count":123,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-03-29T22:07:47.884Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/instrumentisto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-20T13:26:50.000Z","updated_at":"2025-02-15T21:45:56.000Z","dependencies_parsed_at":"2023-02-08T06:46:10.773Z","dependency_job_id":"97ec4d08-777c-4c76-9fcf-99520fc8ecb1","html_url":"https://github.com/instrumentisto/rust-incubator","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instrumentisto%2Frust-incubator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instrumentisto%2Frust-incubator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instrumentisto%2Frust-incubator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/instrumentisto%2Frust-incubator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/instrumentisto","download_url":"https://codeload.github.com/instrumentisto/rust-incubator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411235,"owners_count":20934653,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T15:00:36.833Z","updated_at":"2025-10-25T20:06:44.433Z","avatar_url":"https://github.com/instrumentisto.png","language":"Rust","funding_links":[],"categories":["Summary"],"sub_categories":[],"readme":"Rust Incubator\n==============\n\n\u003e It wasn’t always so clear, but the Rust programming language is fundamentally about _empowerment_: no matter what kind of code you are writing now, Rust empowers you to reach farther, to program with confidence in a wider variety of domains than you did before.\n_\u003cdiv align=\"right\"\u003eRust Book's Foreword\u003c/div\u003e_\n\nThis project represents a hard-way step-by-step [Rust] learning course from language basics to a capability of web backend development.\n\n\n\n\n## Prerequisites\n\n\n### Toolchain\n\n- [rustup] for installing the [Rust] toolchain and keeping it up-to-date.\n- [CLion]/[IntelliJ IDEA] + [IntelliJ Rust] + [Toml][IntelliJ Toml] plugins as the development environment (or any other of your choice).\n\n\n### Bookshelf\n\n- [Rust Book] teaches and explains [Rust] basics.\n- [Rust By Example] teaches you [Rust] basics using editable examples.\n- [Rust Reference] is not a formal spec, but is more detailed and comprehensive than the [Rust Book].\n- [Cheats.rs] and [Rust SVG Cheatsheet] for quick reference.\n- [Rust Edition Guide] for considering the improvements in [Rust 2018] and [Rust 2021].\n- [Rust std lib] documentation.\n- [Cargo Book] is a guide to [Cargo], [Rust]'s build tool and dependency manager.\n- [Rustdoc Book] is a guide to the `rustdoc` documentation tool.\n- [Rust Cookbook] is a collection of simple examples that demonstrate good practices to accomplish common programming tasks, using crates from the [Rust] ecosystem.\n- [Rust Design Patterns] is an open source repository of [Rust] design patterns and idioms.\n- [Effective Rust] is a collection of guidelines that had been learned from real world experience of creating software in [Rust].\n- [Rust API Guidelines] is a set of recommendations on how to design and present APIs for [Rust].\n- [Rust FAQ] answers common questions about [Rust].\n- [Rust Playground] allows sharing and checking runnable [Rust] code snippets online.\n- [Awesome Rust] is a curated list of [Rust] code and resources.\n- [This Week in Rust] represents handpicked and subscribable [Rust] weekly updates.\n- [Baby Steps] blog by [Nicholas Matsakis](https://github.com/nikomatsakis) shares useful [Rust] patterns, ideas and design decisions.\n- [Learning Material for Idiomatic Rust] is a curated list of resources to help you write ergonomic and idiomatic [Rust] code.\n\n\n\n\n## Steps\n\n\n### Before you start\n\n[Create][1] a new [GitHub repository] for yourself using this one [as a template][11].\n\n\u003e __NOTE__: __This learning course is constantly improving and evolving over time.__ \n\u003e\n\u003e To be up-to-date with the recent changes in your own copy of this repository, attach the upstream history with the following commands:\n\u003e ```bash\n\u003e git remote add upstream https://github.com/instrumentisto/rust-incubator.git\n\u003e git fetch upstream main\n\u003e git merge upstream/main --allow-unrelated-histories\n\u003e ```\n\u003e And then, whenever you want to grab some new changes, do the following:\n\u003e ```bash\n\u003e git fetch upstream main\n\u003e git merge upstream/main\n\u003e ```\n\u003e Additionally, to be aware about new changes, you may either [watch this repository on GitHub][2], or even track it via [RSS subscription].\n\n\n### Schedule\n\nEach step must be performed as a separate [PR (pull request)][PR] with an appropriate name and check-marked here in the README's schedule after completion. Each step is a [Cargo workspace member][13], so you can run/test it from the project root (i.e. `cargo run -p step_1_8`). __Consider using [rustfmt] and [Clippy] when you're writing [Rust] code.__\n\n- [ ] [0. Become familiar with Rust basics][Step 0] (3 days)\n- [ ] [1. Concepts][Step 1] (2 days, after all sub-steps)\n    - [ ] [1.1. Default values, cloning and copying][Step 1.1] (1 day)\n    - [ ] [1.2. Boxing and pinning][Step 1.2] (1 day)\n    - [ ] [1.3. Shared ownership and interior mutability][Step 1.3] (1 day)\n    - [ ] [1.4. Clone-on-write][Step 1.4] (1 day)\n    - [ ] [1.5. Conversions, casting and dereferencing][Step 1.5] (1 day)\n    - [ ] [1.6. Static and dynamic dispatch][Step 1.6] (1 day)\n    - [ ] [1.7. `Sized` and `?Sized` types][Step 1.7] (1 day)\n    - [ ] [1.8. Thread safety][Step 1.8] (1 day)\n    - [ ] [1.9. Phantom types][Step 1.9] (1 day)\n- [ ] [2. Idioms][Step 2] (2 days, after all sub-steps)\n    - [ ] [2.1. Rich types ensure correctness][Step 2.1] (1 day)\n    - [ ] [2.2. Swapping values with `mem::replace`][Step 2.2] (1 day)\n    - [ ] [2.3. Bound behavior, not data][Step 2.3] (1 day)\n    - [ ] [2.4. Abstract type in, concrete type out][Step 2.4] (1 day)\n    - [ ] [2.5. Exhaustivity][Step 2.5] (1 day)\n    - [ ] [2.6. Sealing][Step 2.6] (1 day)\n- [ ] [3. Common ecosystem][Step 3] (2 days, after all sub-steps)\n    - [ ] [3.1. Testing and mocking][Step 3.1] (1 day)\n    - [ ] [3.2. Declarative and procedural macros][Step 3.2] (1 day)\n    - [ ] [3.3. Date and time][Step 3.3] (1 day)\n    - [ ] [3.4. Regular expressions and custom parsers][Step 3.4] (1 day)\n    - [ ] [3.5. Collections and iterators][Step 3.5] (1 day)\n    - [ ] [3.6. Serialization and deserialization][Step 3.6] (1 day)\n    - [ ] [3.7. Randomness and cryptography][Step 3.7] (1 day)\n    - [ ] [3.8. Logging and tracing][Step 3.8] (1 day)\n    - [ ] [3.9. Command-line arguments, environment variables and configs][Step 3.9] (1 day)\n    - [ ] [3.10. Multithreading and parallelism][Step 3.10] (1 day)\n    - [ ] [3.11. Async I/O, futures and actors][Step 3.11] (2 days)\n- [ ] [4. Backend ecosystem][Step 4] (3 days, after all sub-steps)\n    - [ ] [4.1. Databases, connection pools and ORMs][Step 4.1] (1 day)\n    - [ ] [4.2. HTTP servers and clients][Step 4.2] (1 day)\n    - [ ] [4.3. API servers, clients and tools][Step 4.3] (1 day)\n\n\n\n\n## More practice\n\n- [Rustlings][rustlings] is a collection of small exercises to get you used to reading and writing [Rust] code.\n- [Rust on Exercism] provides coding exercises with mentoring.\n- [Rust Quiz] for medium to hard [Rust] questions with explanations.\n\n\n\n\n[Step 0]: 0_basics\n[Step 1]: 1_concepts\n[Step 1.1]: 1_concepts/1_1_default_clone_copy\n[Step 1.2]: 1_concepts/1_2_box_pin\n[Step 1.3]: 1_concepts/1_3_rc_cell\n[Step 1.4]: 1_concepts/1_4_cow\n[Step 1.5]: 1_concepts/1_5_convert_cast_deref\n[Step 1.6]: 1_concepts/1_6_dispatch\n[Step 1.7]: 1_concepts/1_7_sized\n[Step 1.8]: 1_concepts/1_8_thread_safety\n[Step 1.9]: 1_concepts/1_9_phantom\n[Step 2]: 2_idioms\n[Step 2.1]: 2_idioms/2_1_type_safety\n[Step 2.2]: 2_idioms/2_2_mem_replace\n[Step 2.3]: 2_idioms/2_3_bound_impl\n[Step 2.4]: 2_idioms/2_4_generic_in_type_out\n[Step 2.5]: 2_idioms/2_5_exhaustivity\n[Step 2.6]: 2_idioms/2_6_sealing\n[Step 3]: 3_ecosystem\n[Step 3.1]: 3_ecosystem/3_1_testing\n[Step 3.2]: 3_ecosystem/3_2_macro\n[Step 3.3]: 3_ecosystem/3_3_date_time\n[Step 3.4]: 3_ecosystem/3_4_regex_parsing\n[Step 3.5]: 3_ecosystem/3_5_collections\n[Step 3.6]: 3_ecosystem/3_6_serde\n[Step 3.7]: 3_ecosystem/3_7_rand_crypto\n[Step 3.8]: 3_ecosystem/3_8_log\n[Step 3.9]: 3_ecosystem/3_9_cmd_env_conf\n[Step 3.10]: 3_ecosystem/3_10_threads\n[Step 3.11]: 3_ecosystem/3_11_async\n[Step 4]: 4_backend\n[Step 4.1]: 4_backend/4_1_db\n[Step 4.2]: 4_backend/4_2_http\n[Step 4.3]: 4_backend/4_3_api\n\n[Awesome Rust]: https://github.com/rust-unofficial/awesome-rust\n[Baby Steps]: http://smallcultfollowing.com/babysteps\n[Cargo]: https://github.com/rust-lang/cargo\n[Cargo Book]: https://doc.rust-lang.org/cargo\n[Cheats.rs]: https://cheats.rs\n[CLion]: https://www.jetbrains.com/clion\n[Clippy]: https://github.com/rust-lang/rust-clippy\n[Effective Rust]: https://www.lurklurk.org/effective-rust\n[GitHub repository]: https://help.github.com/articles/github-glossary/#repository\n[IntelliJ IDEA]: https://www.jetbrains.com/idea\n[IntelliJ Rust]: https://intellij-rust.github.io\n[IntelliJ Toml]: https://plugins.jetbrains.com/plugin/8195-toml\n[Learning Material for Idiomatic Rust]: https://corrode.dev/blog/idiomatic-rust-resources\n[PR]: https://help.github.com/articles/github-glossary/#pull-request\n[RSS subscription]: https://github.com/instrumentisto/rust-incubator/commits/main.atom\n[Rust]: https://www.rust-lang.org\n[Rust 2018]: https://doc.rust-lang.org/edition-guide/rust-2018/index.html\n[Rust 2021]: https://doc.rust-lang.org/edition-guide/rust-2021/index.html\n[Rust API Guidelines]: https://rust-lang.github.io/api-guidelines\n[Rust Book]: https://doc.rust-lang.org/book\n[Rust By Example]: https://doc.rust-lang.org/rust-by-example\n[Rust Cookbook]: https://rust-lang-nursery.github.io/rust-cookbook\n[Rust Design Patterns]: https://rust-unofficial.github.io/patterns\n[Rust Edition Guide]: https://doc.rust-lang.org/edition-guide\n[Rust FAQ]: https://prev.rust-lang.org/faq.html\n[Rust on Exercism]: https://exercism.org/tracks/rust/exercises\n[Rust Playground]: https://play.rust-lang.org\n[Rust Quiz]: https://github.com/dtolnay/rust-quiz\n[Rust Reference]: https://doc.rust-lang.org/reference\n[Rust std lib]: https://doc.rust-lang.org/std\n[Rust SVG Cheatsheet]: https://web.archive.org/web/20241001012119/https://www.breakdown-notes.com/make/load/rust_cs_canvas/true\n[Rustdoc Book]: https://doc.rust-lang.org/rustdoc\n[rustfmt]: https://github.com/rust-lang/rustfmt\n[rustlings]: https://rustlings.cool\n[rustup]: https://rustup.rs\n[This Week in Rust]: https://this-week-in-rust.org\n\n[1]: https://github.com/instrumentisto/rust-incubator/generate\n[2]: https://github.com/instrumentisto/rust-incubator/subscription\n[11]: https://help.github.com/en/articles/creating-a-repository-from-a-template\n[13]: https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstrumentisto%2Frust-incubator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finstrumentisto%2Frust-incubator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finstrumentisto%2Frust-incubator/lists"}