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
- Revisiting Rust’s modules, part 2.
- RustFest 2017: Supporter tickets on-sale, diversity ticket applications open.
- JetBrains announces official support for Rust plugin for IntelliJ IDEA, CLion, and other JetBrains IDEs.
- Building a mobile app in Rust and React Native - part 1.
- Asynchronous Rust: complaints & suggestions.
- A Stratego interpreter in Rust. Building a faster interpreter for an old language in Rust.
- Compile-time safety is for everybody. Follow-up to Ownership is theft.
- Fearless concurrency with hazard pointers.
- Scrapmetal — Scrap your Rust boilerplate.
- Rust: Optimising decoder experience. Follow-up to Rust: Not so great for codec implementing.
- This week in Rust docs 67.
Crate of the Week
This week's crate is aesni, a crate providing a Rust AES (Rijndael) block ciphers implementation using AES-NI. Thanks to newpavlov 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.
- PumpkinDB: Rust nightly after 2017-06-20 affects benchmarks negatively. (Discuss here).
- [easy] gimli: Improve error handling in dwarfdump. gimli is a lazy, zero-copy parser for the DWARF debugging format.
- wayland-window: Add control buttons.
- wayland-window: Make borders prettier.
- [doc] lyon: API guidelines: methods on collections that produce iterators follow the iter, iter_mut, into_iter conventions. Lyon is a GPU-based 2D graphics rendering engine in Rust.
- [doc] lyon: API guidelines: ad-hoc conversions follow as_, to_, into_ conventions.
- [doc] lyon: API guidelines: iterator type names should match the methods that produce them.
- [doc] lyon: API guidelines: return error type from functions instead of empty struct.
- [medium] lyon: Implement clipping line joins at the miter limit.
- [less easy] bindgen: Emitting or deriving trait implementations.
- [less easy] bindgen: Emit a "manual" implementation of Debug when it cannot be derived.
- [less easy] bindgen: "manually" implement Hash when it cannot be derived.
- [less easy] bindgen: "manually" implement PartialEq when it cannot be derived.
- [less easy] bindgen: Derive
Eq
when possible. - [less easy] bindgen: "manually" implement Eq when we cannot derive it.
- [less easy] bindgen: Derive PartialOrd when possible.
- [less easy] bindgen: "manually" implement PartialOrd when we cannot derive it.
- [less easy] bindgen: Derive Ord when possible.
- [less easy] bindgen: "manually" implement Ord when we cannot derive it.
- [doc] rust-ffi-guide: Make the book more consistent.
- [easy] ggez: Input doesn't work on mac using tmux and iterm2. ggez is a Rust library to create good games easily.
- [easy] ggez: SDL controller input doesn't work.
- [doc] ggez: Finish full building-and-install docs for each platform.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
105 pull requests were merged in the last week
- rewrite large float math in Rust and use it for stable compile-time evaluation
- borrowck: skip CFG construction when there is nothing to propagate (awesome memory savings)
- cycle-free dependency graph
- fix instability in import suggestions (alas, re-exports still aren't correctly filtered)
- fix quadratic performance on
use
statements - save-analysis fixes
- save subobligations in the projection cache
- don't warn on unused
union
fields - error code & explanation for calling private methods from outside
- improve error message for trying static dispatch on trait object
- the case of the missing error codes
- {
StdIn
,StdOut
,StdErr
}.as_raw_fd()
- MIR Validate statement (hook for unsafe code guidelines validation via miri)
- MIR don't build unused unwind cleanup blocks
- MIR trans no longer ICEs on assignment errors
- more parallelization between trans and LLVM
- inline bitwise modification ops
New Contributors
- Eric Daniels
- Mario Idival
- Ryan Leckey
- scalexm
- Tobias Schaffner
- Tymoteusz Jankowski
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:
- [disposition: merge] Allow an optional vert at the beginning of a match branch.
- [disposition: merge] Unsafe pointer methods.
- [disposition: merge] Amend RFC 1242 to require an RFC for deprecation of crates from the nursery.
- [disposition: close] Match branch semicolon.
- [disposition: merge] Future-proofing enums/structs with
#[non_exhaustive]
attribute. - [disposition: merge] Enable nested method calls.
- [disposition: close] Zero-Sized References.
- [disposition: merge] Evolving Rust through checkpoints.
- [disposition: close] Allow use of pipe operator in patterns.
- [disposition: merge] Generic associated types (associated type constructors).
New RFCs
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!
The RFC style is now the default style in Rustfmt - try it out and let us know what you think!
Currently being discussed:
Upcoming Events
- Aug 10. Rust release triage.
- Aug 10. Columbus Rust Society - Monthly meetup.
- Aug 14. Seattle Rust Meetup.
- Aug 16. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Aug 16. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Aug 18-19. RustConf 2017.
- Aug 23. GOTO Night Berlin: Modern low level - Rust in 2017.
- Aug 23. OpenTechSchool Berlin: Rust Hack and Learn.
- Aug 23. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Aug 23. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Aug 24. Rust release triage.
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
No jobs listed for this week.
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Nah, it's not you, it's the borrow checker.
Honey, it's not you, it's &mut me.
You can borrow me, and you can change me, but you can't own me.
— /u/staticassert, /u/ybx, and /u/paholg on reddit.
Thanks to Matt Ickstadt and QuadDamaged for the suggestion.