]> git.proxmox.com Git - rustc.git/blame - vendor/rayon/RELEASES.md
New upstream version 1.63.0+dfsg1
[rustc.git] / vendor / rayon / RELEASES.md
CommitLineData
923072b8
FG
1# Release rayon 1.5.3 (2022-05-13)
2
3- The new `ParallelSliceMut::par_sort_by_cached_key` is a stable sort that caches
4 the keys for each item -- a parallel version of `slice::sort_by_cached_key`.
5
6# Release rayon-core 1.9.3 (2022-05-13)
7
8- Fixed a use-after-free race in job notification.
9
04454e1e
FG
10# Release rayon 1.5.2 / rayon-core 1.9.2 (2022-04-13)
11
12- The new `ParallelSlice::par_rchunks()` and `par_rchunks_exact()` iterate
13 slice chunks in reverse, aligned the against the end of the slice if the
14 length is not a perfect multiple of the chunk size. The new
15 `ParallelSliceMut::par_rchunks_mut()` and `par_rchunks_exact_mut()` are the
16 same for mutable slices.
17- The `ParallelIterator::try_*` methods now support `std::ops::ControlFlow` and
18 `std::task::Poll` items, mirroring the unstable `Try` implementations in the
19 standard library.
20- The `ParallelString` pattern-based methods now support `&[char]` patterns,
21 which match when any character in that slice is found in the string.
22- A soft limit is now enforced on the number of threads allowed in a single
23 thread pool, respecting internal bit limits that already existed. The current
24 maximum is publicly available from the new function `max_num_threads()`.
25- Fixed several Stacked Borrow and provenance issues found by `cargo miri`.
26
27## Contributors
28
29Thanks to all of the contributors for this release!
30
31- @atouchet
32- @bluss
33- @cuviper
34- @fzyzcjy
35- @nyanzebra
36- @paolobarbolini
37- @RReverser
38- @saethlin
39
17df50a5
XL
40# Release rayon 1.5.1 / rayon-core 1.9.1 (2021-05-18)
41
42- The new `in_place_scope` and `in_place_scope_fifo` are variations of `scope`
43 and `scope_fifo`, running the initial non-`Send` callback directly on the
44 current thread, rather than moving execution to the thread pool.
45- With Rust 1.51 or later, arrays now implement `IntoParallelIterator`.
46- New implementations of `FromParallelIterator` make it possible to `collect`
47 complicated nestings of items.
48 - `FromParallelIterator<(A, B)> for (FromA, FromB)` works like `unzip`.
49 - `FromParallelIterator<Either<L, R>> for (A, B)` works like `partition_map`.
50- Type inference now works better with parallel `Range` and `RangeInclusive`.
51- The implementation of `FromParallelIterator` and `ParallelExtend` for
52 `Vec<T>` now uses `MaybeUninit<T>` internally to avoid creating any
53 references to uninitialized data.
54- `ParallelBridge` fixed a bug with threads missing available work.
55
56## Contributors
57
58Thanks to all of the contributors for this release!
59
60- @atouchet
61- @cuviper
62- @Hywan
63- @iRaiko
64- @Qwaz
65- @rocallahan
66
5869c6ff
XL
67# Release rayon 1.5.0 / rayon-core 1.9.0 (2020-10-21)
68
69- Update crossbeam dependencies.
70- The minimum supported `rustc` is now 1.36.
71
72## Contributors
73
74Thanks to all of the contributors for this release!
75
76- @cuviper
77- @mbrubeck
78- @mrksu
79
80# Release rayon 1.4.1 (2020-09-29)
81
82- The new `flat_map_iter` and `flatten_iter` methods can be used to flatten
83 sequential iterators, which may perform better in cases that don't need the
84 nested parallelism of `flat_map` and `flatten`.
85- The new `par_drain` method is a parallel version of the standard `drain` for
86 collections, removing items while keeping the original capacity. Collections
87 that implement this through `ParallelDrainRange` support draining items from
88 arbitrary index ranges, while `ParallelDrainFull` always drains everything.
89- The new `positions` method finds all items that match the given predicate and
90 returns their indices in a new iterator.
91
92# Release rayon-core 1.8.1 (2020-09-17)
93
94- Fixed an overflow panic on high-contention workloads, for a counter that was
95 meant to simply wrap. This panic only occurred with debug assertions enabled,
96 and was much more likely on 32-bit targets.
97
1b1a35ee
XL
98# Release rayon 1.4.0 / rayon-core 1.8.0 (2020-08-24)
99
100- Implemented a new thread scheduler, [RFC 5], which uses targeted wakeups for
101 new work and for notifications of completed stolen work, reducing wasteful
102 CPU usage in idle threads.
103- Implemented `IntoParallelIterator for Range<char>` and `RangeInclusive<char>`
104 with the same iteration semantics as Rust 1.45.
105- Relaxed the lifetime requirements of the initial `scope` closure.
106
107[RFC 5]: https://github.com/rayon-rs/rfcs/pull/5
108
109## Contributors
110
111Thanks to all of the contributors for this release!
112
113- @CAD97
114- @cuviper
115- @kmaork
116- @nikomatsakis
117- @SuperFluffy
118
119
f035d41b
XL
120# Release rayon 1.3.1 / rayon-core 1.7.1 (2020-06-15)
121
122- Fixed a use-after-free race in calls blocked between two rayon thread pools.
123- Collecting to an indexed `Vec` now drops any partial writes while unwinding,
124 rather than just leaking them. If dropping also panics, Rust will abort.
125 - Note: the old leaking behavior is considered _safe_, just not ideal.
126- The new `IndexedParallelIterator::step_by()` adapts an iterator to step
127 through items by the given count, like `Iterator::step_by()`.
128- The new `ParallelSlice::par_chunks_exact()` and mutable equivalent
129 `ParallelSliceMut::par_chunks_exact_mut()` ensure that the chunks always have
130 the exact length requested, leaving any remainder separate, like the slice
131 methods `chunks_exact()` and `chunks_exact_mut()`.
132
133## Contributors
134
135Thanks to all of the contributors for this release!
136
137- @adrian5
138- @bluss
139- @cuviper
140- @FlyingCanoe
141- @GuillaumeGomez
142- @matthiasbeyer
143- @picoHz
144- @zesterer
145
146
147# Release rayon 1.3.0 / rayon-core 1.7.0 (2019-12-21)
148
149- Tuples up to length 12 now implement `IntoParallelIterator`, creating a
150 `MultiZip` iterator that produces items as similarly-shaped tuples.
151- The `--cfg=rayon_unstable` supporting code for `rayon-futures` is removed.
152- The minimum supported `rustc` is now 1.31.
153
154## Contributors
155
156Thanks to all of the contributors for this release!
157
158- @cuviper
159- @c410-f3r
160- @silwol
161
162
163# Release rayon-futures 0.1.1 (2019-12-21)
164
165- `Send` bounds have been added for the `Item` and `Error` associated types on
166 all generic `F: Future` interfaces. While technically a breaking change, this
167 is a soundness fix, so we are not increasing the semantic version for this.
168- This crate is now deprecated, and the `--cfg=rayon_unstable` supporting code
169 will be removed in `rayon-core 1.7.0`. This only supported the now-obsolete
170 `Future` from `futures 0.1`, while support for `std::future::Future` is
171 expected to come directly in `rayon-core` -- although that is not ready yet.
172
173## Contributors
174
175Thanks to all of the contributors for this release!
176
177- @cuviper
178- @kornelski
179- @jClaireCodesStuff
180- @jwass
181- @seanchen1991
182
183
184# Release rayon 1.2.1 / rayon-core 1.6.1 (2019-11-20)
185
186- Update crossbeam dependencies.
187- Add top-level doc links for the iterator traits.
188- Document that the iterator traits are not object safe.
189
190## Contributors
191
192Thanks to all of the contributors for this release!
193
194- @cuviper
195- @dnaka91
196- @matklad
197- @nikomatsakis
198- @Qqwy
199- @vorner
200
201
e74abb32
XL
202# Release rayon 1.2.0 / rayon-core 1.6.0 (2019-08-30)
203
204- The new `ParallelIterator::copied()` converts an iterator of references into
205 copied values, like `Iterator::copied()`.
206- `ParallelExtend` is now implemented for the unit `()`.
207- Internal updates were made to improve test determinism, reduce closure type
208 sizes, reduce task allocations, and update dependencies.
209- The minimum supported `rustc` is now 1.28.
210
211## Contributors
212
213Thanks to all of the contributors for this release!
214
215- @Aaron1011
216- @cuviper
217- @ralfbiedert
218
219
416331ca
XL
220# Release rayon 1.1.0 / rayon-core 1.5.0 (2019-06-12)
221
222- FIFO spawns are now supported using the new `spawn_fifo()` and `scope_fifo()`
223 global functions, and their corresponding `ThreadPool` methods.
224 - Normally when tasks are queued on a thread, the most recent is processed
225 first (LIFO) while other threads will steal the oldest (FIFO). With FIFO
226 spawns, those tasks are processed locally in FIFO order too.
227 - Regular spawns and other tasks like `join` are not affected.
228 - The `breadth_first` configuration flag, which globally approximated this
229 effect, is now deprecated.
230 - For more design details, please see [RFC 1].
231- `ThreadPoolBuilder` can now take a custom `spawn_handler` to control how
232 threads will be created in the pool.
233 - `ThreadPoolBuilder::build_scoped()` uses this to create a scoped thread
234 pool, where the threads are able to use non-static data.
235 - This may also be used to support threading in exotic environments, like
236 WebAssembly, which don't support the normal `std::thread`.
237- `ParallelIterator` has 3 new methods: `find_map_any()`, `find_map_first()`,
238 and `find_map_last()`, like `Iterator::find_map()` with ordering constraints.
239- The new `ParallelIterator::panic_fuse()` makes a parallel iterator halt as soon
240 as possible if any of its threads panic. Otherwise, the panic state is not
241 usually noticed until the iterator joins its parallel tasks back together.
242- `IntoParallelIterator` is now implemented for integral `RangeInclusive`.
243- Several internal `Folder`s now have optimized `consume_iter` implementations.
244- `rayon_core::current_thread_index()` is now re-exported in `rayon`.
245- The minimum `rustc` is now 1.26, following the update policy defined in [RFC 3].
246
247## Contributors
248
249Thanks to all of the contributors for this release!
250
251- @cuviper
252- @didroe
253- @GuillaumeGomez
254- @huonw
255- @janriemer
256- @kornelski
257- @nikomatsakis
258- @seanchen1991
259- @yegeun542
260
261[RFC 1]: https://github.com/rayon-rs/rfcs/blob/master/accepted/rfc0001-scope-scheduling.md
262[RFC 3]: https://github.com/rayon-rs/rfcs/blob/master/accepted/rfc0003-minimum-rustc.md
263
264
265# Release rayon 1.0.3 (2018-11-02)
266
267- `ParallelExtend` is now implemented for tuple pairs, enabling nested
268 `unzip()` and `partition_map()` operations. For instance, `(A, (B, C))`
269 items can be unzipped into `(Vec<A>, (Vec<B>, Vec<C>))`.
270 - `ParallelExtend<(A, B)>` works like `unzip()`.
271 - `ParallelExtend<Either<A, B>>` works like `partition_map()`.
272- `ParallelIterator` now has a method `map_init()` which calls an `init`
273 function for a value to pair with items, like `map_with()` but dynamically
274 constructed. That value type has no constraints, not even `Send` or `Sync`.
275 - The new `for_each_init()` is a variant of this for simple iteration.
276 - The new `try_for_each_init()` is a variant for fallible iteration.
277
278## Contributors
279
280Thanks to all of the contributors for this release!
281
282- @cuviper
283- @dan-zheng
284- @dholbert
285- @ignatenkobrain
286- @mdonoughe
287
288
289# Release rayon 1.0.2 / rayon-core 1.4.1 (2018-07-17)
290
291- The `ParallelBridge` trait with method `par_bridge()` makes it possible to
292 use any `Send`able `Iterator` in parallel!
293 - This trait has been added to `rayon::prelude`.
294 - It automatically implements internal synchronization and queueing to
295 spread the `Item`s across the thread pool. Iteration order is not
296 preserved by this adaptor.
297 - "Native" Rayon iterators like `par_iter()` should still be preferred when
298 possible for better efficiency.
299- `ParallelString` now has additional methods for parity with `std` string
300 iterators: `par_char_indices()`, `par_bytes()`, `par_encode_utf16()`,
301 `par_matches()`, and `par_match_indices()`.
302- `ParallelIterator` now has fallible methods `try_fold()`, `try_reduce()`,
303 and `try_for_each`, plus `*_with()` variants of each, for automatically
304 short-circuiting iterators on `None` or `Err` values. These are inspired by
305 `Iterator::try_fold()` and `try_for_each()` that were stabilized in Rust 1.27.
306- `Range<i128>` and `Range<u128>` are now supported with Rust 1.26 and later.
307- Small improvements have been made to the documentation.
308- `rayon-core` now only depends on `rand` for testing.
309- Rayon tests now work on stable Rust.
310
311## Contributors
312
313Thanks to all of the contributors for this release!
314
315- @AndyGauge
316- @cuviper
317- @ignatenkobrain
318- @LukasKalbertodt
319- @MajorBreakfast
320- @nikomatsakis
321- @paulkernfeld
322- @QuietMisdreavus
323
324
325# Release rayon 1.0.1 (2018-03-16)
83c7162d
XL
326
327- Added more documentation for `rayon::iter::split()`.
328- Corrected links and typos in documentation.
329
330## Contributors
331
332Thanks to all of the contributors for this release!
333
334- @cuviper
335- @HadrienG2
336- @matthiasbeyer
337- @nikomatsakis
338
339
416331ca 340# Release rayon 1.0.0 / rayon-core 1.4.0 (2018-02-15)
2c00a5a8
XL
341
342- `ParallelIterator` added the `update` method which applies a function to
343 mutable references, inspired by `itertools`.
344- `IndexedParallelIterator` added the `chunks` method which yields vectors of
345 consecutive items from the base iterator, inspired by `itertools`.
346- `String` now implements `FromParallelIterator<Cow<str>>` and
347 `ParallelExtend<Cow<str>>`, inspired by `std`.
348- `()` now implements `FromParallelIterator<()>`, inspired by `std`.
349- The new `ThreadPoolBuilder` replaces and deprecates `Configuration`.
350 - Errors from initialization now have the concrete `ThreadPoolBuildError`
351 type, rather than `Box<Error>`, and this type implements `Send` and `Sync`.
352 - `ThreadPool::new` is deprecated in favor of `ThreadPoolBuilder::build`.
353 - `initialize` is deprecated in favor of `ThreadPoolBuilder::build_global`.
354- Examples have been added to most of the parallel iterator methods.
355- A lot of the documentation has been reorganized and extended.
356
357## Breaking changes
358
359- Rayon now requires rustc 1.13 or greater.
360- `IndexedParallelIterator::len` and `ParallelIterator::opt_len` now operate on
361 `&self` instead of `&mut self`.
362- `IndexedParallelIterator::collect_into` is now `collect_into_vec`.
363- `IndexedParallelIterator::unzip_into` is now `unzip_into_vecs`.
364- Rayon no longer exports the deprecated `Configuration` and `initialize` from
365 rayon-core.
366
367## Contributors
368
369Thanks to all of the contributors for this release!
370
371- @Bilkow
372- @cuviper
373- @Enet4
374- @ignatenkobrain
375- @iwillspeak
376- @jeehoonkang
377- @jwass
378- @Kerollmops
379- @KodrAus
380- @kornelski
381- @MaloJaffre
382- @nikomatsakis
383- @obv-mikhail
384- @oddg
385- @phimuemue
386- @stjepang
387- @tmccombs
388- bors[bot]
389
390
416331ca 391# Release rayon 0.9.0 / rayon-core 1.3.0 / rayon-futures 0.1.0 (2017-11-09)
2c00a5a8
XL
392
393- `Configuration` now has a `build` method.
394- `ParallelIterator` added `flatten` and `intersperse`, both inspired by
395 itertools.
396- `IndexedParallelIterator` added `interleave`, `interleave_shortest`, and
397 `zip_eq`, all inspired by itertools.
398- The new functions `iter::empty` and `once` create parallel iterators of
399 exactly zero or one item, like their `std` counterparts.
400- The new functions `iter::repeat` and `repeatn` create parallel iterators
401 repeating an item indefinitely or `n` times, respectively.
402- The new function `join_context` works like `join`, with an added `FnContext`
403 parameter that indicates whether the job was stolen.
404- `Either` (used by `ParallelIterator::partition_map`) is now re-exported from
405 the `either` crate, instead of defining our own type.
406 - `Either` also now implements `ParallelIterator`, `IndexedParallelIterator`,
407 and `ParallelExtend` when both of its `Left` and `Right` types do.
408- All public types now implement `Debug`.
409- Many of the parallel iterators now implement `Clone` where possible.
410- Much of the documentation has been extended. (but still could use more help!)
411- All rayon crates have improved metadata.
412- Rayon was evaluated in the Libz Blitz, leading to many of these improvements.
413- Rayon pull requests are now guarded by bors-ng.
414
415## Futures
416
417The `spawn_future()` method has been refactored into its own `rayon-futures`
418crate, now through a `ScopeFutureExt` trait for `ThreadPool` and `Scope`. The
419supporting `rayon-core` APIs are still gated by `--cfg rayon_unstable`.
420
421## Breaking changes
422
423- Two breaking changes have been made to `rayon-core`, but since they're fixing
424 soundness bugs, we are considering these _minor_ changes for semver.
425 - `Scope::spawn` now requires `Send` for the closure.
426 - `ThreadPool::install` now requires `Send` for the return value.
427- The `iter::internal` module has been renamed to `iter::plumbing`, to hopefully
428 indicate that while these are low-level details, they're not really internal
429 or private to rayon. The contents of that module are needed for third-parties
430 to implement new parallel iterators, and we'll treat them with normal semver
431 stability guarantees.
432- The function `rayon::iter::split` is no longer re-exported as `rayon::split`.
433
434## Contributors
435
436Thanks to all of the contributors for this release!
437
438- @AndyGauge
439- @ChristopherDavenport
440- @chrisvittal
441- @cuviper
442- @dns2utf8
443- @dtolnay
444- @frewsxcv
445- @gsquire
446- @Hittherhod
447- @jdr023
448- @laumann
449- @leodasvacas
450- @lvillani
451- @MajorBreakfast
452- @mamuleanu
453- @marmistrz
454- @mbrubeck
455- @mgattozzi
456- @nikomatsakis
457- @smt923
458- @stjepang
459- @tmccombs
460- @vishalsodani
461- bors[bot]
462
463
416331ca 464# Release rayon 0.8.2 (2017-06-28)
2c00a5a8
XL
465
466- `ParallelSliceMut` now has six parallel sorting methods with the same
467 variations as the standard library.
468 - `par_sort`, `par_sort_by`, and `par_sort_by_key` perform stable sorts in
469 parallel, using the default order, a custom comparator, or a key extraction
470 function, respectively.
471 - `par_sort_unstable`, `par_sort_unstable_by`, and `par_sort_unstable_by_key`
472 perform unstable sorts with the same comparison options.
473 - Thanks to @stjepang!
474
416331ca
XL
475
476# Release rayon 0.8.1 / rayon-core 1.2.0 (2017-06-14)
2c00a5a8
XL
477
478- The following core APIs are being stabilized:
479 - `rayon::spawn()` -- spawns a task into the Rayon threadpool; as it
480 is contained in the global scope (rather than a user-created
481 scope), the task cannot capture anything from the current stack
482 frame.
483 - `ThreadPool::join()`, `ThreadPool::spawn()`, `ThreadPool::scope()`
416331ca 484 -- convenience APIs for launching new work within a thread-pool.
2c00a5a8
XL
485- The various iterator adapters are now tagged with `#[must_use]`
486- Parallel iterators now offer a `for_each_with` adapter, similar to
487 `map_with`.
488- We are adopting a new approach to handling the remaining unstable
489 APIs (which primarily pertain to futures integration). As awlays,
490 unstable APIs are intended for experimentation, but do not come with
491 any promise of compatibility (in other words, we might change them
492 in arbitrary ways in any release). Previously, we designated such
493 APIs using a Cargo feature "unstable". Now, we are using a regular
494 `#[cfg]` flag. This means that to see the unstable APIs, you must do
495 `RUSTFLAGS='--cfg rayon_unstable' cargo build`. This is
496 intentionally inconvenient; in particular, if you are a library,
497 then your clients must also modify their environment, signaling
498 their agreement to instability.
499
416331ca
XL
500
501# Release rayon 0.8.0 / rayon-core 1.1.0 (2017-06-13)
2c00a5a8
XL
502
503## Rayon 0.8.0
504
505- Added the `map_with` and `fold_with` combinators, which help for
506 passing along state (like channels) that cannot be shared between
507 threads but which can be cloned on each thread split.
508- Added the `while_some` combinator, which helps for writing short-circuiting iterators.
509- Added support for "short-circuiting" collection: e.g., collecting
510 from an iterator producing `Option<T>` or `Result<T, E>` into a
511 `Option<Collection<T>>` or `Result<Collection<T>, E>`.
512- Support `FromParallelIterator` for `Cow`.
513- Removed the deprecated weight APIs.
514- Simplified the parallel iterator trait hierarchy by removing the
515 `BoundedParallelIterator` and `ExactParallelIterator` traits,
516 which were not serving much purpose.
517- Improved documentation.
518- Added some missing `Send` impls.
519- Fixed some small bugs.
520
521## Rayon-core 1.1.0
522
523- We now have more documentation.
524- Renamed the (unstable) methods `spawn_async` and
525 `spawn_future_async` -- which spawn tasks that cannot hold
526 references -- to simply `spawn` and `spawn_future`, respectively.
527- We are now using the coco library for our deque.
528- Individual threadpools can now be configured in "breadth-first"
529 mode, which causes them to execute spawned tasks in the reverse
530 order that they used to. In some specific scenarios, this can be a
531 win (though it is not generally the right choice).
532- Added top-level functions:
533 - `current_thread_index`, for querying the index of the current worker thread within
534 its thread-pool (previously available as `thread_pool.current_thread_index()`);
535 - `current_thread_has_pending_tasks`, for querying whether the
536 current worker that has an empty task deque or not. This can be
537 useful when deciding whether to spawn a task.
538- The environment variables for controlling Rayon are now
539 `RAYON_NUM_THREADS` and `RAYON_LOG`. The older variables (e.g.,
540 `RAYON_RS_NUM_CPUS` are still supported but deprecated).
541
542## Rayon-demo
543
544- Added a new game-of-life benchmark.
545
546## Contributors
547
548Thanks to the following contributors:
549
550- @ChristopherDavenport
551- @SuperFluffy
552- @antoinewdg
553- @crazymykl
554- @cuviper
555- @glandium
556- @julian-seward1
557- @leodasvacas
558- @leshow
559- @lilianmoraru
560- @mschmo
561- @nikomatsakis
562- @stjepang
563
416331ca
XL
564
565# Release rayon 0.7.1 / rayon-core 1.0.2 (2017-05-30)
2c00a5a8
XL
566
567This release is a targeted performance fix for #343, an issue where
568rayon threads could sometimes enter into a spin loop where they would
569be unable to make progress until they are pre-empted.
570
416331ca
XL
571
572# Release rayon 0.7 / rayon-core 1.0 (2017-04-06)
2c00a5a8
XL
573
574This release marks the first step towards Rayon 1.0. **For best
575performance, it is important that all Rayon users update to at least
576Rayon 0.7.** This is because, as of Rayon 0.7, we have taken steps to
577ensure that, no matter how many versions of rayon are actively in use,
578there will only be a single global scheduler. This is achieved via the
579`rayon-core` crate, which is being released at version 1.0, and which
580encapsulates the core schedule APIs like `join()`. (Note: the
581`rayon-core` crate is, to some degree, an implementation detail, and
582not intended to be imported directly; it's entire API surface is
583mirrored through the rayon crate.)
584
585We have also done a lot of work reorganizing the API for Rayon 0.7 in
586preparation for 1.0. The names of iterator types have been changed and
587reorganized (but few users are expected to be naming those types
588explicitly anyhow). In addition, a number of parallel iterator methods
589have been adjusted to match those in the standard iterator traits more
590closely. See the "Breaking Changes" section below for
591details.
592
593Finally, Rayon 0.7 includes a number of new features and new parallel
594iterator methods. **As of this release, Rayon's parallel iterators
595have officially reached parity with sequential iterators** -- that is,
596every sequential iterator method that makes any sense in parallel is
597supported in some capacity.
598
599### New features and methods
600
601- The internal `Producer` trait now features `fold_with`, which enables
602 better performance for some parallel iterators.
603- Strings now support `par_split()` and `par_split_whitespace()`.
604- The `Configuration` API is expanded and simplified:
416331ca
XL
605 - `num_threads(0)` no longer triggers an error
606 - you can now supply a closure to name the Rayon threads that get created
2c00a5a8
XL
607 by using `Configuration::thread_name`.
608 - you can now inject code when Rayon threads start up and finish
609 - you can now set a custom panic handler to handle panics in various odd situations
610- Threadpools are now able to more gracefully put threads to sleep when not needed.
611- Parallel iterators now support `find_first()`, `find_last()`, `position_first()`,
612 and `position_last()`.
613- Parallel iterators now support `rev()`, which primarily affects subsequent calls
614 to `enumerate()`.
615- The `scope()` API is now considered stable (and part of `rayon-core`).
616- There is now a useful `rayon::split` function for creating custom
617 Rayon parallel iterators.
618- Parallel iterators now allow you to customize the min/max number of
619 items to be processed in a given thread. This mechanism replaces the
620 older `weight` mechanism, which is deprecated.
621- `sum()` and friends now use the standard `Sum` traits
622
623### Breaking changes
624
625In the move towards 1.0, there have been a number of minor breaking changes:
626
627- Configuration setters like `Configuration::set_num_threads()` lost the `set_` prefix,
628 and hence become something like `Configuration::num_threads()`.
629- `Configuration` getters are removed
630- Iterator types have been shuffled around and exposed more consistently:
631 - combinator types live in `rayon::iter`, e.g. `rayon::iter::Filter`
632 - iterators over various types live in a module named after their type,
633 e.g. `rayon::slice::Windows`
634- When doing a `sum()` or `product()`, type annotations are needed for the result
635 since it is now possible to have the resulting sum be of a type other than the value
636 you are iterating over (this mirrors sequential iterators).
637
638### Experimental features
639
640Experimental features require the use of the `unstable` feature. Their
641APIs may change or disappear entirely in future releases (even minor
642releases) and hence they should be avoided for production code.
643
644- We now have (unstable) support for futures integration. You can use
645 `Scope::spawn_future` or `rayon::spawn_future_async()`.
646- There is now a `rayon::spawn_async()` function for using the Rayon
647 threadpool to run tasks that do not have references to the stack.
648
649### Contributors
650
651Thanks to the following people for their contributions to this release:
652
653- @Aaronepower
654- @ChristopherDavenport
655- @bluss
656- @cuviper
657- @froydnj
658- @gaurikholkar
659- @hniksic
660- @leodasvacas
661- @leshow
662- @martinhath
663- @mbrubeck
664- @nikomatsakis
665- @pegomes
666- @schuster
667- @torkleyy
668
416331ca
XL
669
670# Release 0.6 (2016-12-21)
2c00a5a8
XL
671
672This release includes a lot of progress towards the goal of parity
673with the sequential iterator API, though there are still a few methods
674that are not yet complete. If you'd like to help with that effort,
17df50a5 675[check out the milestone](https://github.com/rayon-rs/rayon/issues?q=is%3Aopen+is%3Aissue+milestone%3A%22Parity+with+the+%60Iterator%60+trait%22)
2c00a5a8
XL
676to see the remaining issues.
677
678**Announcement:** @cuviper has been added as a collaborator to the
679Rayon repository for all of his outstanding work on Rayon, which
680includes both internal refactoring and helping to shape the public
681API. Thanks @cuviper! Keep it up.
682
683- We now support `collect()` and not just `collect_with()`.
684 You can use `collect()` to build a number of collections,
685 including vectors, maps, and sets. Moreover, when building a vector
686 with `collect()`, you are no longer limited to exact parallel iterators.
687 Thanks @nikomatsakis, @cuviper!
688- We now support `skip()` and `take()` on parallel iterators.
689 Thanks @martinhath!
690- **Breaking change:** We now match the sequential APIs for `min()` and `max()`.
691 We also support `min_by_key()` and `max_by_key()`. Thanks @tapeinosyne!
692- **Breaking change:** The `mul()` method is now renamed to `product()`,
693 to match sequential iterators. Thanks @jonathandturner!
416331ca 694- We now support parallel iterator over ranges on `u64` values. Thanks @cuviper!
2c00a5a8
XL
695- We now offer a `par_chars()` method on strings for iterating over characters
696 in parallel. Thanks @cuviper!
697- We now have new demos: a traveling salesman problem solver as well as matrix
698 multiplication. Thanks @nikomatsakis, @edre!
699- We are now documenting our minimum rustc requirement (currently
700 v1.12.0). We will attempt to maintain compatibility with rustc
701 stable v1.12.0 as long as it remains convenient, but if new features
702 are stabilized or added that would be helpful to Rayon, or there are
703 bug fixes that we need, we will bump to the most recent rustc. Thanks @cuviper!
704- The `reduce()` functionality now has better inlining.
705 Thanks @bluss!
706- The `join()` function now has some documentation. Thanks @gsquire!
707- The project source has now been fully run through rustfmt.
708 Thanks @ChristopherDavenport!
709- Exposed helper methods for accessing the current thread index.
710 Thanks @bholley!
711
416331ca
XL
712
713# Release 0.5 (2016-11-04)
2c00a5a8
XL
714
715- **Breaking change:** The `reduce` method has been vastly
716 simplified, and `reduce_with_identity` has been deprecated.
717- **Breaking change:** The `fold` method has been changed. It used to
718 always reduce the values, but now instead it is a combinator that
719 returns a parallel iterator which can itself be reduced. See the
720 docs for more information.
721- The following parallel iterator combinators are now available (thanks @cuviper!):
722 - `find_any()`: similar to `find` on a sequential iterator,
723 but doesn't necessarily return the *first* matching item
724 - `position_any()`: similar to `position` on a sequential iterator,
725 but doesn't necessarily return the index of *first* matching item
726 - `any()`, `all()`: just like their sequential counterparts
727- The `count()` combinator is now available for parallel iterators.
728- We now build with older versions of rustc again (thanks @durango!),
729 as we removed a stray semicolon from `thread_local!`.
730- Various improvements to the (unstable) `scope()` API implementation.
416331ca
XL
731
732
733# Release 0.4.3 (2016-10-25)
2c00a5a8
XL
734
735- Parallel iterators now offer an adaptive weight scheme,
736 which means that explicit weights should no longer
737 be necessary in most cases! Thanks @cuviper!
738 - We are considering removing weights or changing the weight mechanism
739 before 1.0. Examples of scenarios where you still need weights even
740 with this adaptive mechanism would be great. Join the discussion
17df50a5 741 at <https://github.com/rayon-rs/rayon/issues/111>.
2c00a5a8
XL
742- New (unstable) scoped threads API, see `rayon::scope` for details.
743 - You will need to supply the [cargo feature] `unstable`.
744- The various demos and benchmarks have been consolidated into one
745 program, `rayon-demo`.
416331ca 746- Optimizations in Rayon's inner workings. Thanks @emilio!
2c00a5a8
XL
747- Update `num_cpus` to 1.0. Thanks @jamwt!
748- Various internal cleanup in the implementation and typo fixes.
749 Thanks @cuviper, @Eh2406, and @spacejam!
750
17df50a5 751[cargo feature]: https://doc.rust-lang.org/cargo/reference/features.html#the-features-section
2c00a5a8 752
416331ca
XL
753
754# Release 0.4.2 (2016-09-15)
2c00a5a8
XL
755
756- Updated crates.io metadata.
757
416331ca
XL
758
759# Release 0.4.1 (2016-09-14)
2c00a5a8
XL
760
761- New `chain` combinator for parallel iterators.
762- `Option`, `Result`, as well as many more collection types now have
763 parallel iterators.
764- New mergesort demo.
765- Misc fixes.
766
767Thanks to @cuviper, @edre, @jdanford, @frewsxcv for their contributions!
768
416331ca
XL
769
770# Release 0.4 (2016-05-16)
2c00a5a8
XL
771
772- Make use of latest versions of catch-panic and various fixes to panic propagation.
773- Add new prime sieve demo.
774- Add `cloned()` and `inspect()` combinators.
775- Misc fixes for Rust RFC 1214.
776
777Thanks to @areilb1, @Amanieu, @SharplEr, and @cuviper for their contributions!
778
416331ca
XL
779
780# Release 0.3 (2016-02-23)
2c00a5a8
XL
781
782- Expanded `par_iter` APIs now available:
783 - `into_par_iter` is now supported on vectors (taking ownership of the elements)
784- Panic handling is much improved:
785 - if you use the Nightly feature, experimental panic recovery is available
786 - otherwise, panics propagate out and poision the workpool
787- New `Configuration` object to control number of threads and other details
788- New demos and benchmarks
789 - try `cargo run --release -- visualize` in `demo/nbody` :)
790 - Note: a nightly compiler is required for this demo due to the
791 use of the `+=` syntax
792
793Thanks to @bjz, @cuviper, @Amanieu, and @willi-kappler for their contributions!
794
416331ca 795
2c00a5a8
XL
796# Release 0.2 and earlier
797
798No release notes were being kept at this time.