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 an email! 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.
This week's edition was edited by: nasa42 and llogiq.
Updates from Rust Community
News & Blog Posts
- Announcing Rust 1.3.
- Asynchronous IO in Rust.
- An introduction to timely dataflow. Dataflow computational model written in Rust.
- An introduction to timely dataflow, part 2.. Writing super-powerful operators that do whatever you want to the streams.
- A Pythonista's irresistible attraction to Rust.
- Python Modules in Rust.
- Fine-grained timing and energy profiling in Servo.
- Seeking Compilation-Independent Type IDs in Rust.
- Running Rust code on the 3DS 2: Electric Boogaloo.
- Specialize to reuse. Specialization supports clean, inheritance-like patterns out of the box. This post explains how, and discusses the interaction with the “virtual structs” saga.
- Eliminating branches in Rust.
- Rust and the Monad trait - Not just higher kinded types.
Notable New Crates
- rustlings. Small exercises to get you used to reading and writing Rust code. Includes practice reading and responding to compiler messages!
- LALRPOP - an LR(1) parser generator for Rust.
- Cuprum Pi. A GPIO access library written on Rust for the Raspberry Pi.
- hostblock. Rust cli app for managing sites blocked via the hosts file.
- Tokei. A CLOC (Count Lines Of Code) program, written in Rust.
- rust.fish. Tab completions for
rustc
andcargo
in fish shell. - rust-xdg. A library that makes it easy to follow the X Desktop Group specifications.
Updates from Rust Core
116 pull requests were merged in the last week.
Notable changes
- Feature-gate
#[no_debug]
and#[omit_gdb_pretty_printer_section]
. - Warn on
pub extern crate
. - Remove Visibility field from enum variants.
- Add a blanket
impl
for&mut std::fmt::Write
. - Implement overload-able augmented/compound assignments, like
a += b
via theAddAssign
trait. - Implement empty structs with braces.
- Split up lint interface into pre- and post-expansion lints.
New Contributors
- Bastien Dejean
- Colin Wallace
- David Szotten
- Dongie Agnir
- Michael McConville
- Peter Reid
- whitequark
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
- 1199: Lay the ground work for building powerful SIMD functionality..
- 1224: Update the RFC process with sub-teams, amongst other things..
- 1238: Revise the Drop Check (
dropck
) part of Rust's static analyses. - 1240: References into
repr(packed)
structs should beunsafe
.
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. This week's FCPs are:
- Forbid wildcard dependencies on crates.io.
- Amend #911 const-fn to allow unsafe const functions.
- Place left arrow syntax (
place <- expr
).
New RFCs
Upcoming Events
- 9/23. Columbus Rust Society.
- 9/25. Rust Wellington.
- 9/28. Rust Sydney Meetup.
- 9/30. RustBerlin Hack and Learn.
- 10/1. Rust Meetup Hamburg: Rusty Project Presentations.
If you are running a Rust event please add it to the calendar to get it mentioned here. Email Erick Tryzelaar or Brian Anderson for access.
fn work(on: RustProject) -> Money
No jobs listed for this week. Tweet us at @ThisWeekInRust to get your job offers listed here!
Crate of the Week
This is a new part of this weekly installation, where we will write about a crate that some of you may not know. Please nominate a crate of your choice at the rust-users thread so we can write about it next week.
This week, Crate of the Week is lazy_static. Thanks go to stebalien for the suggestion.
This week's Crate of the Week does something some won't know is possible, and does it in a natural way. You know how in some languages you have to run through hoops to correctly lazily instantiate stuff? Not in Rust, for thanks to the lazy_static crate you just put your static values inside a lazy_static! { ... }
block, pay a modest runtime cost on lookup and be done.
Btw, this aligns very well with the C++ adage "... and what you pay for, you couldn't have written any better".
Quote of the Week
Transmute is taking a dog, sawing its front legs off, gluing on a pair of buffalo wings and telling it it's a duck so it damn well better start quacking You should not be surprised when you end up with a pile of gore and a dead dog instead of an actual duck :-P — Quxxy
Thanks to Ms2ger for the tip. Submit your quotes for next week!.