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 Gotham - a flexible web framework that does not sacrifice safety, security or speed..
- What the RLS can do for Rust support in IDEs.
- Optimizing Rust.
- Rust for the web.
- Setting up a Rust environment on Windows.
- Of boxes and trees - smart pointers in Rust.
- Rustls and Servo.
- My experience contributing to Servo.
- Debugging a race condition in a release target.
- Designing a channel.
- Types as contracts: Implementation and evaluation.
- Exposing a Rust library to C.
- Think local, act local in Rust.
- Announcing Rusty Object Notation.
- Implementing a bot for Slack in Rust, Rocket and Anterofit - Part 2.
- Evolution of a simple
du -s
clone. - REST calls made rustic: RS-ES in idiomatic Rust tutorial.
- User-friendly Elasticsearch queries with Rust and Elastic.
- This week in Rust docs 68.
- These weeks in dev-tools 1.
- This week in Redox 28.
Crate of the Week
This week's crate is exa, a modern ls
replacement (with a tree
thrown in as well) written in Rust. 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.
- Pleco.rs - a chess engine in Rust is looking for contributors.
- [easy] bindgen: Rename
TypeKind::Named
toTypeKind::TypeParam
. - [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.
- PumpkinDB: Rust nightly after 2017-06-20 affects benchmarks negatively. (Discuss here).
- 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.
- [medium] lyon: Implement clipping line joins at the miter limit.
- [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
128 pull requests were merged in the last week
- cleanup in preparation of no-LLVM build support
#[must_use]
for functions- fix unused result lint triggering on functions returning
()
,!
or empty enums - rustc can now be built without jemalloc
- fixed the needless mut lint, found libcore bugs
- fixed
#[thread_local]
statics check - fix
-Z hir-stats
- fix region hashing
- nonlexical lifetimes region renumberer (one step closer to nonlexical lifetimes)
- rearchitect lints to be emitted more eagerly (broke clippy)
mem::unreachable
(the intrinsic, not the panic)- make
for_all_relevant_impls
O(1) again - add an overflow check to range's
Iter::next()
method (which turns out to make things faster) - optimize allocation paths in
RawVec
- improve error messages on duplicate type/method names
- better labeling of mismatched return type
- syntax hint for
extern C { .. }
errors - Validation now works correctly on blocks with multiple incoming edges
break rust
- the case of the missing error codes
New Contributors
- Alexey Tarasov
- arshiamufti
- Foucher
- Justin Browne
- Natalie Boehm
- nicole mazzuca
- Owen Sanchez
- Ryan Leckey
- Tej Chajed
- Thomas Levy
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] Evolving Rust through checkpoints.
- [disposition: close] Zero-Sized References.
- [disposition: merge] Generic associated types (associated type constructors).
- [disposition: close] Allow use of pipe operator in patterns.
- [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: merge] Add external doc attribute to rustc.
- [disposition: close] Match branch semicolon.
- [disposition: merge] Future-proofing enums/structs with
#[non_exhaustive]
attribute. - [disposition: merge] Enable nested method calls.
New RFCs
- Module redesign.
- Ok wrapping: Improved support for writing code from an error handling mindset.
- Introduce more potentially useful environment-related functions to
std::env
. - Unnamed fields of struct and union type.
- Attributes for tools, 2.0.
- Rand crate revision (pre-stabilisation). Evaluate options for the future of
rand
regarding both cryptographic and non-cryptographic uses.
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 18-19. RustConf 2017.
- Aug 19. Rust Bangalore - Rust "Traits" Workshop.
- 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.
- Aug 30. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Aug 30. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Aug 31. Rust NYC - Come learn about Rust.
- Aug 31. Rust London - Rust learning and hacking evening #2.
- Aug 31. Cambridge Rust Meetup - Rust Study Group.
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
once you can walk barefoot (C), it’s easy to learn to walk with shoes (go) but it will take time to learn to ride a bike (rust)
Thanks to Rushmore for the suggestion.