summaryrefslogtreecommitdiffstats
path: root/content/2015-01-12-this-week-in-rust.md
blob: f0345ec1c27a33b05affe1d39c82e81e9315e334 (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
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
Title: This Week in Rust 65
Date: 2015-01-12
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).

# The big story

This week in Rust was crazy. Rust boldly moved to [1.0 alpha][alpha]
status, and the effort put in to make it happen in the last week was
staggering, involving a lot of massive patches, a lot of breakage, and
not a lot of sleep. Thanks to everybody for pitching in.

Rust 1.0 is going to arrive very quickly and from now to then the
focus is going to be on nestling it into a warm cradle of stability,
getting the Cargo ecosystem on the stability bandwagon and making sure
the stage is set for all those 1.0 newbies to have a swell ride.

It was discussed on [Hacker News][alpha-hn], [/r/rust][alpha-reddit],
[/r/programming][alpha-reddit2], [LWN][alpha-lwn] and surely other
corners of the Internet.

[alpha]: http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html
[alpha-hn]: https://news.ycombinator.com/item?id=8863451
[alpha-reddit]: https://www.reddit.com/r/rust/comments/2rvodx/announcing_rust_100_alpha/
[alpha-reddit2]: https://www.reddit.com/r/programming/comments/2rvoha/announcing_rust_100_alpha/
[alpha-lwn]: http://lwn.net/Articles/629025/

# What's cooking on master?

Around 171 pull requests were [merged in the last
week][1]. It was a long week.

[1]: https://github.com/rust-lang/rust/pulls?q=is%3Apr+is%3Amerged+updated%3A2015-01-05..2015-01-11

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

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

## Breaking Changes

* Boxed closures have finally been [removed][boxed]. The pull request
  includes a detailed description of the impact.
* Unused type parameters on `impl`s are [prohibited][unused]. This
  fixes some soundness holes and generally makes things more
  sensible. [RFC][unused-rfc].
* `int` and `uint` have been [renamed][isize] to `isize` and `usize`
  to emphasize that they are not the 'default' integers. The old names
  are temporarily behind the [`int_uint` feature gate][intgate] to
  provide a transitionary window. The `int` and `uint` [modules][imod]
  are now called `isize` and `usize`. [RFC][isize-rfc].
* There are [new restrictions][orph] in the orphan check for impls
  that ensure that if the implemented trait is not defined in the
  local crate that the Self type is constrained by local types. Fixes
  soundness holes revealed by multidispatch. The commit message
  includes more details.
* `c_str` and `c_vec` have been [redesigned][c_stuff]. There are no longer any
  scenerios where Rust frees strings allocated by C, and the APIs
  are more consistent with modern conventions. Details in the
  [RFC][c_stuff-rfc].
* The `trait Foo for Sized?` syntax has been [obsoleted][forsized]
  after a short deprecation period. `Self` is no longer implicitly
  `Sized`.
* Likewise, the `Sized? T` syntax for trait bounds has been
  [obsoleted][sizedbound] in favor of `T: ?Sized`.
* To futureproof for potential alternative designs, chain comparsion
  operators like `a == b == c` [must now be parenthesized][chain].
  [RFC][chain-rfc].
* The `FloatMath` trait has [merged into `Float`][float].
* `std::kinds` is [called `std::marker`][marker].
* The `std::thread` API has [changed again][thread]. `spawn` always
  creates a detached thread, and `scoped` creates one which must be
  joined.  The intention is that by requiring a completely different
  name to create an attached thread it will be harder to accidentally
  create a deadlock by misunderstanding the join semantics.
* The `target_word_size` compiler-defined cfg value has been [renamed
  to `target_pointer_width`][tpw].

