Hello and welcome to another issue of This Week in Rust! Rust is a systems language pursuing the trifecta: safety, concurrency, and speed. This is a weekly summary of its progress and community. Want something mentioned? Tweet us at @ThisWeekInRust or send us a pull request. Want to get involved? We love contributions.
This Week in Rust is openly developed on GitHub. If you find any errors in this week's issue, please submit a PR.
Updates from Rust Community
News & Blog Posts
- Why I'm building a new async runtime.
- Futures explained in 200 lines of Rust.
- Sled: Error handling in a correctness-critical Rust project.
- Most commonly ignored lints.
- A brief apology of Ok-Wrapping.
- From failure to Fehler.
- The embedded WG's Raspberry Pi OS dev tutorials: Tutorial 14 - exceptions part 2: peripheral IRQs.
- Contributing to Rust: Nine patches.
- Inside Rust: Update on the GitHub Actions evaluation.
- Programming Servo: Workers at your service.
- Iced, a cross-platform GUI library: New release featuring custom styling, event subscriptions, additional widgets, new examples, and more.
- rust-analyzer changelog 19.
- This month in rustsim 10 - March 2020.
- This month in Rust GameDev 8 - March 2020.
Crate of the Week
This week's crate is explaine.rs, an interactive Rust syntax playground.
Thanks to Vlad Frolov for the suggestion!
Submit your suggestions and votes for next week!
Call for Participation
Always wanted to contribute to open-source projects but didn't know where to start? Every week we highlight some tasks from the Rust community for you to pick and get started!
Some of these tasks may also have mentors available, visit the task page for more information.
No issues were proposed for CfP.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
443 pull requests were merged in the last week
- handle unterminated raw strings with no
#
s properly - parse: recover on
const fn()
/async fn()
- improve error messages for raw strings
- remove unused discriminant reads from MIR bodies
- track the finalizing node in the specialization graph
- use smaller span for suggestion restricting lifetime
- fix performance regression in debuginfo
file_metadata
- enable layout debugging for
impl Trait
type aliases - polonius: update facts to remove the rest (🤞) of the move errors false positives
- chalk: use fallback debug impls instead of
unimplemented
- chalk: goal builder
- chalk: intern
Vec<ProgramClause<I>>
- typeck/type_of: let wfcheck handle generics in opaque types' substs
- miri: make backtrace function names and spans match up
- miri terminator handling: only do progress sanity check for 'Call' terminator
- fix double-free and undefined behaviour in
libstd::syn::unix::Thread::new
- std: fix over-aligned allocations on wasm32-wasi
- add
-Z dump-mir-dataflow
flag for dumping dataflow results visualization - stabilize
float::to_int_unchecked
- avoid creating unnecessary reference in Windows
Env
iterator - implement
Hash
forInfallible
- optimize
strip_prefix
andstrip_suffix
withstr
patterns - add shims for
RwLock::
{try_read
,try_write
} - query-ify
Instance::resolve
- stdarch: support
crc32
even if on arm32 - add
slice::fill
- expand
vec![]
toVec::new()
- detailed panic messages for
Vec
functions - fix some aliasing issues in
Vec
- add
fn make_contiguous
toVecDeque
BTreeMap
/BTreeSet
: implementdrain_filter
- keep track of position when deleting from a
BTreeMap
- use
ManuallyDrop
instead offorget
inside collections - match options directly in the
Fuse
implementation - place TLS initializers with relocations in .tdata
- futures: reduce box allocation in bilock
- futures: impl
Extend
forSelectAll
- hashbrown: micro optimize
repeat
function
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
No RFCs were approved this week.
Final Comment Period
Every week the team announces the 'final comment period' for RFCs and key PRs which are reaching a decision. Express your opinions now.
RFCs
- [disposition: merge] Unsafe blocks in unsafe fn.
Tracking Issues & PRs
- [disposition: merge] Tracking issue for PathBuf capacity methods.
- [disposition: merge] Remove -Z no-landing-pads flag.
- [disposition: merge] Move LLVM bitcode destination.
New RFCs
Upcoming Events
Online
- Apr 10. Samara, RU - Rust Users Team Samara - Online meetup.
- Apr 14. Seattle, WA, US - Seattle Rust Meetup - Monthly meetup.
- Apr 23. Turin, IT - Rust Turin online meetup.
Europe
North America
- Apr 15. Vancouver, BC, CA - Vancouver Rust - Rust Study/Hack/Hang-out night.
- Apr 22. Ann Arbor, MI, US - Ann Arbor Rust Meetup - Monthly Gathering.
If you are running a Rust event please add it to the calendar to get it mentioned here. Please remember to add a link to the event too. Email the Rust Community Team for access.
Rust Jobs
- Rust Developer (US & Canada) at 1Password.
- Infrastructure Engineer at Aleph Alpha, Heidelberg, Germany.
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
In many cases, it is possible to completely rearchitect the underlying code while leaving the public API as-is, and without introducing new bugs. I've literally never had such a liberating experience with refactoring until Rust.
In other words, I have never been so productive in any other language. Dynamic languages like JavaScript and Python are the least productive by far. Code runs, tests pass, put it into production and... uncaught exception! Time to rollback and redo that whole dance AGAIN. With Rust, we take care of all of that crap while actually writing the code the first time. No more surprise 3am wake up calls. That is productivity.
Thanks to Louis Cloete for the suggestions!
Please submit quotes and vote for next week!