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 Rust Language Server alpha release. RLS provides a service that runs in the background, providing IDEs, editors, and other tools with information about Rust programs.
- Hyper 0.10 is released which no longer depends on OpenSSL, and next release will bring in non-blocking IO support.
- Parallelizing Enjarify in Go and Rust. Comparing Go and Rust performance in parallelism (source code).
- Mitigating underhandedness with Clippy.
- Coroutines and Rust.
- Text analysis in Rust: Tokenization.
- Assigning blame to unsafe code.
- Defining a ‘handshake’ protocol between two traits.
- Short intro to C++ for Rust developers: Ownership and borrowing.
- Using the Borrow Checker to make Tic-Tac-Toe safer.
- servo/rust-bindgen is now the canonical repository for
bindgen
crate. - Categories and CI badges are now available on crates.io.
Other Weeklies from Rust Community
- This week in Rust docs 40.
- This week in Servo 89.
- This week in Remacs 2017-01-19.
- This month in Zone of Control 2017-01-24. ZoC is a turn-based hexagonal strategy game.
- [video] Ferris makes Emulators 17: Envelopes and play control.
Crate of the Week
Since there were no nominations, this week has to go without a Crate of the Week. Sorry.
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.
- [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
139 pull requests were merged in the last week.
- 1.15 release notes
- implement placement-in on
BinaryHeap
- implement
#[proc_macro_attribute]
(RFC #1566) &Void
's uninhabitedness now feature gated- fix ICE on
fn f<T: ?for<'a> Sized>() {}
- warn, not ICE on unreachable patterns
- refactor parser to consume token trees
- merge
ObjectSum
andPolyTraitRef
in AST/HIR - rename
ExprKind::Vec
toArray
in HIR/HAIR - incremental compilation cleans up more garbage files
- fix UB in test helpers
- fix
u128
/i128
bugs on big endian systems - deprecate
#[unsafe_destructor_blind_to_params]
- highlight code in diagnostics
- fix jemalloc for OS X 10.2 and introduce it in Rust
- fix linker failure on windows
Duration
now implementsSum
rand
types now implementDebug
IpAddr
s are now comparable toIpv
Addr
s- epic slice iteration search speedups
- compile rmeta crates faster
- fix regression in parsing trait object types
- remove unused ABIs (
Os
/Architecture
) from libsyntax - extra bounds in trait impls are now denied
- lint attributes now work below item level
- better unused
extern crate
and#[macro_use]
warnings - building cargo is now reproducible
- examples can now be libraries
- procedural macro crates can now be doctested
cargo new
no longer allows numerical named cratescargo publish
now uploads CI badge information so crates.io can show the badgescargo publish
now uploads the categories on crates.io (Warning: Huge bikeshedding)
And my favorite PR title: "travis: Move glibc backwards in time"
New Contributors
- Colm Seale
- Constantin
- Eijebong
- gralpli
- Jack Vickeridge
- Jacob Wahlgren
- Josh
- krdln
- Lin Clark
- Martin Hafskjold Thoresen
- Matthew Dawson
- Richard S. Imaoka
- Stephen E. Baker
- theduke
Approved RFCs
Changes to Rust follow the Rust RFC (request for comments) process. These are the RFCs that were approved for implementation 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:
Closed RFCs
Following proposals were rejected by the team after their 'final comment period' elapsed.
- Const-dependent type system (also known as, Π-types and value-types).
- Add syntax for expressing tuples as a head and tail pair, similar to a Lisp cons cell.
New RFCs
- Write to standard error with
eprint!
andeprintln!
. - A portability lint.
- Improve the
assert_eq
failure message formatting to increase legibility. - Add official Gitter and Slack channels to compliment our official IRC channels.
- Add
extern type
declarations for declaring types from external libraries which have an unknown size/layout. - Include the
ManuallyDrop
wrapper incore::mem
. - Extend
?
to operate over other types. - Add built-in trait
Move
which all existing types will implement. Types which do not implement it cannot move after they have been borrowed. - Add metadata to diagnostic messages' json output.
- Stabilize drop order.
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!
PRs:
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.
..
vs_
.- function declarations.
- enum declarations.
- generics declarations.
Other significant issues:
Upcoming Events
- 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 User Group Cologne - Macros 1.1.
- 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.
- 2/8. Rust Community Team Meeting at #rust-community on irc.mozilla.org.
- 2/8. Rust Documentation Team Meeting at #rust-docs on irc.mozilla.org.
- 2/9. Rust Boulder/Denver - Redox OS with Denver Open Source OS.
- 2/9. Columbus Rust Society - Monthly Meeting.
- 2/9. 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
- Senior backend developer at OneSignal.
- Rust backend developer at 1aim.com.
- Rust systems programmer at Hadean.
- Rust engineer at MaidSafe
Tweet us at @ThisWeekInRust to get your job offers listed here!
Training opportunities
Three day Rust course at LinuxHotel. (German)
Quote of the Week
Yeah, it's like learning to dance when your partner [borrow checker] already knows all the steps. When you're just getting started, you step on their toes a lot, but over time you get the motions down. Eventually, you can start to anticipate their movements and start to appreciate the music as part of the dance, instead of just concentrating on getting your feet in the right place.
Thanks to matthieum for the suggestion.