Description
Hello embedded Rustaceans!
We are collecting a "wishlist" of things you'd like to see done, fixed or
stabilized in 2019. We'll use this data to make a roadmap for 2019, i.e. to set
the goals of the WG for 2019.
You can request anything related to embedded Rust development: language
features, bug fixes, crates, docs, etc. The more requested something is the more
likely it is to make it into the roadmap; of course, other factors will be
considered as well: amount of work required; how beneficial would it be to the
community; does it require a rust-lang/rust RFC? how likely is that RFC to be
accepted?; who has to do the bulk of the work? the embedded community or a Rust
team?; etc.
To keep things tidy let's limit comments to one request per comment. Let's
also avoid "+1" and "I'd like to see that fixed too" comments; instead use a 👍
reaction to vote for a request.
To make our job easier please use the following format:
**Category**: pick one of:
- "feature", for languange and compiler features, e.g. const generics;
- "bug fix", e.g. fix rust-lang/cargo#5730;
- "stabilization", stabilization of standard API and features, e.g. stabilize `MaybeUninit`;
- "std", for addition and changes in any of the standard crates, e.g. add `core::io`;
- "crate", e.g. write / maintain a USB stack;
- "resources", for requesting docs, user guides, cookbooks and the like;
- or leave it empty if it doesn't fit any of the categories above
**Request**: your request in a single sentence
**Rationale**: one paragraph, or several bullets, explaining how this change would
benefit the embedded community
If you'd like to extend the rationale of an already submitted request just make
a new comment referencing the original request. We'll merge your comment into
the request comment. For example:
> **Request**: the sentence that Alice wrote
This would also let us do X and Y, and it would let crate Z compile on stable!
Summary of requests
Stabilization
- Stabilize RFC 2282 - "Cargo profile dependencies" AKA
profile-overrides
- Stabilize
core::mem::MaybeUninit
- Stabilize
const fn
-s that have trait bounds, e.g.const fn new() -> Mutex<T> where T: Send
. - thumb intrinsics (#63)
- Stabilize async/await (and all needed underlying machinery).
- stabilize alloc-related functional (alloc and allocator_api)
- complete and stabilize the last bits of procedural macros (macros 1.2): crate level attributes and attributes on modules
Bug fixes
- fix rust-lang/cargo#5730 - "Features of dependencies are enabled if they're enabled in build-dependencies; breaks no_std libs"
- Fix rust-lang/rust#42863 - "Generic associated consts can't currently be used to parameterize fixed array lengths"
- Fix so infinite loops (loop {}) does not need an atomic compiler fence to not be optimized into an abort instruction
- Fix rust-lang/rust#54973
Features
- MIPS intrinsic for mfc0/mtc0
- std-aware Cargo / Xargo in Cargo
- Support for AVR
- Functional Safety Certification
- PowerPC e200 core compiler support
- Add support for Cortex-R52
- Language support for types with storage size of less than 1 byte
- Add a32 and t32 features to target_feature on ARM targets, mapping to the LLVM features -thumb-mode and +thumb-mode
- ability to assert within a const fn context, with a compilation error if the assertion fails at compile time and a panic if the assertion fails at runtime
- more control over loop unrolling (See
#pragma unroll
and-funroll-loops
) - ship GDB compiled with --enable-targets=all with the toolchain
- Support defining enabled and disabled lints in a configuration file
- UnsafeDeref trait
- Ability to define a fmt_implementation, similar to a panic_implementation
- ability to list/forbid dependencies using unsafe code or which could panic
- bits layout implementation like in Ada
- Make example-dependencies and test-dependencies be split up, instead of having both as dev-dependencies
Std
- math support in core
- Optimise memory routines in compiler-builtins.
- std::io in libcore/liballoc
- Ability to use format!() in non-std (embedded) contexts
Crate
- High quality RTOS bindings
- An easy to use SD/MMC and FAT32 library
- An easy to use USB host library
- An easy to use USB device library
- An easy to use pure-Rust RTOS
- A task scheduler
- GUI with desktop simulation support
- Easy firmware flashing for popular OS-es / SOCs (initially - stlink/DFU for linux/osx/win)
- singleton! and other arch independent APIs in arch independent lib (instead of cortex-m)
Resources
- Table/List of comparison/example between embedded_hal API vs Arduino API
- are-we-no-std-yet style community push
- Improve documentation needed to start experimenting with Rust on AVR, MSP430, RISC-V
- Improve crates.io or create separate site for no_std crates
- Create site listing all available embedded-hal implementations with supported MCUs and peripherals
- Recommended/Supported/Blessed way of doing unit or integration tests on Embedded systems.
- Complete usage examples for each trait in embedded-hal
- add end to end workflow for popular microcontroller such as arduinos
- Guidelines for vendor participation
cc @rust-embedded/all please check this thread every now and then and update
the summary section