|
| 1 | ++++ |
| 2 | +title = "This year in embedded Rust" |
| 3 | +date = 2018-11-14 |
| 4 | +draft = false |
| 5 | +in_search_index = true |
| 6 | +template = "page.html" |
| 7 | ++++ |
| 8 | + |
| 9 | +This year the [Embedded WG] set out to build the solid foundation that the |
| 10 | +embedded Rust ecosystem requires to thrive. As we approach the date of the 2018 |
| 11 | +edition release we reflect on our progress and share our achievements with you |
| 12 | +in this post. |
| 13 | + |
| 14 | +[Embedded WG]: https://github.com/rust-embedded/wg |
| 15 | + |
| 16 | +## Embedded Rust on stable |
| 17 | + |
| 18 | +Stability -- AKA "my crate should not break when moving to a newer toolchain" -- |
| 19 | +was the single most requested feature by the embedded community during the 2018 |
| 20 | +roadmap planning phase. |
| 21 | + |
| 22 | +Embedded development has been tied to the nightly |
| 23 | +channel since its very beginning, and the people that have been doing embedded |
| 24 | +development for a while have endured many breaking changes. Thankfully, those |
| 25 | +days are over: Rust 1.30 marks the first stable release where you can build |
| 26 | +fully working embedded programs without relying on unstable features. |
| 27 | + |
| 28 | +Furthermore, we now have some [unit][] [tests] that check embedded code in the |
| 29 | +compiler test suite so unintentional breakage will be caught before it makes its |
| 30 | +way into the nightly channel. |
| 31 | + |
| 32 | +[unit]: https://github.com/rust-lang/rust/pull/53996 |
| 33 | +[tests]: https://github.com/rust-lang/rust/pull/53190 |
| 34 | + |
| 35 | +## A smooth starting point |
| 36 | + |
| 37 | +"How do I get started with embedded Rust?" has been a common question on IRC for |
| 38 | +a long time. It has not been an easy question to answer, though: maintaining |
| 39 | +documentation that relies on unstable features for a long period of time has |
| 40 | +been an uphill battle so newcomers have often run into outdated docs. |
| 41 | + |
| 42 | +But now that stable embedded Rust is here we have put together an authoritative |
| 43 | +resource for getting started with embedded Rust: [The Embedded Rust Book]. We |
| 44 | +have put a lot of effort in making the first experience as frictionless as |
| 45 | +possible with the help of [templates] and [tooling]. |
| 46 | + |
| 47 | +[The Embedded Rust Book]: https://docs.rust-embedded.org/book |
| 48 | +[templates]: https://github.com/rust-embedded/cortex-m-quickstart |
| 49 | +[tooling]: https://github.com/rust-embedded/cargo-binutils |
| 50 | + |
| 51 | +The embedded Rust book is not just a getting started guide; it's also meant |
| 52 | +to be the document that teaches you how to effectively use the language to write |
| 53 | +correct embedded software. We are currently amassing all our hard earned |
| 54 | +experience into patterns and tips that we are adding to this book. |
| 55 | + |
| 56 | +## Resources for everyone |
| 57 | + |
| 58 | +The Embedded Rust Book is aimed at people that have some experience with |
| 59 | +embedded development, but we recognize that Rust has great potential for |
| 60 | +becoming people's first choice for getting their feet wet with embedded |
| 61 | +development so we have updated and will continue to work on resources, like [the |
| 62 | +Discovery book], that are aimed at that demographic. |
| 63 | + |
| 64 | +[the Discovery book]: https://docs.rust-embedded.org/discovery |
| 65 | + |
| 66 | +We also recognize that the target audience for embedded Rust has different |
| 67 | +levels of expertise with embedded systems and a varied set of interests |
| 68 | +so we are also building advances resources like [the embedonomicon] |
| 69 | +and collecting more targeted resources, like crates, in the |
| 70 | +[awesome-embedded-rust] list. You can find these and other of our resources in |
| 71 | +our [docs webpage][docs]. |
| 72 | + |
| 73 | +[the embedonomicon]: https://docs.rust-embedded.org/embedonomicon |
| 74 | +[awesome-embedded-rust]: https://github.com/rust-embedded/awesome-embedded-rust |
| 75 | +[docs]: https://docs.rust-embedded.org |
| 76 | + |
| 77 | +## An organized community effort |
| 78 | + |
| 79 | +All this has been accomplished with the hard work of many volunteers, both [WG |
| 80 | +members] and other community members. The WG members, in particular, are |
| 81 | +committed to maintaining the [core crates] and [documentation] that the |
| 82 | +ecosystem relies on. All these resources have been taken under the umbrella of |
| 83 | +the [rust-embedded] organization. |
| 84 | + |
| 85 | +[WG members]: https://github.com/rust-embedded/wg#organization |
| 86 | +[rust-embedded]: https://github.com/rust-embedded |
| 87 | +[core crates]: https://github.com/rust-embedded/wg#projects-1 |
| 88 | +[documentation]: https://github.com/rust-embedded/wg#projects-8 |
| 89 | + |
| 90 | +## WG teams |
| 91 | + |
| 92 | +The embedded space is huge: there are several architectures used in |
| 93 | +this space, many application areas, and embedded developers work with different |
| 94 | +sets of constraints: real-time constraints, memory constraints, energy / power |
| 95 | +constraints, etc. |
| 96 | + |
| 97 | +For this reason we have been creating and growing specialized teams within the |
| 98 | +WG by adding members with different areas of expertise. This ensures that we |
| 99 | +have different perspectives when making API design decisions in core crates and |
| 100 | +when communicating the needs of the embedded community to the other Rust teams. |
| 101 | +Having specialized teams also means that the crates developed by the org can be |
| 102 | +assigned to the people with the right technical background. |
| 103 | + |
| 104 | +## On the upcoming 2018 edition |
| 105 | + |
| 106 | +In this last sprint towards the 2018 edition we are focusing our efforts in |
| 107 | +our [documentation][docs]! |
| 108 | + |
| 109 | +You can help us by proofreading our docs, reporting errors, giving feedback on |
| 110 | +the existing content, requesting new topics and writing about topics that have |
| 111 | +not yet been covered. Every little bit of help is greatly appreciated! |
| 112 | + |
| 113 | +One important note: our documentation makes use of the 2018 edition which |
| 114 | +requires you to use the beta channel until 1.31 is released in early December. |
| 115 | +We suggest that you use the beta channel until then to get the best experience. |
| 116 | + |
| 117 | +## Beyond 2018 |
| 118 | + |
| 119 | +Our work doesn't stop the day Rust 1.31 comes out; the 2018 edition is just the |
| 120 | +starting line of embedded Rust. As we continue to learn how to effectively use |
| 121 | +Rust for embedded development we'll continue to refine and expand our |
| 122 | +documentation as well as the core crates we maintain and develop. |
| 123 | + |
| 124 | +Also, at this point in time ARM Cortex-M is our most mature target architecture |
| 125 | +and the majority of crates on crates.io target this architecture, but we have |
| 126 | +laid the groundwork for supporting other targets like bare metal ARM Cortex-A, |
| 127 | +ARM Cortex-R, MSP430 and RISCV. We'll continue to work on getting these |
| 128 | +targets on parity with the ARM Cortex-M target during the next year. |
| 129 | + |
| 130 | +Finally, we'd love to hear what **you** would like to see happen in the embedded |
| 131 | +space in 2019. We are collecting a ["wishlist"] of things the embedded community |
| 132 | +would like to see get done, fixed and / or stabilized in 2019. Need some API in |
| 133 | +core to be stabilized? Would like to get some Cargo bug / papercut fixed? Let us |
| 134 | +know and we'll look into making it happen! We'll use this data to set out an |
| 135 | +embedded Rust roadmap for 2019. |
| 136 | + |
| 137 | +["wishlist"]: https://github.com/rust-embedded/wg/issues/256 |
| 138 | + |
| 139 | +Here's to a 2019 with *more* embedded Rust success stories (yes, "more"; wait |
| 140 | +for the upcoming revamped rust-lang website ;-)). Happy embedded hacking! |
0 commit comments