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
- Relaxed-memory concurrency synchronization patterns in Rust.
- How Glib-rs works, part 1: Type conversions and part 2: Transferring lists and arrays.
- GSoC: Making Redox self-hosting, final summary.
- GSoC: Wrapping up work on Rust Language Server.
- GSoC: Summary of KDevelop Rust plugin development.
- Adventures in logging.
- Tooling support while using rustc as a library.
- Notes from the Rain of Rust campaign.
- Rust FFI in a C Wireshark dissector.
- RustFest Zürich: Announcing first speakers.
- This week in Rust docs 70.
- [podcast] Request For explanation #9. This week's RFC is RFC 2094: Non-lexical lifetimes.
Crate of the Week
Sadly, we had no nomination for the crate of the week.
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.
- Libz blitz: crate evaluation for 2017-08-29: rayon.
- [easy] Diesel: Crash with special timestamp value in mysql (
0000-00-00 00:00:00
) through chrono. - Diesel: Deny missing docs.
- [less easy] bindgen: Add something like rustc's -Z time-passes.
- mio: Discuss platform support in the crate-level doc.
- mio: Link to MSDN doc on completion ports.
- mio: Consider deprecating only_v6 and set_only_v6.
- mio: Consistent case convention for name of the crate.
- mio: Clarify BSD support.
- mio: Expose EPOLLWAKEUP.
- mio: Expose EPOLLEXCLUSIVE.
- mio: Bound but not registered.
- mio: Single Evented on more than on Poll.
- mio: Multithreaded behavior of Poll.
- mio: Accept ToSocketAddrs.
- mio: SocketAddr argument to UdpSocket methods.
- mio: Rustdoc examples for mio::net methods.
- mio: Implement Hash for Event, PollOpt, Ready.
- mio: Consider using associated constants for the bitflag-like types.
- mio: Upgrade to a stable version of iovec.
- mio: Winapi in the public API of mio.
- mio: Document that UdpSocket::recv and recv_from do not read from the buffer.
- env_logger: Implement Debug for Logger and Filter.
- env_logger: Should we add new separate filter_module and filter_level to Builder?
- env_logger: Define and implement missing impls for Logger.
If you are a Rust project owner and are looking for contributors, please submit tasks here.
Updates from Rust Core
120 pull requests were merged in the last week
- Generator support
- warn by default on unused extern crates
- speed up APFloat divisions for small divisors
- generate builtin
Clone
impls - no needless
min_stack
on thread spawn if user has set stack size [T]::swap_with_slice(_)
- handle OS errors on joining threads
- relax syntax path grammar
- desugar parenthesized generic arguments in HIR
- elaborate trait obligations while type checking impls
- fix length of arrays with zero-sized-typed components
- feature gate
fn_must_use
(sorry, no insta-stable) - respect formatting flags for OSStr
- keep generic arguments out of attribute paths
- improve placement of
use
suggestions - improve message on missing condition after
else if
- the error emitter no longer confuses bytes with chars
- add let-bindings to the HIR parent map
- borrowck: name the correct type in error message
- querified MIR borrowck
- incr. comp.: Cache HIR-DepNodeIndices in HIR map
- fix missing
EndRegion
s because of faulty lookup - fix trait constraint cycle detection
- avoid duplication in rustdoc
- rustdoc: Add links to impls
New Contributors
- David Ross
- Evgeniy A. Dushistov
- Jouan Amate
- Matthew Hammer
- Michal 'vorner' Vaner
- Samuel Holland
- Sebastian Humenda
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation this week:
- RFC 2008: Future-proofing enums/structs with
#[non_exhaustive]
attribute. - RFC 1925: Allow an optional vert at the beginning of a match branch.
- RFC 2025: Enable nested method calls.
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] Add external doc attribute to rustc.
- [disposition: merge] Clamp function for primitive types.
- [disposition: merge] Generic associated types (associated type constructors).
- [disposition: merge] Evolving Rust through checkpoints.
- [disposition: merge] Allow Irrefutable Patterns in if-let and while-let statements.
New RFCs
- Clarify and streamline paths and visibility.
- Provide a community-wide banner server.
- Nested groups in imports.
- Crate changelogs. Add changelog support to
cargo
and crates.io. - Copy/Clone closures. Implement
Clone
andCopy
for closures where possible. - Compiler-generated Clone impls for arrays and tuples.
- Add
Option::filter
to the standard library.
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!
We're currently writing up the discussions, we'd love some help. Check out the tracking issue for details.
PRs:
Upcoming Events
- Aug 31. Mozilla Community Dresden - Rust Meetup.
- 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.
- Aug 31. Rust Roma Italy - Rust learning and hacking evening #1.
- Aug 31. Rust Bay Area - GRPC and Turing Tarpits.
- Sep 4. Rust Zurich - September Community Meetup.
- Sep 6. Rust Atlanta - Grab a beer with fellow Rustaceans.
- Sep 6. Rust Cologne - RFC Lightning Talks.
- Sep 6. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Sep 6. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Sep 6. OpenTechSchool Berlin - Rust Hack and Learn.
- Sep 7. Rust release triage.
- Sep 11. Seattle Rust Monthly Meetup.
- Sep 12. Rust Berlin Meetup - September 2017.
- Sep 13. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- Sep 13. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- Sep 14. Rust Washington, DC - Hacktember.
- Sep 14. Columbus Rust Society - Monthly Meeting.
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
Tweet us at @ThisWeekInRust to get your job offers listed here!
Quote of the Week
Abomonation has no safe methods. […] If you are concerned about safety, it may be best to avoid Abomonation all together. It does several things that may be undefined behavior, depending on how undefined behavior is defined.
— Frank McSherry in Abomonation docs.
Thanks to Adwhit for the suggestion.