]> git.proxmox.com Git - rustc.git/blame - src/vendor/rayon/RELEASES.md
New upstream version 1.27.1+dfsg1
[rustc.git] / src / vendor / rayon / RELEASES.md
CommitLineData
83c7162d
XL
1# Release rayon 1.0.1
2
3- Added more documentation for `rayon::iter::split()`.
4- Corrected links and typos in documentation.
5
6## Contributors
7
8Thanks to all of the contributors for this release!
9
10- @cuviper
11- @HadrienG2
12- @matthiasbeyer
13- @nikomatsakis
14
15
2c00a5a8
XL
16# Release rayon 1.0.0 / rayon-core 1.4.0
17
18- `ParallelIterator` added the `update` method which applies a function to
19 mutable references, inspired by `itertools`.
20- `IndexedParallelIterator` added the `chunks` method which yields vectors of
21 consecutive items from the base iterator, inspired by `itertools`.
22- `String` now implements `FromParallelIterator<Cow<str>>` and
23 `ParallelExtend<Cow<str>>`, inspired by `std`.
24- `()` now implements `FromParallelIterator<()>`, inspired by `std`.
25- The new `ThreadPoolBuilder` replaces and deprecates `Configuration`.
26 - Errors from initialization now have the concrete `ThreadPoolBuildError`
27 type, rather than `Box<Error>`, and this type implements `Send` and `Sync`.
28 - `ThreadPool::new` is deprecated in favor of `ThreadPoolBuilder::build`.
29 - `initialize` is deprecated in favor of `ThreadPoolBuilder::build_global`.
30- Examples have been added to most of the parallel iterator methods.
31- A lot of the documentation has been reorganized and extended.
32
33## Breaking changes
34
35- Rayon now requires rustc 1.13 or greater.
36- `IndexedParallelIterator::len` and `ParallelIterator::opt_len` now operate on
37 `&self` instead of `&mut self`.
38- `IndexedParallelIterator::collect_into` is now `collect_into_vec`.
39- `IndexedParallelIterator::unzip_into` is now `unzip_into_vecs`.
40- Rayon no longer exports the deprecated `Configuration` and `initialize` from
41 rayon-core.
42
43## Contributors
44
45Thanks to all of the contributors for this release!
46
47- @Bilkow
48- @cuviper
49- @Enet4
50- @ignatenkobrain
51- @iwillspeak
52- @jeehoonkang
53- @jwass
54- @Kerollmops
55- @KodrAus
56- @kornelski
57- @MaloJaffre
58- @nikomatsakis
59- @obv-mikhail
60- @oddg
61- @phimuemue
62- @stjepang
63- @tmccombs
64- bors[bot]
65
66
67# Release rayon 0.9.0 / rayon-core 1.3.0 / rayon-futures 0.1.0
68
69- `Configuration` now has a `build` method.
70- `ParallelIterator` added `flatten` and `intersperse`, both inspired by
71 itertools.
72- `IndexedParallelIterator` added `interleave`, `interleave_shortest`, and
73 `zip_eq`, all inspired by itertools.
74- The new functions `iter::empty` and `once` create parallel iterators of
75 exactly zero or one item, like their `std` counterparts.
76- The new functions `iter::repeat` and `repeatn` create parallel iterators
77 repeating an item indefinitely or `n` times, respectively.
78- The new function `join_context` works like `join`, with an added `FnContext`
79 parameter that indicates whether the job was stolen.
80- `Either` (used by `ParallelIterator::partition_map`) is now re-exported from
81 the `either` crate, instead of defining our own type.
82 - `Either` also now implements `ParallelIterator`, `IndexedParallelIterator`,
83 and `ParallelExtend` when both of its `Left` and `Right` types do.
84- All public types now implement `Debug`.
85- Many of the parallel iterators now implement `Clone` where possible.
86- Much of the documentation has been extended. (but still could use more help!)
87- All rayon crates have improved metadata.
88- Rayon was evaluated in the Libz Blitz, leading to many of these improvements.
89- Rayon pull requests are now guarded by bors-ng.
90
91## Futures
92
93The `spawn_future()` method has been refactored into its own `rayon-futures`
94crate, now through a `ScopeFutureExt` trait for `ThreadPool` and `Scope`. The
95supporting `rayon-core` APIs are still gated by `--cfg rayon_unstable`.
96
97## Breaking changes
98
99- Two breaking changes have been made to `rayon-core`, but since they're fixing
100 soundness bugs, we are considering these _minor_ changes for semver.
101 - `Scope::spawn` now requires `Send` for the closure.
102 - `ThreadPool::install` now requires `Send` for the return value.
103- The `iter::internal` module has been renamed to `iter::plumbing`, to hopefully
104 indicate that while these are low-level details, they're not really internal
105 or private to rayon. The contents of that module are needed for third-parties
106 to implement new parallel iterators, and we'll treat them with normal semver
107 stability guarantees.
108- The function `rayon::iter::split` is no longer re-exported as `rayon::split`.
109
110## Contributors
111
112Thanks to all of the contributors for this release!
113
114- @AndyGauge
115- @ChristopherDavenport
116- @chrisvittal
117- @cuviper
118- @dns2utf8
119- @dtolnay
120- @frewsxcv
121- @gsquire
122- @Hittherhod
123- @jdr023
124- @laumann
125- @leodasvacas
126- @lvillani
127- @MajorBreakfast
128- @mamuleanu
129- @marmistrz
130- @mbrubeck
131- @mgattozzi
132- @nikomatsakis
133- @smt923
134- @stjepang
135- @tmccombs
136- @vishalsodani
137- bors[bot]
138
139
140# Release rayon 0.8.2
141
142- `ParallelSliceMut` now has six parallel sorting methods with the same
143 variations as the standard library.
144 - `par_sort`, `par_sort_by`, and `par_sort_by_key` perform stable sorts in
145 parallel, using the default order, a custom comparator, or a key extraction
146 function, respectively.
147 - `par_sort_unstable`, `par_sort_unstable_by`, and `par_sort_unstable_by_key`
148 perform unstable sorts with the same comparison options.
149 - Thanks to @stjepang!
150
151# Release rayon 0.8.1 / rayon-core 1.2.0
152
153- The following core APIs are being stabilized:
154 - `rayon::spawn()` -- spawns a task into the Rayon threadpool; as it
155 is contained in the global scope (rather than a user-created
156 scope), the task cannot capture anything from the current stack
157 frame.
158 - `ThreadPool::join()`, `ThreadPool::spawn()`, `ThreadPool::scope()`
159 -- convenience APIs for launching new work within a thread-pool.
160- The various iterator adapters are now tagged with `#[must_use]`
161- Parallel iterators now offer a `for_each_with` adapter, similar to
162 `map_with`.
163- We are adopting a new approach to handling the remaining unstable
164 APIs (which primarily pertain to futures integration). As awlays,
165 unstable APIs are intended for experimentation, but do not come with
166 any promise of compatibility (in other words, we might change them
167 in arbitrary ways in any release). Previously, we designated such
168 APIs using a Cargo feature "unstable". Now, we are using a regular
169 `#[cfg]` flag. This means that to see the unstable APIs, you must do
170 `RUSTFLAGS='--cfg rayon_unstable' cargo build`. This is
171 intentionally inconvenient; in particular, if you are a library,
172 then your clients must also modify their environment, signaling
173 their agreement to instability.
174
175# Release rayon 0.8.0 / rayon-core 1.1.0
176
177## Rayon 0.8.0
178
179- Added the `map_with` and `fold_with` combinators, which help for
180 passing along state (like channels) that cannot be shared between
181 threads but which can be cloned on each thread split.
182- Added the `while_some` combinator, which helps for writing short-circuiting iterators.
183- Added support for "short-circuiting" collection: e.g., collecting
184 from an iterator producing `Option<T>` or `Result<T, E>` into a
185 `Option<Collection<T>>` or `Result<Collection<T>, E>`.
186- Support `FromParallelIterator` for `Cow`.
187- Removed the deprecated weight APIs.
188- Simplified the parallel iterator trait hierarchy by removing the
189 `BoundedParallelIterator` and `ExactParallelIterator` traits,
190 which were not serving much purpose.
191- Improved documentation.
192- Added some missing `Send` impls.
193- Fixed some small bugs.
194
195## Rayon-core 1.1.0
196
197- We now have more documentation.
198- Renamed the (unstable) methods `spawn_async` and
199 `spawn_future_async` -- which spawn tasks that cannot hold
200 references -- to simply `spawn` and `spawn_future`, respectively.
201- We are now using the coco library for our deque.
202- Individual threadpools can now be configured in "breadth-first"
203 mode, which causes them to execute spawned tasks in the reverse
204 order that they used to. In some specific scenarios, this can be a
205 win (though it is not generally the right choice).
206- Added top-level functions:
207 - `current_thread_index`, for querying the index of the current worker thread within
208 its thread-pool (previously available as `thread_pool.current_thread_index()`);
209 - `current_thread_has_pending_tasks`, for querying whether the
210 current worker that has an empty task deque or not. This can be
211 useful when deciding whether to spawn a task.
212- The environment variables for controlling Rayon are now
213 `RAYON_NUM_THREADS` and `RAYON_LOG`. The older variables (e.g.,
214 `RAYON_RS_NUM_CPUS` are still supported but deprecated).
215
216## Rayon-demo
217
218- Added a new game-of-life benchmark.
219
220## Contributors
221
222Thanks to the following contributors:
223
224- @ChristopherDavenport
225- @SuperFluffy
226- @antoinewdg
227- @crazymykl
228- @cuviper
229- @glandium
230- @julian-seward1
231- @leodasvacas
232- @leshow
233- @lilianmoraru
234- @mschmo
235- @nikomatsakis
236- @stjepang
237
238# Release rayon 0.7.1 / rayon-core 1.0.2
239
240This release is a targeted performance fix for #343, an issue where
241rayon threads could sometimes enter into a spin loop where they would
242be unable to make progress until they are pre-empted.
243
244# Release rayon 0.7 / rayon-core 1.0
245
246This release marks the first step towards Rayon 1.0. **For best
247performance, it is important that all Rayon users update to at least
248Rayon 0.7.** This is because, as of Rayon 0.7, we have taken steps to
249ensure that, no matter how many versions of rayon are actively in use,
250there will only be a single global scheduler. This is achieved via the
251`rayon-core` crate, which is being released at version 1.0, and which
252encapsulates the core schedule APIs like `join()`. (Note: the
253`rayon-core` crate is, to some degree, an implementation detail, and
254not intended to be imported directly; it's entire API surface is
255mirrored through the rayon crate.)
256
257We have also done a lot of work reorganizing the API for Rayon 0.7 in
258preparation for 1.0. The names of iterator types have been changed and
259reorganized (but few users are expected to be naming those types
260explicitly anyhow). In addition, a number of parallel iterator methods
261have been adjusted to match those in the standard iterator traits more
262closely. See the "Breaking Changes" section below for
263details.
264
265Finally, Rayon 0.7 includes a number of new features and new parallel
266iterator methods. **As of this release, Rayon's parallel iterators
267have officially reached parity with sequential iterators** -- that is,
268every sequential iterator method that makes any sense in parallel is
269supported in some capacity.
270
271### New features and methods
272
273- The internal `Producer` trait now features `fold_with`, which enables
274 better performance for some parallel iterators.
275- Strings now support `par_split()` and `par_split_whitespace()`.
276- The `Configuration` API is expanded and simplified:
277 - `num_threads(0)` no longer triggers an error
278 - you can now supply a closure to name the Rayon threads that get created
279 by using `Configuration::thread_name`.
280 - you can now inject code when Rayon threads start up and finish
281 - you can now set a custom panic handler to handle panics in various odd situations
282- Threadpools are now able to more gracefully put threads to sleep when not needed.
283- Parallel iterators now support `find_first()`, `find_last()`, `position_first()`,
284 and `position_last()`.
285- Parallel iterators now support `rev()`, which primarily affects subsequent calls
286 to `enumerate()`.
287- The `scope()` API is now considered stable (and part of `rayon-core`).
288- There is now a useful `rayon::split` function for creating custom
289 Rayon parallel iterators.
290- Parallel iterators now allow you to customize the min/max number of
291 items to be processed in a given thread. This mechanism replaces the
292 older `weight` mechanism, which is deprecated.
293- `sum()` and friends now use the standard `Sum` traits
294
295### Breaking changes
296
297In the move towards 1.0, there have been a number of minor breaking changes:
298
299- Configuration setters like `Configuration::set_num_threads()` lost the `set_` prefix,
300 and hence become something like `Configuration::num_threads()`.
301- `Configuration` getters are removed
302- Iterator types have been shuffled around and exposed more consistently:
303 - combinator types live in `rayon::iter`, e.g. `rayon::iter::Filter`
304 - iterators over various types live in a module named after their type,
305 e.g. `rayon::slice::Windows`
306- When doing a `sum()` or `product()`, type annotations are needed for the result
307 since it is now possible to have the resulting sum be of a type other than the value
308 you are iterating over (this mirrors sequential iterators).
309
310### Experimental features
311
312Experimental features require the use of the `unstable` feature. Their
313APIs may change or disappear entirely in future releases (even minor
314releases) and hence they should be avoided for production code.
315
316- We now have (unstable) support for futures integration. You can use
317 `Scope::spawn_future` or `rayon::spawn_future_async()`.
318- There is now a `rayon::spawn_async()` function for using the Rayon
319 threadpool to run tasks that do not have references to the stack.
320
321### Contributors
322
323Thanks to the following people for their contributions to this release:
324
325- @Aaronepower
326- @ChristopherDavenport
327- @bluss
328- @cuviper
329- @froydnj
330- @gaurikholkar
331- @hniksic
332- @leodasvacas
333- @leshow
334- @martinhath
335- @mbrubeck
336- @nikomatsakis
337- @pegomes
338- @schuster
339- @torkleyy
340
341# Release 0.6
342
343This release includes a lot of progress towards the goal of parity
344with the sequential iterator API, though there are still a few methods
345that are not yet complete. If you'd like to help with that effort,
346[check out the milestone](https://github.com/nikomatsakis/rayon/issues?q=is%3Aopen+is%3Aissue+milestone%3A%22Parity+with+the+%60Iterator%60+trait%22)
347to see the remaining issues.
348
349**Announcement:** @cuviper has been added as a collaborator to the
350Rayon repository for all of his outstanding work on Rayon, which
351includes both internal refactoring and helping to shape the public
352API. Thanks @cuviper! Keep it up.
353
354- We now support `collect()` and not just `collect_with()`.
355 You can use `collect()` to build a number of collections,
356 including vectors, maps, and sets. Moreover, when building a vector
357 with `collect()`, you are no longer limited to exact parallel iterators.
358 Thanks @nikomatsakis, @cuviper!
359- We now support `skip()` and `take()` on parallel iterators.
360 Thanks @martinhath!
361- **Breaking change:** We now match the sequential APIs for `min()` and `max()`.
362 We also support `min_by_key()` and `max_by_key()`. Thanks @tapeinosyne!
363- **Breaking change:** The `mul()` method is now renamed to `product()`,
364 to match sequential iterators. Thanks @jonathandturner!
365- We now support parallel iterator over ranges on `u64` values. Thanks @cuviper!
366- We now offer a `par_chars()` method on strings for iterating over characters
367 in parallel. Thanks @cuviper!
368- We now have new demos: a traveling salesman problem solver as well as matrix
369 multiplication. Thanks @nikomatsakis, @edre!
370- We are now documenting our minimum rustc requirement (currently
371 v1.12.0). We will attempt to maintain compatibility with rustc
372 stable v1.12.0 as long as it remains convenient, but if new features
373 are stabilized or added that would be helpful to Rayon, or there are
374 bug fixes that we need, we will bump to the most recent rustc. Thanks @cuviper!
375- The `reduce()` functionality now has better inlining.
376 Thanks @bluss!
377- The `join()` function now has some documentation. Thanks @gsquire!
378- The project source has now been fully run through rustfmt.
379 Thanks @ChristopherDavenport!
380- Exposed helper methods for accessing the current thread index.
381 Thanks @bholley!
382
383# Release 0.5
384
385- **Breaking change:** The `reduce` method has been vastly
386 simplified, and `reduce_with_identity` has been deprecated.
387- **Breaking change:** The `fold` method has been changed. It used to
388 always reduce the values, but now instead it is a combinator that
389 returns a parallel iterator which can itself be reduced. See the
390 docs for more information.
391- The following parallel iterator combinators are now available (thanks @cuviper!):
392 - `find_any()`: similar to `find` on a sequential iterator,
393 but doesn't necessarily return the *first* matching item
394 - `position_any()`: similar to `position` on a sequential iterator,
395 but doesn't necessarily return the index of *first* matching item
396 - `any()`, `all()`: just like their sequential counterparts
397- The `count()` combinator is now available for parallel iterators.
398- We now build with older versions of rustc again (thanks @durango!),
399 as we removed a stray semicolon from `thread_local!`.
400- Various improvements to the (unstable) `scope()` API implementation.
401
402# Release 0.4.3
403
404- Parallel iterators now offer an adaptive weight scheme,
405 which means that explicit weights should no longer
406 be necessary in most cases! Thanks @cuviper!
407 - We are considering removing weights or changing the weight mechanism
408 before 1.0. Examples of scenarios where you still need weights even
409 with this adaptive mechanism would be great. Join the discussion
410 at <https://github.com/nikomatsakis/rayon/issues/111>.
411- New (unstable) scoped threads API, see `rayon::scope` for details.
412 - You will need to supply the [cargo feature] `unstable`.
413- The various demos and benchmarks have been consolidated into one
414 program, `rayon-demo`.
415- Optimizations in Rayon's inner workings. Thanks @emilio!
416- Update `num_cpus` to 1.0. Thanks @jamwt!
417- Various internal cleanup in the implementation and typo fixes.
418 Thanks @cuviper, @Eh2406, and @spacejam!
419
420[cargo feature]: http://doc.crates.io/manifest.html#the-features-section
421
422# Release 0.4.2
423
424- Updated crates.io metadata.
425
426# Release 0.4.1
427
428- New `chain` combinator for parallel iterators.
429- `Option`, `Result`, as well as many more collection types now have
430 parallel iterators.
431- New mergesort demo.
432- Misc fixes.
433
434Thanks to @cuviper, @edre, @jdanford, @frewsxcv for their contributions!
435
436# Release 0.4
437
438- Make use of latest versions of catch-panic and various fixes to panic propagation.
439- Add new prime sieve demo.
440- Add `cloned()` and `inspect()` combinators.
441- Misc fixes for Rust RFC 1214.
442
443Thanks to @areilb1, @Amanieu, @SharplEr, and @cuviper for their contributions!
444
445# Release 0.3
446
447- Expanded `par_iter` APIs now available:
448 - `into_par_iter` is now supported on vectors (taking ownership of the elements)
449- Panic handling is much improved:
450 - if you use the Nightly feature, experimental panic recovery is available
451 - otherwise, panics propagate out and poision the workpool
452- New `Configuration` object to control number of threads and other details
453- New demos and benchmarks
454 - try `cargo run --release -- visualize` in `demo/nbody` :)
455 - Note: a nightly compiler is required for this demo due to the
456 use of the `+=` syntax
457
458Thanks to @bjz, @cuviper, @Amanieu, and @willi-kappler for their contributions!
459
460# Release 0.2 and earlier
461
462No release notes were being kept at this time.