Document not found (404)
142 |This URL is invalid, sorry. Please use the navigation bar or search to continue.
143 | 144 |├── .gitignore ├── Makefile ├── README.md ├── book.toml ├── docs ├── .nojekyll ├── 404.html ├── FontAwesome │ ├── css │ │ └── font-awesome.css │ └── fonts │ │ ├── FontAwesome.ttf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── ayu-highlight.css ├── book.js ├── clipboard.min.js ├── correct.html ├── correct.svg ├── css │ ├── chrome.css │ ├── general.css │ ├── print.css │ └── variables.css ├── elasticlunr.min.js ├── favicon.png ├── favicon.svg ├── fonts │ ├── OPEN-SANS-LICENSE.txt │ ├── SOURCE-CODE-PRO-LICENSE.txt │ ├── fonts.css │ ├── open-sans-v17-all-charsets-300.woff2 │ ├── open-sans-v17-all-charsets-300italic.woff2 │ ├── open-sans-v17-all-charsets-600.woff2 │ ├── open-sans-v17-all-charsets-600italic.woff2 │ ├── open-sans-v17-all-charsets-700.woff2 │ ├── open-sans-v17-all-charsets-700italic.woff2 │ ├── open-sans-v17-all-charsets-800.woff2 │ ├── open-sans-v17-all-charsets-800italic.woff2 │ ├── open-sans-v17-all-charsets-italic.woff2 │ ├── open-sans-v17-all-charsets-regular.woff2 │ └── source-code-pro-v11-all-charsets-500.woff2 ├── highlight.css ├── highlight.js ├── index.html ├── iot.html ├── kernel.html ├── mark.min.js ├── print.html ├── searcher.js ├── searchindex.js ├── searchindex.json ├── security.html ├── security.svg ├── service-author.html ├── service-author.svg ├── service-client.svg ├── structure.html ├── tomorrow-night.css └── welcome.html ├── index.html ├── skill-trees ├── correct.toml ├── include │ ├── async.toml │ ├── compiler.toml │ ├── debugging.toml │ ├── development.toml │ ├── easy-lang.toml │ ├── expressive-lang.toml │ ├── extensible.toml │ ├── formal-lang.toml │ ├── formal-methods-tooling.toml │ ├── ide.toml │ ├── meta.toml │ ├── onboarding.toml │ ├── production.toml │ ├── safe-rust-correct.toml │ ├── unsafe-rust-correct.toml │ └── well-integrated.toml ├── security.toml ├── service-author.toml └── service-client.toml └── src ├── SUMMARY.md ├── correct.md ├── correct.svg ├── feedback.md ├── fork.md ├── iot.md ├── kernel.md ├── security.md ├── security.svg ├── service-author.md ├── service-author.svg ├── service-client.md ├── service-client.svg ├── structure.md └── welcome.md /.gitignore: -------------------------------------------------------------------------------- 1 | book 2 | skill-trees/*.svg 3 | skill-trees/*.dot 4 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SKILL_TREES=$(wildcard skill-trees/*.toml) 2 | INCLUDE_SKILL_TREES=$(wildcard skill-trees/include/*.toml) 3 | SKILL_TREE_DOTS=$(patsubst %.toml,%.dot,${SKILL_TREES}) 4 | SKILL_TREE_SVGS=$(patsubst %.toml,%.svg,${SKILL_TREES}) 5 | 6 | .PHONY: build clean 7 | build: ${SKILL_TREE_SVGS} 8 | cp ${SKILL_TREE_SVGS} src 9 | mdbook build 10 | 11 | clean: 12 | rm -f src/*.svg ${SKILL_TREE_SVGS} ${SKILL_TREE_DOTS} 13 | 14 | serve: build 15 | cd docs && python3 -m http.server 16 | 17 | %.svg: %.dot 18 | dot -T svg $< > $@ 19 | 20 | %.dot: %.toml $(INCLUDE_SKILL_TREES) 21 | skill-tree $< $@ 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Rust skill tree 2 | 3 | ## Goal 4 | 5 | This repository is an attempt to wrap my brain around the "state of Rust". It consists of various interlinked [skill trees]. You can [read about them here][here]. 6 | 7 | [skill trees]: https://github.com/nikomatsakis/skill-tree 8 | [here]: https://nikomatsakis.github.io/rust-skill-tree 9 | 10 | ## Warning: Work in progress 11 | 12 | At the moment, this repository is **very much an experiment**. Do not interpret what you see here as "the plan" for Rust or anything like that. The goal both to clarify my own thinking and to have a tool for communicating that thinking to others and getting feedback. I welcome [feedback] and also would love to see others [create their own skill trees][fork]. 13 | 14 | [feedback]: https://nikomatsakis.github.io/rust-skill-tree/welcome.html#feedback 15 | [fork]: https://nikomatsakis.github.io/rust-skill-tree/welcome.html#fork 16 | -------------------------------------------------------------------------------- /book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Niko Matsakis"] 3 | language = "en" 4 | multilingual = false 5 | src = "src" 6 | title = "a Rust skill tree" 7 | 8 | [build] 9 | build-dir = "docs" -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | This file makes sure that Github Pages doesn't process mdBook's output. 2 | -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |This URL is invalid, sorry. Please use the navigation bar or search to continue.
143 | 144 |XXX
143 |XXX
145 |FIXME -- identify highest priority items and what we can do to improve them in short term :)
147 |FIXME -- describe what it feels like when all the things below are done :)
149 | 150 |This repository is an attempt to wrap my brain around the "state of Rust". It consists of various interlinked skill trees, each one talking about the path to an overall goal. You can see the goals in the 'table of contents' on the left.
143 |At the moment, this repository is very much an experiment. My hope though is that it will become a useful tool for communicating about the state of Rust and for describing a particular vision for how Rust should evolve. For example, when I meet with folks, I hope to show them this document and get their feedback on what is mising. I hope that others may read it and be encouraged to close some of the gaps or contribute to ongoing efforts.
144 |This repository is an unofficial work-in-progress. Do not interpret what you see here as "the plan" for Rust or anything like that. The goal here is very much for me to clarify my own thinking. I don't really expect this repository to ever be "done" -- plans are always changing as the world evolves.
146 |I would love to get feedback on what you see here. I am quite sure that I have overlooked a lot of things that are taking place in Rust land. I would also like to start expanding the tree into other domains, like embedded Rust, with which I am personally less familiar. Feel free to open issues or PRs on this repository -- or, if you have a larger set of ideas, perhaps to make a fork of this repository! (see below)
148 |That said, in a language and environment as complex as Rust, there will never be a single vision that captures everything. I would love to see others drafting their own forks of this skill tree that focus on a different angle. If you do take a stab at your own tree, feel free to open a PR and link to it here.
150 | 151 |This page describes a tree of work that needs to be done in order to ensure that Rust is highly secure, meaning that people using Rust rarely -- if ever -- experience security vulnerabilities or issues. As a consequences of having fewer security vulnerabilities, companies will then be able to refocus the resources they used to devote to fuzzing and other "small scale" prevention measures on adopting higher-level security guarantees.
143 |Unfortunately, though, a fair bit of work remains before we have realized that vision.
145 |At the core level, the compiler and language have a number of known soundness bugs. Much of Rust's core libraries are based around unsafe code, but we lack definitive rules for what unsafe code is allowed to do, to say nothing of effective tooling for checking that code follows those rules. Rust's support for formal verification is also less advanced than other languages, and hindered by the lack of a clear semantics.
146 |Like most modern langauges, Rust offers a rich ecosystem of libraries called crates. These crates are readily accessible on crates.io. Other packaging systems, however, have suffered from high-profile examples of trojan horses or malicious packaging, and crates.io has few defenses against that sort of thing. Users frequently report difficulty in selecting the right crate from the many choices available. Rust's packaging tool and language design includes a number of potentially unexpected vectors through malicious code can be incorporated, such as the build.rs preprocessing step or procedural macros.
147 | 148 |This page describes a tree of work that aims to make Rust an excellent choice for building internet services. These services are the backbone of the internet today. Since they support so much traffic, service authors highly value both peak performance but also predictability. Rust is a good choice here because it offers performance comparable to C++ without the high tail latencies and variablity typically introduced by garbage collectors. Rust also offers stronger safety guarantees even than garbage collected languages like Java or Go, since its type system rules out data races. Furthermore, Rust's focus on reliability winds up producing fewer bugs overall, resulting in less time spent responding to customer issues and more time creating compelling features. Finally, because people love using Rust, teams find that they are able to recruit quality engineers more easily.
143 |In practice, though, Rust today has several shortcomings that can make it a less appealing choice. Other languages offer stronger tooling for debugging development systems and monitoring production systems. Rust's current learning curve means that new developers, especially those who are less experienced overall, have a harder time coming up to speed. Even once people are accustomed to using Rust, they typically spend more time figuring out how to encode something in Rust than they would if they were using some other language.
145 |Async Rust, which uses user-space primitives to manage concurrency rather than relying on the kernel, is of particular importance in this domain. Unfortunately, it is also one of the areas where Rust needs the most work. Expressing common patterns in Async Rust require the type system to be extended in non-trivial ways (even if users will ultimately not have to be aware of those extensions), which in turn requires improving the compiler's implementation (which is having trouble scaling to those requirements).
146 |FIXME -- identify highest priority items and what we can do to improve them in short term :)
148 |FIXME -- describe what it feels like when all the things below are done :)
150 | 151 |The idea of a "skill tree" is inspired by video games and this epic WebAssembly post. The tree consists of groups of work that, together, enable something greater than the sum of their parts. For each group in the tree we have...
142 |Many of the groups and items are themselves links to other skill trees or web pages that give more detail.
148 | 149 |This repository is an attempt to wrap my brain around the "state of Rust". It consists of various interlinked skill trees, each one talking about the path to an overall goal. You can see the goals in the 'table of contents' on the left.
143 |At the moment, this repository is very much an experiment. My hope though is that it will become a useful tool for communicating about the state of Rust and for describing a particular vision for how Rust should evolve. For example, when I meet with folks, I hope to show them this document and get their feedback on what is mising. I hope that others may read it and be encouraged to close some of the gaps or contribute to ongoing efforts.
144 |This repository is an unofficial work-in-progress. Do not interpret what you see here as "the plan" for Rust or anything like that. The goal here is very much for me to clarify my own thinking. I don't really expect this repository to ever be "done" -- plans are always changing as the world evolves.
146 |I would love to get feedback on what you see here. I am quite sure that I have overlooked a lot of things that are taking place in Rust land. I would also like to start expanding the tree into other domains, like embedded Rust, with which I am personally less familiar. Feel free to open issues or PRs on this repository -- or, if you have a larger set of ideas, perhaps to make a fork of this repository! (see below)
148 |That said, in a language and environment as complex as Rust, there will never be a single vision that captures everything. I would love to see others drafting their own forks of this skill tree that focus on a different angle. If you do take a stab at your own tree, feel free to open a PR and link to it here.
150 | 151 |This repository is an attempt to wrap my brain around the "state of Rust". It consists of various interlinked skill trees -- I recommend you start with main.svg
to get the overall view. From there you should be able to click on many of the items to get more details.
At the moment, this repository is very much an experiment. My hope though is that it will become a useful tool for communicating about the state of Rust and for describing a particular vision for how Rust should evolve. For example, when I meet with folks, I hope to show them this document and get their feedback on what is mising. I hope that others may read it and be encouraged to close some of the gaps or contribute to ongoing efforts.
141 |This repository is an unofficial work-in-progress. Do not interpret what you see here as "the plan" for Rust or anything like that. The goal here is very much for me to clarify my own thinking. I don't really expect this repository to ever be "done" -- plans are always changing as the world evolves.
143 |I would love to get feedback on what you see here. I am quite sure that I have overlooked a lot of things that are taking place in Rust land. I would also like to start expanding the tree into other domains, like embedded Rust, with which I am personally less familiar. Feel free to open issues or PRs on this repository -- or, if you have a larger set of ideas, perhaps to make a fork of this repository! (see below)
145 |That said, in a language and environment as complex as Rust, there will never be a single vision that captures everything. I would love to see others drafting their own forks of this skill tree that focus on a different angle. If you do take a stab at your own tree, feel free to open a PR and link to it here.
147 | 148 |