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
- ๐๐ Announcing Rust 1.41.0. ๐๐
- Why Discord is switching from Go to Rust.
- Writing an OS in Rust: Updates in January 2020.
- Measuring space-time behaviours of piano keys with Rust.
- Build your own executor.
- Cross compiling Rust on Linux for the Raspberry Pi.
- The 2020 Rust event lineup.
- Writing AWS Lambda functions with Bastion.
- rust-search-extension: Search std docs, crates, error codes, and attributes in browser's address bar.
- The Embedded WG newsletter 23.
- Rust Analyzer changelog 10.
- IntelliJ Rust changelog 115.
- Rust in Blockchain newsletter 8: Looking forward to 2020.
- Announcing async-std v1.5.0.
- Announcing Tide 0.6.0.
Crate of the Week
This week's crate is faux, a trait-less mocking library for Rust.
Thanks to Vikrant for the suggestions!
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.
- serde_cbor crate is looking for maintainers.
- Diesel: Looking for persons willing to do some code review on submitted PRs.
- time: Implement function returning the local UTC offset. Looking for a code review of linked gist.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
291 pull requests were merged in the last week
- detect use-after-scope bugs with AddressSanitizer
- add support for Control Flow Guard on Windows
- add support for enabling the LLVM time-trace feature
- suggest defining type parameter when appropriate
- do not suggest duplicate bounds
- parser: avoid re-wrapping NtItem
- parser: syntactically allow
self
in allfn
contexts - check_match: extract common logic
- rustc_span: return an
impl Iterator
instead of aVec
frommacro_backtrace
- use
BufWriter
for emitting MIR - change opt-level from 2 back to 3
- shrink
Nonterminal
- avoid exponential behaviour when relating types
- deduplicate types in the generator witness
- add an early-exit to
QueryNormalizer::fold_ty
- add
raw-addr-of
variant tomir_raw_fat_ptr
- optimize
core::ptr::align_offset
- move numeric consts to associated consts (step 1)
- add
Iterator::map_while
- add
BTreeMap::remove_entry
- stabilize
debug_map_key_value
- stabilize
ptr::slice_from_raw_parts
(_mut
) - stabilize
core::iter::once_with()
- futures: allow async-await macros to be used without std
- cargo: swap std::sync::mpsc channel with crossbeam_channel
- cargo: stabilize config-profile
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
No RFCs are currently in final comment period.
Tracking Issues & PRs
No issues are currently in final comment period.
New RFCs
No new RFCs were proposed this week.
Upcoming Events
Europe
- Feb 7. Darmstadt, DE - Rust Rhein-Main - Rust Meetup โ Show Your Project.
- Feb 11. Zurich, CH - Rust Zurich - From cargo to kubernetes and back-up - February Meetup.
- Feb 12. Moscow, RU - Rust Moscow February 2019 Meetup.
- Feb 13. Munich, DE - Rust Munich - Lightning~ish Talks - First Edition.
- Feb 19. Berlin, DE - OpenTechSchool Berlin - Rust Hack and Learn.
- Feb 20. Turin, IT - Mozilla Torino - Gruppo di studio Rust.
- Feb 21. Stuttgart, DE - Rust Community Stuttgart - Rust Hack and Learn.
North America
- Feb 12. Houston, TX, US - Houston Linux Users Group - Rust Study Group.
- Feb 12. Portland, OR, US - PDXRust - WASM: Run Rust in the browser.
- Feb 13. Columbus, OH, US - Columbus Rust Society - Monthly Meeting.
- Feb 13. San Diego, CA, US - San Diego Rust February 2020 Meetup.
- Feb 13. Arlington, VA, US - Rust DC โ Mid-month Rustful.
- Feb 18. Redmond, WA, US - Seattle Rust Meetup - Monthly meetup in Redmond.
- Feb 19. Vancouver, BC, CA - Vancouver Rust meetup.
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
- Official /r/rust "Who's Hiring" thread for job-seekers and job-offerers [Rust 1.41].
- Software Engineer II at Akamai, Ottawa, CA.
- Backend Engineer - Rust at Kraken, Remote.
- Systems Engineer (Rust) at Consensys, Remote.
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
People argue about the color of a bike shed because even though it's a meaningless decision - it's still a decision that has to be made. The null choice is a very bad choice - if you don't paint the shed it'll rust. And there is no "default color" so you can't just say "just color it" - you have to pick a color.
Even seen someone argue about the pattern of the shed's paint? No. The pattern is not any more meaningful than the color, but unlike the color - there is a null choice. There is a default. Solid paint. And because there is a default, no one even thinks about using something else because why are you wasting company time and money on a pattern for a bike shed?
From my personal experience, when there is a default and the default is good enough, nobody bikesheds how to derive from the default. They only discuss it when there is a concrete problem with the default, where is doesn't fit your needs for whatever reason. And when you do have a concrete reason to derive from the default - you will derive from the default. Because you have to. And if the library does not support it - you'll switch the library.
Because you have to.
Thanks to Stephan Sokolow for the suggestion!
Please submit quotes and vote for next week!