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 Tokio 0.1.
- Forensic tool development with Rust (pdf).
- PEG parser combinators using operator overloading without macros.
- Rust tidbits: Box is special.
- Rust tidbits: What is a lang item?
- Let’s stop ascribing meaning to Code Points.
- Steed: Let’s build a standard library (std) free of C code / dependencies for Linux.
- Remacs: Porting Emacs to Rust.
- How do I satisfy the borrow checker.
- Rust on Teensy part 1: Bootup to LED. PJRC Teensy is a USB-based microcontroller development system.
- How to make something public within a crate, but private outside it.
- Debugging Rust's new Custom Derive system.
- Announcing Rust Contributors.
- Announcing Language team shepherds. Language team is creating a group of shepherds, comprising of members of the community with an increased level of trust and responsibility. They will guide discussion on RFCs, mentor RFC authors, and collaborate on improving designs and expositions.
- Rust and the limits of swarm design. Follow-up to - Rust severely disappoints me.
- [video playlist] Videos from Rust Belt Rust 2016 are now available.
Other Weeklies from Rust Community
- This week in Rust docs 39.
- This week in Servo 88.
- This week in Ruma 2017-01-15.
- These weeks in Ruru 6.
- What's coming up in imag 22
Crate of the Week
This week's Crate of the Week is alacritty, an OpenGL-propelled Terminal application. Really fast, nice looking. Missing scrollback. Thanks to Vikrant 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.
- Rust::from(lang) is a project to help people transition from other languages to Rust with articles that show how to do something in one language and then how to do it in Rust and comparing the two. You can help by writing examples or request for articles on problems you need help with.
- [easy] rust: Removal of the lang feature gate tests whitelist.
- rust: Make Rust on wasm + emscripten a reliable, 1st class Rust target.
- [easy] rust: Rvalue static promotion.
- [easy] Diesel: Refactorings using macros in type position.
- [easy] Diesel: Deny missing docs.
- android-rs-glue: Add more arguments and use clap to parse the arguments.
- tokei: Add package repositories.
- RustCrypto/hashes: Missing hash functions.
- RustCrypto/block-ciphers: Missing block ciphers.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
119 pull requests were merged in the last week.
- jemalloc now x86(_64)-only
- actual ranges for
BTree::range(_)
- better ergonomics for iterators yielding
Result
s use _::{self, ..}
now only importsself
once (breaking change)- faster UTF-8 validation
- enable attributes and
cfg
on struct fields - allow lint attributes on non-item nodes
- MIR constant promote
fn
arguments correctly - use little, nbot native endian for Blake2 hashing
- more complete
save-analysis
- unions don't get drop glue
impl Display for char::
{Escape
,To*Case
}- cache predecessors for incremental compilation
cargo test --doc
now correctly handles dev-dependencies- allow specifying numerical debuginfo level
cargo build --all
,cargo doc --all
New Contributors
- Behnam Esfahbod
- Benjamin Saunders
- Ben Wiederhake
- Bjorn Tipling
- Christopher Armstrong
- Craig Macomber
- Djzin
- Jeff Waugh
- Tyler Julian
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. This week's FCPs are:
- Allow uncallable method impls to be omitted.
- Const-dependent type system (also known as, Π-types and value-types).
- Extend
Cell
to work with non-Copy
types. - Macros by example 2.0. A replacement for
macro_rules!
. - Add syntax for expressing tuples as a head and tail pair, similar to a Lisp cons cell.
- Allow coercing non-capturing closures to function pointers.
Closed RFCs
Following proposals were rejected by the team after their 'final comment period' elapsed.
- Abort by default v2. Specify abort-by-default in
Cargo.toml
when the user doescargo new --bin
, as well as various other refinements to the panick strategy system.
New RFCs
No new RFCs were proposed this week.
Style RFCs
Style RFCs are part of the process for deciding on style guidelines for the Rust community and defaults for Rustfmt. The process is similar to the RFC process, but we try to reach rough consensus on issues (including a final comment period) before progressing to PRs. Just like the RFC process, all users are welcome to comment and submit RFCs. If you want to help decide what Rust code should look like, come get involved!
Ready for PR:
There's a lot of them right now, contributions here would be very welcome. If you want advice or help getting started, please ping nrc, or any other member of the style team, in #rust-style.
Issues in final comment period:
- Whitespace in associated type syntax.
- Against braces always demanding rightward drift.
- Disable trailing comma by default.
- Conventions for Cargo.toml files (FCP).
- function declarations.
- Customisation of Rustfmt should be allowed.
Upcoming Events
- 1/18. Rust Cologne: Ruby meets Rust.
- 1/18. Rust LA Monthly Meetup - Hack Night.
- 1/18. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 1/18. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- 1/19. Rust Paris: Rust meetup #35.
- 1/19. GPU enhanced terminals, Counting Votes, and Converting C to Rust.
- 1/20. Rust Rhein-Main: Rust Table of Regulars Darmstadt.
- 1/24. Mozilla Meetup Switzerland: Rust January Meetup @ Coredump.ch.
- 1/25. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 1/25. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- 1/25. OpenTechSchool Berlin: Rust Hack and Learn.
- 1/26. Rust Stockholm: REST in Rust and Rust Hack Night.
- 1/26. Rust release triage.
- 1/28. Rust MX - Rust Meetup in Mexico City.
- 2/1. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 2/1. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- 2/2. Stockholm Google Developer Group - Rust Talk.
- 2/4 - 2/5: FOSDEM 2017 Belgium - Meeting for Rustaceans.
If you are running a Rust event please add it to the calendar to get it mentioned here. Email the Rust Community Team for access.
Rust Jobs
- Senior backend developer at OneSignal.
- Rust backend developer at 1aim.com.
- Rust systems programmer at Hadean.
- Embedded software engineer at ATS
- Rust engineer at MaidSafe
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
I really hate the phrase "fighting". Calling it a fight doesn't do justice to the conversations you have with the borrow checker when you use Rust every day. You don't fight with the borrow checker, because there isn't a fight to win. It's far more elegant, more precise. It's fencing; you fence with the borrow checker, with ripostes and parries and well-aimed thrusts. And sometimes, you get to the end and you realize you lose anyway because the thing you were trying to do was fundamentally wrong. And it's okay, because it's just fencing, and you're a little wiser, a little better-honed, a little more practiced for your next bout.
Thanks to Manishearth for the suggestion.