summaryrefslogtreecommitdiffstats
path: root/content/2015-01-19-this-week-in-rust.md
blob: 6404558925408c59f9c7ec3846332a3921ab0bc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
Title: This Week in Rust 66
Date: 2015-01-19
Category: This Week in Rust

Hello and welcome to another issue of *This Week in Rust*!
[Rust](http://rust-lang.org) is a systems language pursuing the trifecta:
safe, concurrent, and fast. This is a weekly summary of its progress and
community. Want something mentioned? [Send me an
email!](mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion)
Want to get involved? [We love
contributions](https://github.com/mozilla/rust/wiki/Note-guide-for-new-contributors).

This Week in Rust is openly developed [on Github](https://github.com/cmr/this-week-in-rust).
If you find any errors or omissions in this week's issue, [please submit a PR](https://github.com/cmr/this-week-in-rust/pulls).

# What's cooking on master?

119 pull requests were [merged in the last week][code], and 1 [RFC][rfcs].

[code]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18
[rfcs]: https://github.com/rust-lang/rfcs/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18

Now you can follow breaking changes *[as they happen][BitRust]*!

[BitRust]: http://bitrust.octarineparrot.com/

## Breaking Changes

* `AtomicInt` and `AtomicUint` have been [renamed][atomic] to
  `AtomicIsize` and `AtomicUsize` to match their corresponding integer
  types.
* To fix a bug in coherence [builtin traits can only be implemented
  for structs and enums][cohere].

[atomic]: https://github.com/rust-lang/rust/pull/20896
[cohere]: https://github.com/rust-lang/rust/pull/21167

## Other Changes

* Certain long error messages of the form 'expected foo found bar' are
  now [split neatly across multiple lines][multiline]. Examples in the
  PR.
* UFCS method calls can now be [qualified by the trait][ufcs] of the
  method.  This can be used to disambiguate method calls when multiple
  applicable methods are in scope, e.g. `<i32 as Add<_>>::add(1, 2)`
  which is equivalent to `1.add(2)`. [RFC][ufcs-rfc].
* Negative impls are [partially implemented][negimpl], though appear
  to still be special-cased to the `Send` and `Sync`
  traits. [RFC][negimpl-rfc].
* Mutexes on Windows are faster now they are [implemented with Slim
  Reader Writer Locks][mutex].
* The `#[rustc_on_unimplemented]` attribute, requiring the
  'on_unimplemented' feature, lets rustc [display custom error
  messages when a trait is expected to be implemented for a type but
  is not][onun].
* [Preliminary support for PowerPC][powerpc].
* Fatal runtime errors are [now suitably boring][bore].

[multiline]: https://github.com/rust-lang/rust/pull/19870
[mutex]: https://github.com/rust-lang/rust/pull/20367
[onun]: https://github.com/rust-lang/rust/pull/20889
[negimpl]: https://github.com/rust-lang/rust/pull/20972
[negimpl-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md
[powerpc]: https://github.com/rust-lang/rust/pull/20980
[ufcs]: https://github.com/rust-lang/rust/pull/21077
[ufcs-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0132-ufcs.md
[bore]: https://github.com/rust-lang/rust/pull/20944

## New Contributors

* Aidan Hobson Sayers
* Alexander Korolkov
* Andrew Barchuk
* Cam Jackson
* CarVac
* Diggory Blake
* Fenhl
* Greg Chapple
* Jeff Belgum
* Lauri Lehmijoki
* nathan dotz
* Paul Crowley
* Seth Faxon
* Toni Cárdenas
* Travis Watkins

# Approved RFC's

* [517: io and os reform (skeleton)][rfc-517]. Updating the `io` and
  `os` modules is a large task and at the moment the RFC only lays out
  the motivation. It will be updated incrementally in further pull
  requests. [PR][rfc-517-pr]. Many follow-ups have been posted for
  review: [string handling][rfc-517-string],
  [`Reader`/`Writer`][rfc-517-readwrite], [deadlines][rfc-517-dead],
  [`std::env`][rfc-517-env], [`std::process`][rfc-517-process].

[rfc-517]: https://github.com/rust-lang/rfcs/blob/master/text/0517-io-os-reform.md
[rfc-517-pr]: https://github.com/rust-lang/rfcs/pull/517
[rfc-517-readwrite]: https://github.com/rust-lang/rfcs/pull/576
[rfc-517-string]: https://github.com/rust-lang/rfcs/pull/575
[rfc-517-dead]: https://github.com/rust-lang/rfcs/pull/577
[rfc-517-env]: https://github.com/rust-lang/rfcs/pull/578
[rfc-517-process]: https://github.com/rust-lang/rfcs/pull/579

# New RFC's

* [Use `isz`/`usz` as literal suffix for `isize`/`usize`][rfc-573-pr].
* [Replace `Vec::drain` by a method that accepts a range parameter][rfc-574-pr].
* [Rename (maybe one of) the standard collections for
  consistency][rfc-580-pr]. Proposes several possible renamings.
* [Add `foreach` to iterators][rfc-582-pr]. An internal iterator.
* [Add `fmt` size hints][rfc-583-pr]. Allows buffers to be optimized.
* [Remove `proc` keyword][rfc-584-pr]. Why isn't it gone already?
* [Negative bounds][rfc-586-pr]. Gives flexibility to avoid coherence
  conflicts.
* [Make return types of `Fn` traits associated
  types][rfc-587-pr]. More flexible because it doesn't require generic
  return types to be constrained.
* [Early trait bounds on generic types][rfc-590-pr]. Create a
  convention to always apply trait bounds to wrapper types to improve
  error messages when the bounds on the underlying types or methods
  can't be satisfied.
* [sizeof, alignof, offsetof, typeof][rfc-591-pr].
* [CStr, the dereferenced complement to CString][rfc-592-pr].
* [Forbid identifier `Self` for definitions][rfc-593-pr]. Fixing a
  weird corner case that results from `Self` not being a keyword.
* [Support incremental compilation][rfc-594-pr]. Rearchitect the
  compiler.
* [Output option handling][rfc-595-pr]. Make rustc's `-o`,
  `--out-dir`, and `--emit` options more consistent.

[rfc-573-pr]: https://github.com/rust-lang/rfcs/pull/573
[rfc-574-pr]: https://github.com/rust-lang/rfcs/pull/574
[rfc-580-pr]: https://github.com/rust-lang/rfcs/pull/580
[rfc-582-pr]: https://github.com/rust-lang/rfcs/pull/582
[rfc-583-pr]: https://github.com/rust-lang/rfcs/pull/583
[rfc-584-pr]: https://github.com/rust-lang/rfcs/pull/584
[rfc-586-pr]: https://github.com/rust-lang/rfcs/pull/586
[rfc-587-pr]: https://github.com/rust-lang/rfcs/pull/587
[rfc-590-pr]: https://github.com/rust-lang/rfcs/pull/590
[rfc-591-pr]: https://github.com/rust-lang/rfcs/pull/591
[rfc-592-pr]: https://github.com/rust-lang/rfcs/pull/592
[rfc-593-pr]: https://github.com/rust-lang/rfcs/pull/593
[rfc-594-pr]: https://github.com/rust-lang/rfcs/pull/594
[rfc-595-pr]: https://github.com/rust-lang/rfcs/pull/595

# Community

The [periodic table of Rust types][period] has been updated, and
/r/rust finally hit [8 trillion subscribers][trill].

[period]: http://cosmic.mearie.org/2014/01/periodic-table-of-rust-types/
[trill]: https://www.reddit.com/r/rust/comments/2sn91h/8_trillion_subscribers_we_did_it_reddit/

## From the Team

* [Weekly-meetings/2015-01-13][mtg]. fott; homu; integer overflow;
  I/O; 1.0; comment RFC

[mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2015-01-13.md

## Blog Posts

* [Thoughts about Rust from a D programmer][d]. Good
  comparison. [/r/rust][d-r-rust]. [/r/programming][d-r-programming].
* [Recent syntactic changes][syntax]. Nick discusses some of the
  last-minute syntax changes he's recently landed.
* [Little Orphan Impls][orphan]. Niko discusses options for coherence
  rules. [/r/rust][orphan-r-rust].
* [Unboxed Closures and FFI Callbacks][ffi]. How to use closures as
  foreign callbacks.
* [A Quick Comparison of Nim vs. Rust][nim]. [HN][nim-hn]. [/r/rust][nim-r-rust].
  [/r/programming][nim-r-programming].
* [Mooney GB: A Gameboy emulator written in Rust][mooneye].
* [Building a HashMap in Rust - Part 1: What's a
  Hashmap?][hashmap]. Gankro on the Rust
  HashMap. [/r/rust][hashmap-r-rust].
* [Worklog 2015-01-17: Rustdoc testing][rustdoc]. Yurume on his new
  patch to test rustdoc output.
* [Solving Project Eueler with Rust][euler]. A walk through of the
  first problem.
* [Getting started contributing to Rust][started]. kmc's slides from
  the Saturday event in SF.
* [Explore ownership in Rust][pwned]. Good entry level discussion of
  ownership. [/r/rust][pwned-r-rust].
* [DTrace on Rust][dtrace].
* [SystemTap on Rust][systemtap]. Not to be outdone.
* [Summary of Korean Rust Meetup #4][korea]. The Korean Rust
  contingent is always up to interesting stuff.

[d]: http://blog.dicebot.lv/2015/01/thoughts-about-rust-from-d-programmer.html
[d-r-rust]: https://www.reddit.com/r/rust/comments/2s7bnt/thoughts_about_rust_from_d_programmer/
[d-r-programming]: https://www.reddit.com/r/programming/comments/2s70mm/thoughts_about_rust_from_a_d_programmer/
[nim]: http://arthurtw.github.io/2015/01/12/quick-comparison-nim-vs-rust.html
[nim-hn]: http://news.ycombinator.com/item?id=8883791
[nim-r-rust]: https://www.reddit.com/r/rust/comments/2sd5rv/a_quick_comparison_of_nim_vs_rust/
[nim-r-programming]: https://www.reddit.com/r/programming/comments/2scodb/a_quick_comparison_of_nim_vs_rust/
[syntax]: http://featherweightmusings.blogspot.co.nz/2015/01/recent-syntactic-changes-to-rust.html
[euler]: http://unlogic.co.uk/2015/01/12/solving-project-euler-with-rust-1/
[dtrace]: https://twitter.com/bcantrill/status/555143487482368000
[mooneye]: http://gekkio.fi/blog/2015-01-13-mooneye-gb-a-gameboy-emulator-written-in-rust.html
[systemtap]: https://gist.github.com/cuviper/08239cbae023411a29d9
[orphan]: http://smallcultfollowing.com/babysteps/blog/2015/01/14/little-orphan-impls/
[orphan-r-rust]: https://www.reddit.com/r/rust/comments/2sfm4a/little_orphan_impls_nikos_blog/
[hashmap]: http://cglab.ca/~abeinges/blah/robinhood-part-1/
[hashmap-r-rust]: https://www.reddit.com/r/rust/comments/2sjayc/building_a_hashmap_in_rust_part_1_whats_a_hashmap/
[ffi]: http://aatch.github.io/blog/2015/01/17/unboxed-closures-and-ffi-callbacks/
[rustdoc]: https://lifthrasiir.github.io/rustlog/worklog-2015-01-17.html
[started]: http://kmcallister.github.io/talks/rust/2015-contributing-to-rust/slides.html
[pwned]: http://nercury.github.io/rust/guide/2015/01/19/ownership.html
[pwned-r-rust]: https://www.reddit.com/r/rust/comments/2sv4uv/explore_ownership_system_in_rust/
[korea]: https://gist.github.com/lifthrasiir/93ba9f6aec7bd2113941

## Videos

* [Servo: Building a Parallel Web Browser][servo]. Jack Moffit at
  linux.conf.au. [HN][servo-hn]. [/r/programming][servo-r-programming].

[servo]: https://youtu.be/7q9vIMXSTzc
[servo-hn]: https://news.ycombinator.com/item?id=8899812
[servo-r-programming]: https://www.reddit.com/r/programming/comments/2lcap0/an_introduction_to_servo/

## Discussions

* [Small string optimization, remove as_mut_vec][small]. The current
  definition of `Vec` doesn't allow the common 'small string'
  optimization. [/r/rust][small-r-rust].
* [Does Rust let you develop faster than C++?][fast]. TL;DR ¯\\\_(ツ)_/¯
* [Using Rust 1.0 for video game development][games]. Yes, please.
* [Rust support in Visual Studio][vs]. Doesn't exist yet, sorry.
* [Rust Berlin community efforts][berlin]. Berlin needs you!
* [By value operator overloading problems][over]. Implementing math
  operators for non-copyable types means you have to pass them by
  reference, like `&a + &b`, which some consider unsightly.

[games]: https://www.reddit.com/r/rust/comments/2s4kp9/using_rust_10_for_video_game_development/
[vs]: https://www.reddit.com/r/rust/comments/2s5d65/rust_support_in_visual_studio/
[fast]: https://www.reddit.com/r/rust/comments/2sa2qx/does_rust_let_you_develop_faster_than_c/
[berlin]: https://www.reddit.com/r/rust/comments/2sbkuo/rustberlin_community_efforts/
[small]: http://internals.rust-lang.org/t/small-string-optimization-remove-as-mut-vec/1320
[small-r-rust]: https://www.reddit.com/r/rust/comments/2slcs8/small_string_optimization_remove_as_mut_vec/
[over]: https://www.reddit.com/r/rust/comments/2srz0g/by_value_operator_overloading_problems/

## New Projects

* [launch-code]. Cryptographic auditing of unsafe code. [/r/rust][launch-code-r-rust].
* [rust-cipher]. Encryption with XSalsa20 and BLAKE2B-512 in the
  Encrypt-then-MAC mode.
* [rust-haskell-ffi]. Example of calling Rust from Haskell.
* [dynamodule]. Experiments with dynamic OOP.
* [rdb-rs]. A Redis RDB parser.
* [carboxyl]. Functional reactive programming.
* [Sparkle]. An entity component system. [/r/rust][Sparkle-r-rust].
* [rust-erl-ext]. Erlang 'external term' parser.
* [rs-intrusive]. A system for creating intrusive data structures,
  Rust's kryptonite.
* [handlebars-iron]. Template middleware for the Iron web framework.
* [hematite_server]. Minecraft server clone.

[launch-code]: https://github.com/kmcallister/launch-code
[launch-code-r-rust]: https://www.reddit.com/r/rust/comments/2sc7oq/cryptographic_signatures_for_auditing_unsafe_code/
[rust-cipher]: https://github.com/zenith-nz/rust-cipher
[rust-haskell-ffi]: https://github.com/aisamanra/rust-haskell-ffi
[dynamodule]: https://github.com/kmcallister/dynamodule
[rdb-rs]: http://fnordig.de/2015/01/15/rdb-rs-fast-and-efficient-rdb-parsing-utility/
[carboxyl]: https://github.com/aepsil0n/carboxyl
[Sparkle]: https://github.com/RustSparkle/Sparkle
[Sparkle-r-rust]: https://www.reddit.com/r/rust/comments/2srrx0/another_entity_component_system/
[rust-erl-ext]: https://github.com/seriyps/rust-erl-ext
[rs-intrusive]: https://github.com/aidancully/rs-intrusive
[handlebars-iron]: https://github.com/sunng87/handlebars-iron
[hematite_server]: https://github.com/PistonDevelopers/hematite_server

## Project Updates

* [This Week in Servo 19][twis].
* [Worklog 2015-01-13: Time zones, chrono, and associated
  types][chrono]. Yurume discusses updates to rust-chrono.

[twis]: http://blog.servo.org/2015/01/13/twis-19/
[chrono]: https://lifthrasiir.github.io/rustlog/worklog-2015-01-13.html

## Upcoming Events

* [January 19 - Rust Paris](http://www.meetup.com/Rust-Paris)
* [January 20 - Rust Berlin](http://www.meetup.com/Rust-Berlin/events/219070839/)
* [January 20 - Fast, Safe, and
  Beautiful](http://www.oreilly.com/pub/e/3291). Jim Blandy's webcast
  on Rust for O'Reilly.
* [January 28 - Rust Amsterdam](http://www.meetup.com/Rust-Amsterdam/events/218908906/)