summaryrefslogtreecommitdiffstats
path: root/content/2013-11-30-this-week-in-rust.markdown
blob: 837b81c1927e7b0b7ebd65d793c21157eeab7624 (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
Title: This Week in Rust 25
Date: 2013-11-30 15:56
Category: This Week in Rust

Welcome to another issue of *This Week in Rust*, a weekly newsletter
summarizing Rust's progress and community activity. As always, if you have
something you'd like to be featured, just [send me an
email](mailto:corey@octayn.net?subject=This%20Week%20in%20Rust%20Suggestion).

Last week was very slow, but this week more than makes up for it I think!
Static linking landed, and there's been some nice cleanup of error messages
and various APIs.

<!-- more -->

# What's cooking on master?

59 PRs were merged this week.

## Breaking Changes

- Names of methods creating iterators have [changed
  drastically](https://github.com/mozilla/rust/pull/10622) to remove the
  `_iter` suffix. This reflects that iterators are a primary focus of APIs.
  The PR description has all of the changes summarized.
- We now have [static linking
  support](https://github.com/mozilla/rust/pull/10528)! It does, however,
  involve some changes with how the `link` attribute works. The error messages
  should guide you to the fixes.
- In preparation for the placement new changes, the `Path` constructor has
  been [renamed from `new` to
  `init`](https://github.com/mozilla/rust/pull/10697),.
- Some overly-permissive borrow checking for `&mut &mut` [has been
  fixed](https://github.com/mozilla/rust/pull/10519). This is fairly obscure,
  most code shouldn't have hit it.
- The parser is [more strict](https://github.com/mozilla/rust/pull/10642)
  about what it accepts as a doc comment. Now, only `///` and `/**`  are
  counted as introducing doc comments (previously, `////` and `/***` would
  also introduce a doc comment).
- `std::{uint, int}::{min, max}` [have been
  removed](https://github.com/mozilla/rust/pull/10719). They were identical to
  the functions in `std::cmp`, so use those instead.
- `extra::json` [has been rid of @
  boxes](https://github.com/mozilla/rust/pull/10727), and now uses idiomatic
  constructor names.
- The `type_id` intrinsic [now uses a language item as its return
  value](https://github.com/mozilla/rust/pull/10722).
- Some [cleanup](https://github.com/mozilla/rust/pull/10662) has been done to
  `std::rt::thread`, which is an interface to native threads (rather than
  tasks).
- `do` blocks are [no longer
  allowed](https://github.com/mozilla/rust/pull/10581) in non-`proc` contexts.
  This means that `do` can not be used with a function whose last argument is
  not a `proc`. A fairly large [thread on the mailing
  list](https://mail.mozilla.org/pipermail/rust-dev/2013-November/006999.html)
  is ongoing about this change.
- `LittleLock` now [uses RAII](https://github.com/mozilla/rust/pull/10660).
- C-like enums are [now represented as an
  integer](https://github.com/mozilla/rust/pull/10652) rather than a struct,
  at the LLVM level. This affects ABI.
- Linked failure [has been
  removed](https://github.com/mozilla/rust/pull/10603) from the runtime.
- `extra::term` [no longer uses `@mut
  Writer`](https://github.com/mozilla/rust/pull/10637), instead taking the
  writer to use by value.

## Other changes

- `RefCell<T>`, previously known as `Mut<T>`, [has finally
  landed](https://github.com/mozilla/rust/pull/10514), for all your dynamic
  borrow checking needs.
- A lint for unknown attributes [has finally been
  added](https://github.com/mozilla/rust/pull/10316). The compiler will now
  warn when it sees an attribute it doesn't recognize.
- A lock-free [Chase-Lev
  deque](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.170.1097&rep=rep1&type=pdf)
  has [been added to the runtime](https://github.com/mozilla/rust/pull/10678).
- The shootout-spectralnorm benchmark [has been
  resurrected](https://github.com/mozilla/rust/pull/10704).
- Unknown feature gates [are now
  linted](https://github.com/mozilla/rust/pull/10680), rather than being a
  hard failure.
- The AST is [now frozen](https://github.com/mozilla/rust/pull/10693)!
- `GenericPort` [now has an
  iterator](https://github.com/mozilla/rust/pull/10688) over the messages it
  receives.
- `NodeId`, `CrateNum`, `Name`, and `Mrk` (types in libsyntax) [have been
  shrunk to 32 bits](https://github.com/mozilla/rust/pull/10670).
- The restriction on macros expanding to a single item [has been
  lifted](https://github.com/mozilla/rust/pull/10649). This obviates the need
  for macros hackily expanding to a module containing the desired items. Do
  note that this only works when the macro is in "item position", or where an
  item is expected. There is an
  [issue](https://github.com/mozilla/rust/issues/10681) open for lifting this
  restriction.
- A `thread_local` attribute [has been
  added](https://github.com/mozilla/rust/pull/10312), which exposes a
  platform's native TLS, a la C11/C++11 `thread_local`.
- Cross compilation to win64 (via mingw-w64) [is now
  supported](https://github.com/mozilla/rust/pull/10578). There were also a
  [bunch of fixes](https://github.com/mozilla/rust/pull/10631) on real win64.
- The parser gives a [better error
  message](https://github.com/mozilla/rust/pull/10641) when it encounters an
  unclosed delimiter it didn't expect.
- There is a [better error
  message](https://github.com/mozilla/rust/pull/10475) when a module name is
  used as a type (the motivating example being `impl SomeTrait for some_module`).
- JSON decoding [now gives better
  errors](https://github.com/mozilla/rust/pull/10625).
- Linker optimizations are [now
  used](https://github.com/mozilla/rust/pull/10620) on Linux.

## New contributors

Our first-time contributors this week are:

- Andreas Ots
- Eric Biggers
- Jannis Harder
- Kiet Tran

# Weekly Meeting

The [weekly
meeting](https://github.com/mozilla/rust/wiki/Meeting-weekly-2013-11-26)
discussed bootstrap times, the `thread_local` PR, mutexes, and the GC. In
particular, it was decided that we should have nightlies.

# This Week in Servo

Servo is a web browser engine written in Rust and is one of the primary test
cases for the Rust language.

This was a short week due to the US Thanksgiving holiday, but there were still
17 landed PRs this week.

## Notable additions
- Hyunjune Kim and Sammy Kim landed some border style extensions in
  [#1276](http://github.com/mozilla/servo/pull/1322).
- Youngmin Yoo, Seonghyun Kim, and Jaemin Moon landed overflow:hidden in
  [#1298](http://github.com/mozilla/servo/pull/1298).
- Isabelle Carter landed changing the unrendered portion of content to use the
  doc's background color in [#1210](http://github.com/mozilla/servo/pull/1210).
- Patrick Walton has been experimenting with some very promising parallel
  layout work, which he described in a
  [message](https://groups.google.com/forum/#!topic/mozilla.dev.servo/1nKmBvFewIs)
  to the mailing list.

## Meetings

This week's [meeting](https://github.com/mozilla/servo/wiki/Meeting-2013-11-25)
covered the poor situation with Nvidia support on Linux, fleshed out the string
interning plan during CSS selector parsing/matching, and went into some Servo
and Rust-related build issues.

# Announcements etc

Do note that all the links are pulled directly from the
[subreddit](https://reddit.com/r/rust).

- [Matrix Multiply Performance in Rust](http://www.reddit.com/r/rust/comments/1rf8rz/matrix_multiply_performance_in_rust/)
- [nrays](https://github.com/sebcrozet/nrays) - a 3d/4d raytracer
- [SprocketNES: Practical Systems Programming in
  Rust](https://air.mozilla.org/sprocketnes-practical-systems-programming-in-rust/).
  Contrary to the title, this is actually a recording of the presentations at
  the Bay Area meetup.
- [uutils](https://github.com/uutils/coreutils) - an attempt at writing
  universal (as in cross-platform) CLI utils in Rust
- [lbac](https://github.com/cmr/lets-build-a-compiler) - a Rust port of Jack
  Crenshaw's "Let's Build a Compiler"