{"action":"created","issue":{"url":"https://api.github.com/repos/rust-embedded/wg/issues/256","repository_url":"https://api.github.com/repos/rust-embedded/wg","labels_url":"https://api.github.com/repos/rust-embedded/wg/issues/256/labels{/name}","comments_url":"https://api.github.com/repos/rust-embedded/wg/issues/256/comments","events_url":"https://api.github.com/repos/rust-embedded/wg/issues/256/events","html_url":"https://github.com/rust-embedded/wg/issues/256","id":380475088,"node_id":"MDU6SXNzdWUzODA0NzUwODg=","number":256,"title":"Survey: 2019 wishlist","user":{"login":"japaric","id":5018213,"node_id":"MDQ6VXNlcjUwMTgyMTM=","avatar_url":"https://avatars3.githubusercontent.com/u/5018213?v=4","gravatar_id":"","url":"https://api.github.com/users/japaric","html_url":"https://github.com/japaric","followers_url":"https://api.github.com/users/japaric/followers","following_url":"https://api.github.com/users/japaric/following{/other_user}","gists_url":"https://api.github.com/users/japaric/gists{/gist_id}","starred_url":"https://api.github.com/users/japaric/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/japaric/subscriptions","organizations_url":"https://api.github.com/users/japaric/orgs","repos_url":"https://api.github.com/users/japaric/repos","events_url":"https://api.github.com/users/japaric/events{/privacy}","received_events_url":"https://api.github.com/users/japaric/received_events","type":"User","site_admin":false},"labels":[{"id":1073003621,"node_id":"MDU6TGFiZWwxMDczMDAzNjIx","url":"https://api.github.com/repos/rust-embedded/wg/labels/T-all","name":"T-all","color":"bfd4f2","default":false},{"id":451772177,"node_id":"MDU6TGFiZWw0NTE3NzIxNzc=","url":"https://api.github.com/repos/rust-embedded/wg/labels/community","name":"community","color":"5319e7","default":false},{"id":462274249,"node_id":"MDU6TGFiZWw0NjIyNzQyNDk=","url":"https://api.github.com/repos/rust-embedded/wg/labels/survey","name":"survey","color":"e99695","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":70,"created_at":"2018-11-13T23:49:49Z","updated_at":"2018-12-30T07:14:37Z","closed_at":null,"author_association":"MEMBER","body":"Hello embedded Rustaceans!\r\n\r\nWe are collecting a \"wishlist\" of things you'd like to see done, fixed or\r\nstabilized in 2019. We'll use this data to make a roadmap for 2019, i.e. to set\r\nthe goals of the WG for 2019.\r\n\r\nYou can request anything related to embedded Rust development: language\r\nfeatures, bug fixes, crates, docs, etc. The more requested something is the more\r\nlikely it is to make it into the roadmap; of course, other factors will be\r\nconsidered as well: amount of work required; how beneficial would it be to the\r\ncommunity; does it require a rust-lang/rust RFC? how likely is that RFC to be\r\naccepted?; who has to do the bulk of the work? the embedded community or a Rust\r\nteam?; etc.\r\n\r\nTo keep things tidy let's limit comments to **one** request per comment. Let's\r\nalso avoid \"+1\" and \"I'd like to see that fixed too\" comments; instead use a :+1:\r\n[reaction] to vote for a request.\r\n\r\n[reaction]: https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/\r\n\r\nTo make our job easier please use the following format:\r\n\r\n``` text\r\n**Category**: pick one of:\r\n\r\n- \"feature\", for languange and compiler features, e.g. const generics;\r\n- \"bug fix\", e.g. fix rust-lang/cargo#5730;\r\n- \"stabilization\", stabilization of standard API and features, e.g. stabilize `MaybeUninit`;\r\n- \"std\", for addition and changes in any of the standard crates, e.g. add `core::io`;\r\n- \"crate\", e.g. write / maintain a USB stack;\r\n- \"resources\", for requesting docs, user guides, cookbooks and the like;\r\n- or leave it empty if it doesn't fit any of the categories above\r\n\r\n**Request**: your request in a single sentence\r\n\r\n**Rationale**: one paragraph, or several bullets, explaining how this change would\r\nbenefit the embedded community\r\n```\r\n\r\nIf you'd like to extend the rationale of an already submitted request just make\r\na new comment referencing the original request. We'll merge your comment into\r\nthe request comment. For example:\r\n\r\n``` text\r\n> **Request**: the sentence that Alice wrote\r\n\r\nThis would also let us do X and Y, and it would let crate Z compile on stable!\r\n```\r\n\r\n## Summary of requests\r\n\r\n### Stabilization\r\n\r\n- [Stabilize RFC 2282 - \"Cargo profile dependencies\" AKA `profile-overrides`](https://github.com/rust-embedded/wg/issues/256#issuecomment-438483337)\r\n- [Stabilize `core::mem::MaybeUninit`](https://github.com/rust-embedded/wg/issues/256#issuecomment-438483804)\r\n- [Stabilize `const fn`-s that have trait bounds, e.g. `const fn new() -> Mutex<T> where T: Send`.](https://github.com/rust-embedded/wg/issues/256#issuecomment-438484001)\r\n- [thumb intrinsics (#63)](https://github.com/rust-embedded/wg/issues/256#issuecomment-438488557)\r\n- [Stabilize async/await (and all needed underlying machinery).](https://github.com/rust-embedded/wg/issues/256#issuecomment-438929923)\r\n- [stabilize alloc-related functional (alloc and allocator_api)](https://github.com/rust-embedded/wg/issues/256#issuecomment-439084458)\r\n- [complete and stabilize the last bits of procedural macros (macros 1.2): crate level attributes and attributes on modules](https://github.com/rust-embedded/wg/issues/256#issuecomment-449189131)\r\n\r\n### Bug fixes\r\n\r\n- [fix rust-lang/cargo#5730 - \"Features of dependencies are enabled if they're enabled in build-dependencies; breaks no_std libs\"](https://github.com/rust-embedded/wg/issues/256#issuecomment-438483578)\r\n- [Fix rust-lang/rust#42863 - \"Generic associated consts can't currently be used to parameterize fixed array lengths\"](https://github.com/rust-embedded/wg/issues/256#issuecomment-438598246)\r\n- [Fix so infinite loops (loop {}) does not need an atomic compiler fence to not be optimized into an abort instruction](https://github.com/rust-embedded/wg/issues/256#issuecomment-439691004)\r\n- [Fix rust-lang/rust#54973](https://github.com/rust-embedded/wg/issues/256#issuecomment-444861888)\r\n\r\n### Features\r\n\r\n- [MIPS intrinsic for mfc0/mtc0](https://github.com/rust-embedded/wg/issues/256#issuecomment-438487408)\r\n- [std-aware Cargo / Xargo in Cargo](https://github.com/rust-embedded/wg/issues/256#issuecomment-438663318)\r\n- [Support for AVR](https://github.com/rust-embedded/wg/issues/256#issuecomment-438835191)\r\n- [Functional Safety Certification](https://github.com/rust-embedded/wg/issues/256#issuecomment-438889322)\r\n- [PowerPC e200 core compiler support](https://github.com/rust-embedded/wg/issues/256#issuecomment-438892004)\r\n- [Add support for Cortex-R52](https://github.com/rust-embedded/wg/issues/256#issuecomment-438949887)\r\n- [Language support for types with storage size of less than 1 byte](https://github.com/rust-embedded/wg/issues/256#issuecomment-439657174)\r\n- [Add a32 and t32 features to target_feature on ARM targets, mapping to the LLVM features -thumb-mode and +thumb-mode](https://github.com/rust-embedded/wg/issues/256#issuecomment-439677804)\r\n- [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](https://github.com/rust-embedded/wg/issues/256#issuecomment-440135795)\r\n- [more control over loop unrolling (See `#pragma unroll` and `-funroll-loops`)](https://github.com/rust-embedded/wg/issues/256#issuecomment-443266437)\r\n- [ship GDB compiled with --enable-targets=all with the toolchain](https://github.com/rust-embedded/wg/issues/256#issuecomment-443267668)\r\n- [Support defining enabled and disabled lints in a configuration file](https://github.com/rust-embedded/wg/issues/256#issuecomment-443417735)\r\n- [UnsafeDeref trait](https://github.com/rust-embedded/wg/issues/256#issuecomment-445500668)\r\n- [Ability to define a fmt_implementation, similar to a panic_implementation](https://github.com/rust-embedded/wg/issues/256#issuecomment-445500807)\r\n- [ability to list/forbid dependencies using unsafe code or which could panic](https://github.com/rust-embedded/wg/issues/256#issuecomment-445546901)\r\n- [ bits layout implementation like in Ada](https://github.com/rust-embedded/wg/issues/256#issuecomment-447738751)\r\n- [Make example-dependencies and test-dependencies be split up, instead of having both as dev-dependencies](https://github.com/rust-embedded/wg/issues/256#issuecomment-448866758)\r\n\r\n### Std\r\n\r\n- [math support in core](https://github.com/rust-embedded/wg/issues/256#issuecomment-438663420)\r\n- [Optimise memory routines in compiler-builtins.](https://github.com/rust-embedded/wg/issues/256#issuecomment-438488625)\r\n- [std::io in libcore/liballoc](https://github.com/rust-embedded/wg/issues/256#issuecomment-439744782)\r\n- [Ability to use format!() in non-std (embedded) contexts](https://github.com/rust-embedded/wg/issues/256#issuecomment-445528331)\r\n\r\n### Crate\r\n\r\n- [High quality RTOS bindings](https://github.com/rust-embedded/wg/issues/256#issuecomment-438489820)\r\n- [An easy to use SD/MMC and FAT32 library](https://github.com/rust-embedded/wg/issues/256#issuecomment-438569397)\r\n- [An easy to use USB host library](https://github.com/rust-embedded/wg/issues/256#issuecomment-438569808)\r\n- [An easy to use USB device library](https://github.com/rust-embedded/wg/issues/256#issuecomment-438570134)\r\n- [An easy to use pure-Rust RTOS](https://github.com/rust-embedded/wg/issues/256#issuecomment-438571019)\r\n- [A task scheduler](https://github.com/rust-embedded/wg/issues/256#issuecomment-438935300)\r\n- [GUI with desktop simulation support](https://github.com/rust-embedded/wg/issues/256#issuecomment-443406386)\r\n- [Easy firmware flashing for popular OS-es / SOCs (initially - stlink/DFU for linux/osx/win)](https://github.com/rust-embedded/wg/issues/256#issuecomment-445916750)\r\n- [singleton! and other arch independent APIs in arch independent lib (instead of cortex-m)](https://github.com/rust-embedded/wg/issues/256#issuecomment-448906360)\r\n\r\n### Resources\r\n\r\n- [Table/List of comparison/example between embedded_hal API vs Arduino API](https://github.com/rust-embedded/wg/issues/256#issuecomment-438772936)\r\n- [are-we-no-std-yet style community push](https://github.com/rust-embedded/wg/issues/256#issuecomment-439229019)\r\n- [Improve documentation needed to start experimenting with Rust on AVR, MSP430, RISC-V](https://github.com/rust-embedded/wg/issues/256#issuecomment-439326251)\r\n- [Improve crates.io or create separate site for no_std crates](https://github.com/rust-embedded/wg/issues/256#issuecomment-439634901)\r\n- [Create site listing all available embedded-hal implementations with supported MCUs and peripherals](https://github.com/rust-embedded/wg/issues/256#issuecomment-439635403)\r\n- [Recommended/Supported/Blessed way of doing unit or integration tests on Embedded systems.](https://github.com/rust-embedded/wg/issues/256#issuecomment-439686308)\r\n- [Complete usage examples for each trait in embedded-hal](https://github.com/rust-embedded/wg/issues/256#issuecomment-439827700)\r\n- [add end to end workflow for popular microcontroller such as arduinos](https://github.com/rust-embedded/wg/issues/256#issuecomment-445201443)\r\n- [Guidelines for vendor participation](https://github.com/aurabindo)\r\n\r\n---\r\n\r\ncc @rust-embedded/all please check this thread every now and then and update\r\nthe summary section\r\n"},"comment":{"url":"https://api.github.com/repos/rust-embedded/wg/issues/comments/450543589","html_url":"https://github.com/rust-embedded/wg/issues/256#issuecomment-450543589","issue_url":"https://api.github.com/repos/rust-embedded/wg/issues/256","id":450543589,"node_id":"MDEyOklzc3VlQ29tbWVudDQ1MDU0MzU4OQ==","user":{"login":"Lokathor","id":5456384,"node_id":"MDQ6VXNlcjU0NTYzODQ=","avatar_url":"https://avatars3.githubusercontent.com/u/5456384?v=4","gravatar_id":"","url":"https://api.github.com/users/Lokathor","html_url":"https://github.com/Lokathor","followers_url":"https://api.github.com/users/Lokathor/followers","following_url":"https://api.github.com/users/Lokathor/following{/other_user}","gists_url":"https://api.github.com/users/Lokathor/gists{/gist_id}","starred_url":"https://api.github.com/users/Lokathor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Lokathor/subscriptions","organizations_url":"https://api.github.com/users/Lokathor/orgs","repos_url":"https://api.github.com/users/Lokathor/repos","events_url":"https://api.github.com/users/Lokathor/events{/privacy}","received_events_url":"https://api.github.com/users/Lokathor/received_events","type":"User","site_admin":false},"created_at":"2018-12-30T07:14:37Z","updated_at":"2018-12-30T07:14:37Z","author_association":"NONE","body":"Ahhhh.... maybe? That's actually a really tough one. I think it's not _necessary_, even if you might want it in some cases.\r\n\r\nFunctions in Rust can already name other functions in Rust and the language handles it for you.\r\n\r\n```rust\r\n// the fact that `ValType::func` gets mangled doesn't stop this from working right\r\nlet mapped_opt_val = opt_val.map(ValType::func);\r\n```\r\n\r\nSo if you've got a Rust program that doesn't care about outside code being able to find its symbols, then you won't need to apply the `no_mangle` flag in that case. I think we can leave it up to a case by case basis.\r\n\r\nJust spitballing, but a \"complete\" program might look something like this:\r\n\r\n```rust\r\n#![no_std]\r\n#![feature(start)]\r\n\r\n#[panic_handler]\r\nfn panic(_info: &core::panic::PanicInfo) -> ! {\r\n  loop {}\r\n}\r\n\r\n#[transferable_fn]\r\npub fn runs_from_ram(x: isize) -> isize {\r\n    x // pretend this does something interesting\r\n}\r\n\r\n#[start]\r\nfn main(_argc: isize, _argv: *const *const u8) -> isize {\r\n    // This will point to the target location, transmuted to the correct fn type\r\n    let fptr: fn(u32) -> u32 = {\r\n        // Naturally users will need to be able to check the size of a\r\n        // compiled function somehow\r\n        if transfer_fn_size!(runs_from_ram) < 0xFF {\r\n            unsafe {\r\n                // This must panic if 0, should probably panic if unaligned,\r\n                // otherwise it does a memcopy to put the code in place\r\n                transfer_fn_here!(0x300_0000, runs_from_ram)\r\n            }\r\n        } else {\r\n            panic!(\"your func was too large!\")\r\n        }\r\n    };\r\n    fptr(5);\r\n}\r\n```"}}
{"actor":{"display_login":"Lokathor"}}