[boxed]: https://github.com/rust-lang/rust/pull/20578
[c_stuff]: https://github.com/rust-lang/rust/pull/20507
[c_stuff-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0494-c_str-and-c_vec-stability.md
[forsized]: https://github.com/rust-lang/rust/pull/20556
[float]: https://github.com/rust-lang/rust/pull/20573
[unused]: https://github.com/rust-lang/rust/pull/20593
[unused-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0447-no-unused-impl-parameters.md
[orph]: ttps://github.com/rust-lang/rust/pull/20594
[sizedbound]: https://github.com/rust-lang/rust/pull/20602
[marker]: https://github.com/rust-lang/rust/pull/20607
[isize]: https://github.com/rust-lang/rust/pull/20609
[isize-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0544-rename-int-uint.md
[intgate]: https://github.com/rust-lang/rust/pull/20754
[imod]: https://github.com/rust-lang/rust/pull/20708
[thread]: https://github.com/rust-lang/rust/pull/20615
[tpw]: https://github.com/rust-lang/rust/pull/20680
[chain]: https://github.com/rust-lang/rust/pull/20726
[chain-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0558-require-parentheses-for-chained-comparisons.md

## Other Changes

* Feature staging has been partially implemented in a [series][fs1] of
  [patches][fs2].  Under the current behavior, stability attributes
  only mean anything when applied to the crates distributed with Rust
  (primarily std), and the 'experimental' stability level has merged
  into 'unstable'. Use of unstable APIs is now a warning on the
  nightly and beta (alpha) release channels, and a new lint,
  `unstable_features`, that checks for activation of feature gates, is
  set to warn in betas. [RFC][fs-rfc].
* The various guides have been [merged into a book][trpl] called 'The
  Rust Programming Language'.
* The `box` has been hidden behind the [`box_syntax` feature
  gate][box]. until it is more fully-baked. For the primary use of
  constructing boxes, just use `Box::new` for
  now. [/r/rust][box-r-rust].
* Syntax for [negative impls][neg] has been added been
  added behind the `optin_builtin_traits` feature gate. This will let
  `Sync` and `Send` be implemented completely in the library
  eventually. [RFC][neg-rfc].
* Florian Hahn landed a [series][lexer1] of [patches][lexer2] to
  [improve][lexer3] the model lexer.

[neg]: https://github.com/rust-lang/rust/pull/20285
[neg-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md#default-and-negative-impls
[lexer1]: https://github.com/rust-lang/rust/pull/20310
[lexer2]: https://github.com/rust-lang/rust/pull/20330
[lexer3]: https://github.com/rust-lang/rust/pull/20245
[fs1]: https://github.com/rust-lang/rust/pull/20663
[fs2]: https://github.com/rust-lang/rust/pull/20738
[fs-rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
[trpl]: https://github.com/rust-lang/rust/pull/19897
[box]: https://github.com/rust-lang/rust/pull/20723
[box-r-rust]: https://www.reddit.com/r/rust/comments/2rr990/box_expr_syntax_is_now_behind_a_feature_gate/

## New Contributors

* Cristian Kubis
* Dabo Ross
* Daniel Grunwald
* Dylan Ede
* FakeKane
* Guillaume Gomez
* Hyeon Kim
* Jakub Vrána
* John Ericson
* John Kåre Alsaker
* Kelvin Ly
* Kevin Rauwolf
* Laurence Tratt
* Mike English
* Nathan Stoddard
* Peter Schuller
* Raul Gutierrez S
* Sean T Allen
* Thiago Pontes
* Tim Dumol
* York Xiang
* 克雷

# Approved RFC's

* [447: Prohibit unused type parameters in impls][rfc-447]. Disallows
  unconstrained type parameters in trait impls to clean up
  semantics. [PR][rfc-447-pr].
* [494: Stabilize `c_str` and `c_vec`][rfc-494]. Overhauls these two
  interop modules for modern tastes. [PR][rfc-494-pr].
* [501: Consistent no_prelude attribute][rfc-501]. Renames
  `no_implicit_prelude` to `no_prelude` and makes it only apply to the
  current module. [PR][rfc-501-pr].
* [507: Release channels][rfc-507]. The post-1.0 release model and the
  'feature staging' process by which new features are
  intrtoduced. [PR][rfc-507-pr].
* [526: Statically enforce unicode in `std::fmt`][rfc-526]. By making
  `fmt` only deal in unicode some almost-always-redundant sanity
  checks can be eliminated. [PR][rfc-526-pr].
* [544: Rename `int`/`uint`][rfc-544]. Renames `int` to `isize` and
  `uint` to `usize`. [PR][rfc-544-pr].
* [558: Require parentheses for chained comparisons][rfc-558]. Minor
  futureproofing that leaves open the option of making `a == b == c`
  behave more like people expect. [PR][rfc-558-pr].

[rfc-447]: https://github.com/nikomatsakis/rfcs/blob/unused-impl-parameters/text/0000-no-unused-impl-parameters.md
[rfc-447-pr]: https://github.com/rust-lang/rfcs/pull/447
[rfc-494]: https://github.com/rust-lang/rfcs/blob/master/text/0494-c_str-and-c_vec-stability.md
[rfc-494-pr]: https://github.com/rust-lang/rfcs/pull/494
[rfc-501]: https://github.com/rust-lang/rfcs/blob/master/text/0501-consistent_no_prelude_attributes.md
[rfc-501-pr]: https://github.com/rust-lang/rfcs/pull/501
[rfc-507]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
[rfc-507-pr]: https://github.com/rust-lang/rfcs/pull/507
[rfc-526]: https://github.com/rust-lang/rfcs/blob/master/text/0526-fmt-text-writer.md
[rfc-526-pr]: https://github.com/rust-lang/rfcs/pull/526
[rfc-544]: https://github.com/rust-lang/rfcs/blob/master/text/0544-rename-int-uint.md
[rfc-544-pr]: https://github.com/rust-lang/rfcs/pull/544
[rfc-558]: https://github.com/rust-lang/rfcs/blob/master/text/0558-require-parentheses-for-chained-comparisons.md
[rfc-558-pr]: https://github.com/rust-lang/rfcs/pull/558

# New RFC's

* [Macro future proofing][rfc-550-pr]. Places restrictions on some
  `macro_rules!` matchers to allow for Rust's grammer to evolve in the
  future (the implementation has already landed).
* [Unchecked downcast methods for `Any`][rfc-555-pr]. New unsafe
  methods are added to `Any` for unchecked downcasting, a small
  performance and code-bloat-avoidance optimisation in cases where the
  dynamic type is already known.
* [Lifetime parameters for unsafe pointer
  conversions][rfc-556-pr]. APIs for handling lifetimes correctly when
  dealing with raw pointers.
* [Integer overflow][rfc-560-pr]. Change the semantics of built-in
  integer types to be a program error on overflow. Implementations are
  not required to check for these errors except in debug mode. Adds
  wrapping int types to the library.
* [Remove official `ndebug` variable support][rfc-563-pr]. A more rusty
  solution to turning on debug assertions.
* [Relative paths by default][rfc-564-pr]. Make paths in `use`
  statements relative instead of absolute.
* [Guidelines for `fmt::Show` and `fmt::String`][rfc-565-pr]. When to
  use which of the two format types that convert to strings.
* [A byte string concatenation macro][rfc-566-pr]. Add a `bytes!`
  macro that produces static expressions of type `&'static [u8]` by
  concatenating the arguments.
* [Lose the tick][rfc-567-pr]. Remove the tick from some parts of the
  lifetime syntax.
* [Add methods to `String` and `Vec` which can remove multiple
  elements at once][rfc-570-pr].  Ads `remove_range` to `Vec` and
  `String` to remove multiple elements efficiently.
* [Change `foo::<T>(x)` to `foo@<T>(x)`][rfc-571-pr]. A different
  syntax for solving the ambiguity.
* [Reserve `#[rustc_*]` for future language
  features][rfc-572-pr]. Futureproofing around the lack of namespacing
  an attributes.

[rfc-550-pr]: https://github.com/rust-lang/rfcs/pull/550
[rfc-555-pr]: https://github.com/rust-lang/rfcs/pull/555
[rfc-556-pr]: https://github.com/rust-lang/rfcs/pull/556
[rfc-560-pr]: https://github.com/rust-lang/rfcs/pull/560
[rfc-563-pr]: https://github.com/rust-lang/rfcs/pull/563
[rfc-564-pr]: https://github.com/rust-lang/rfcs/pull/564
[rfc-565-pr]: https://github.com/rust-lang/rfcs/pull/565
[rfc-566-pr]: https://github.com/rust-lang/rfcs/pull/566
[rfc-567-pr]: https://github.com/rust-lang/rfcs/pull/567
[rfc-570-pr]: https://github.com/rust-lang/rfcs/pull/570
[rfc-571-pr]: https://github.com/rust-lang/rfcs/pull/571
[rfc-572-pr]: https://github.com/rust-lang/rfcs/pull/572

# Community

The #rust IRC channel now peaks at more than 900 users.

## From the Team

* [Announcing Rust 1.0
  Alpha][alpha]. [HN][alpha-hn]. [/r/rust][alpha-r-rust]. [/r/programming][alpha-r-programming].
* [weekly-meetings/2015-01-06][mtg]. fott; 1.0 alpha priorities; LLVM
  updates; the fate of `box`

[alpha]: http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html
[mtg]: https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2015-01-06.md
[alpha-hn]: https://news.ycombinator.com/item?id=8863451
[alpha-r-programming]: https://www.reddit.com/r/rust/comments/2rvodx/announcing_rust_100_alpha/
[alpha-r-rust]: https://www.reddit.com/r/programming/comments/2rvoha/announcing_rust_100_alpha/

## Blog Posts

* [Peeking inside Trait Objects][objs]. Huon explains the runtime
  representation of Rust's opaque types. [/r/rust][objs-r-rust].
* [The Sized trait][sized]. Then Huon explains
  DST. [/r/rust][objs-r-rust].
* [Object safety][safety]. Then Huon explains the conditions under
  which a trait may be cast to an object. [/r/rust][safety-r-rust].
* [Rust Patterns: Using traits for function
  overloading][func]. Jonathan Reem demonstrates how to overload
  functions. [/r/rust][func-r-rust].
* [My experience converting a project from Rust 0.12 to 1.0
  (alpha)][conv]. Looks painful...
* [Is now a good time to learn Rust?][now]. A: wait 6-12
  weeks. [/r/programming][now-reddit].
* [Iomrascálaí: A Great Way to Learn Rust or About AI][iom]. An AI for the
  game of Go.
* [Notch says something about Rust][notch]. Rust is official.

[objs]: http://huonw.github.io/blog/2015/01/peeking-inside-trait-objects/
[objs-r-rust]: https://www.reddit.com/r/rust/comments/2rutqb/peeking_inside_trait_objects/
[sized]: http://huonw.github.io/blog/2015/01/the-sized-trait/
[sized-r-rust]: https://www.reddit.com/r/rust/comments/2s2gee/the_sized_trait/
[safety]: http://huonw.github.io/blog/2015/01/object-safety/
[safety-r-rust]: https://www.reddit.com/r/rust/comments/2s2okp/object_safety/
[now]: https://www.codementor.io/learn-programming/now-good-time-learn-rust
[now-reddit]: https://www.reddit.com/r/programming/comments/2ruixg/is_now_a_good_time_to_learn_rust/
[iom]: http://bettong.net/2015/01/07/iomrascalai-a-great-way-to-learn-rust-or-about-ai/
[conv]: https://kentaromiura.wordpress.com/2015/01/10/my-experience-converting-a-project-from-rust-0-12-to-1-0/
[notch]: https://twitter.com/notch/status/554348548053929984
[func]: https://medium.com/@jreem/advanced-rust-using-traits-for-argument-overloading-c6a6c8ba2e17
[func-r-rust]: https://www.reddit.com/r/rust/comments/2s4tbx/advanced_rust_using_traits_for_function/

## Discussions

* [Rust book by Packt Publishing][packt]. There is opportunity to be
  involved in one of the first Rust books.
* [Final decision on builtin integer types. Again][int]. Aftermath.
* [Operating system development in Rust][os]. Well-commented hacker
  news discussion. Nothing new though.
* [151-byte static binary in Rust][bin-hn]. Keegan shows that Rust can
  be small. [/r/rust][bin-r-rust]. [/r/programming][bin-r-programming].
* ["hello world" contains Lovecraft quotes][love]. /me eyerolls
* [Google removes rust, Netflix, other GitHub repos after DMCA
  takedown][dmca-hn]. 'Cargo' looks suspiciously like
  pornography. [/r/rust][dmca-reddit].
* [How big a deal is Rust, Really][deal]? A: the biggest.
* [Pre-RFC: Linear type modifier][lin]. Requires certain types to be
  explicitly disposed.
* [Using Rust 1. for video game development?][vidja]. Some up to date
  info here.

[os]: https://news.ycombinator.com/item?id=8871357
[love]: http://news.ycombinator.com/item?id=8869572
[bin-hn]: http://news.ycombinator.com/item?id=8869167
[bin-r-rust]: https://www.reddit.com/r/rust/comments/2s0s9n/151byte_static_linux_binary_in_rust/
[bin-r-programming]: https://www.reddit.com/r/programming/comments/2s1sgg/151byte_static_linux_binary_in_rust/
[dmca-hn]: https://www.reddit.com/r/hackernews/comments/2rlaf5/tell_hn_google_removes_rust_netflix_other_github/
[dmca-reddit]: https://www.reddit.com/r/rust/comments/2rlaug/cargo_github_repo_link_has_been_dmcad_off_the/
[deal]: https://www.reddit.com/r/programming/comments/2rlef7/how_big_a_deal_is_rust_really/
[int]: https://www.reddit.com/r/rust/comments/2rg60o/final_decision_on_builtin_integer_types_again/
[packt]: https://www.reddit.com/r/rust/comments/2rnked/rust_book_by_packt_publishing/
[lin]: http://internals.rust-lang.org/t/pre-rfc-linear-type-modifier/1225
[vidja]: https://www.reddit.com/r/rust/comments/2s4kp9/using_rust_10_for_video_game_development/

## New Projects

* [multirust]. Manage multiple Rust toolchains.
* [Roogle]. Hoogle 4 Rust.
* [Rust for Clojurists][clj]. An introduction to
  Rust. [/r/programming][clj-r-rust].
* [Clippy for Rust][clippy]. A collection of
  lints. [/r/rust][clippy-r-rust].
* [rust-blas][blas]. Bindings to the immortal BLAS numerical library.
* [fallthrough]. A macro for fall-through match cases.
* [rust-vobject]. A vObject/iCalendar parser.
* [ProjectEuler]. A new attempt at the Project Euler problems.
* [forkallcc]. Continuations with fork(2)!
* [construct]. A macro for building arbitrary collections.
* [float_macros]. CTFE for some float functions.

[multirust]: https://github.com/brson/multirust
[Roogle]: https://github.com/ajtulloch/roogle
[clj]: https://gist.github.com/oakes/4af1023b6c5162c6f8f0
[clj-r-rust]: https://www.reddit.com/r/rust/comments/2rsl5s/rust_for_clojurists/
[clippy]: https://github.com/Manishearth/rust-clippy
[clippy-r-rust]: https://www.reddit.com/r/rust/comments/2rihkk/clippy_for_rust/
[blas]: https://github.com/mikkyang/rust-blas
[fallthrough]: https://github.com/pythonesque/fallthrough
[rust-vobject]: https://github.com/untitaker/rust-vobject
[ProjectEuler]: https://github.com/Ap0ph1s/ProjectEuler
[forkallcc]: https://github.com/kmcallister/forkallcc
[construct]: https://github.com/TyOverby/construct
[float_macros]: https://github.com/talevy/float_macros

## Project Updates

* [This Week in Servo 18][twis].
* [Grisu and rust-strconv][grisu]. Yurume talks about his
  implementation of the Grisu algorithm for converting floats to
  strings. This work is likely to make it into std someday.
* [Announcing support for 1.0 in Rust Explorer][expl]. Shows the
  assembly of Rust code.

[twis]: http://blog.servo.org/2015/01/06/twis-18/
[grisu]: https://lifthrasiir.github.io/rustlog/worklog-2015-01-10.html
[expl]: http://internals.rust-lang.org/t/announcing-support-for-rust-1-0-in-rust-explorer/1287

## Upcoming Events

[January 12 - Seattle Meetup][seattle].
[January 17 - Beijing Meetup][beijing]. Presantations about servo and
zmq.rs.
[January 17 - Getting starting contributing to Rust][sf]. A special SF
Bay area meetup.

[seattle]: https://www.eventbrite.com/e/mozilla-rust-seattle-meetup-tickets-12222326307?aff=erelexporg
[beijing]: https://www.eventbrite.com/e/rust-meet-up-in-beijing-tickets-14905925023
[sf]: http://www.meetup.com/Rust-Bay-Area/events/203782472/