Skip to content

Releases: vavr-io/vavr

Patch Release 0.10.6

01 Feb 13:09
Compare
Choose a tag to compare

This release brings Virtual-Thread-friendliness and documentation updates.

This is the last planned patch release for the 0.10.x train. 0.11.x incoming!

Changes

Full Changelog: v0.10.5...v0.10.6

Committers

🎉 MANY THANKS TO ALL COMMITTERS! 🎉

Patch Release 0.10.5

12 Oct 08:46
Compare
Choose a tag to compare

Vavr is back with a new maintainer, roadmap, and... a release.

image

This release brings various performance enhancements, bugfixes, and explicit jlink-friendly module declarations instead of automatic modules.

Committers

🎉 MANY THANKS TO ALL COMMITTERS! 🎉
@KrnSaurabh @achinaou @sleepytomcat @j-baker @Kevin222004 @pivovarit

Changes

Patch Release 0.10.4

14 Jul 13:53
Compare
Choose a tag to compare

Info

This is a maintenance release for the 0.10.x release train. It back ports bug fixes and improvements from the upcoming 1.0.0 release.

Please find the complete list of changes here.

The API Docs can be found here

Committers

🎉 MANY THANKS TO ALL COMMITTERS! 🎉

Changes

Patch Release 0.10.3

15 May 22:08
Compare
Choose a tag to compare

Info

This is a maintenance release for the 0.10.x release train.

Please find the complete list of changes here.

The API Docs can be found here

Committers

🎉 MANY THANKS TO ALL COMMITTERS! 🎉

Changes

  • Bugfix: #2583 Backport: Re-adds the automatic module name
  • Improvement: #2575 Backport "Avoid unnecessary copy in 'ofAll()' methods" to v0.10
  • Documentation: #2587 Bumps the copyright year to 2020

Patch Release 0.10.2

02 Aug 16:42
Compare
Choose a tag to compare

This patch release fixes the bug of overlapping JPMS module names by removing the Automatic-Module-Name attributes from the MANIFEST.MF files.

The upcoming release v1.0.0 will not have Automatic-Module-Name attributes.

The next release v2.0.0 will have proper JPMS modules.

Bugfix Release 0.10.1

23 Jul 11:18
Compare
Choose a tag to compare

Info

This is a maintenance release for the 0.10.x release train.

Please find the complete list of changes here.

The API Docs can be found here

Committers

🎉 MANY THANKS TO ALL COMMITTERS! 🎉

Changes

  • Bugfix: #2430 Future.reduce considers executor
  • Bugfix: #2426 Fixes DistictIterator to not eat null values
  • Bugfix: #2405 Fixes patmat corner case that might produce a ClassCastException
  • Bugfix: #2403 ClassCastException during pattern matching
  • Bugfix: #2399 Fix: CharSeq implements Comparable
  • Improvement: #2400 Improve performance of last() call on TreeMap

Preview Release 1.0.0 alpha 3

23 Jul 11:54
Compare
Choose a tag to compare

Info

Caution: This is a preview release of the upcoming major release 1.0.0. It is highly under development and the API is subject to change. Please do not use it in production.

We are still in the process of moving the changes from the original 1.0.0 branch to master.

Additionally there are stashed changes that did not make it into the minor release 0.10.0, that may make it into the upcoming 1.0.0 release. This is also work in progress.

The API Docs can be found here (🚧 currently unavailable because https://www.javadoc.io seems to be down)

Comitters

🎉 MANY THANKS TO ALL COMMITTERS! 🎉

Changes

Please find the complete list of changes here.

Minor Release 0.10.0

20 Jan 16:51
Compare
Choose a tag to compare

Info

The minor release 0.10.0 focuses on several API improvements.

Please find the complete list of changes here.

The API Docs can be found here

Comitters

🎉 MANY THANKS TO ALL COMMITTERS (AND THEIR PATIENCE)! 🎉

Note: A few contributions didn't made it into 0.10.0 because of backward incompatibilities.

Changes

Instead of describing all changes in detail, I will provide a list and show some examples.
Beside new features there were also several (internal) improvements not shown here.

Core/API

for

  • Change (internal): Removed internal interface io.vavr.Lambda which was on top of the (Checked)Function type hierarchy. It was not public.
  • Feature: For-comprehension supports List, Option, Future, Try
  • Feature: Tuple - append(), concat() and hash()
  • Feature: CheckedConsumer, CheckedPredicate and CheckedRunnable enhancements
  • Feature: PartialFunction now implements Function1
  • Feature: Predicates.not()
  • Feature: Value: toJavaArray(IntFunction), toTree(Function, Function)
  • Deprecation (for removal): API.Map(Tuple2)
  • Deprecation (for removal): API.LinkedMap(Tuple2)
  • Deprecation (for removal): API.SortedMap(Tuple2)
  • Deprecation (for removal): API.SortedMap(Comparator, Tuple2)
  • Deprecation (for removal): API.SortedMap(java.util.Map)
  • Deprecation (for removal): Value.toLeft()
  • Deprecation (for removal): Value.toRight()
  • Deprecation (for removal): Value.toValid()
  • Deprecation (for removal): Value.toInvalid()

Collections

for-each-with-index

  • Feature: Traversable: forEachWithIndex, reject(Predicate)
  • Feature: Iterator/Stream: fill(int, Object)
  • Feature: Map/Multimap: reject(BiPredicate), rejectKeys(Predicate), rejectValues(Predicate), keysIterator(), valuesIterator()
  • Feature: Map/Seq: asPartialFunction()
  • Feature: Seq.rotateLeft, rotateRight, takeRight, takeRightUntil, takeRightWhile

Concurrent

future

  • Change: Future now uses Executor instead of ExecutorService. The executorService() works as before if Future was initialized with an ExecutorService, otherwise it throws. User executor() instead.
  • Change: Future DEFAULT_EXECUTOR: ForkJoinPool.commonPool()
  • Feature: Future.await(long timeout, TimeUnit unit)
  • Feature: Future.isCancelled()
  • Feature (experimental): (Experimental) Future.run(Task), Future.run(Executor, Task)
  • Deprecation (for removal): Seq/Map/Set withDefault, withDefaultValue

Controls

try-fold

  • Feature: Either.sequence, Either.sequenceRight
  • Feature: Either.traverse, Either.traverseRight
  • Feature: Either.filterOrElse
  • Feature: Either.toValidation
  • Feature: Option.traverse
  • Feature: Option.fold
  • Feature: Try.traverse
  • Feature: Try.onFailure
  • Feature: Try.fold
  • Feature: Try.toValidation
  • Feature: Validation.fromTry
  • Feature: Validation.traverse
  • Deprecation (for removal): Either.left(), Either.right()
  • Deprecation (for removal): Either.LeftProjection, Either.RightProjection

Bugfix Release 0.9.3

07 Jan 01:28
Compare
Choose a tag to compare

Info

The release increases stability and performance.

Please find the complete list of changes here.

The API Docs can be found here

Comitters

🎉 MANY THANKS TO ALL COMMITTERS THAT MADE THIS RELEASE POSSIBLE 🎉

Bug fixes

🚨 LinkedHashMap duplicate entries

In Vavr 0.9.2, all LinkedHashMap factory methods internally did not store keys and values correctly.

Example:

var map = LinkedHashMap(1, "1", 1, "2", 2, "3", 2, "4");

// = 2 (CORRECT)
map.size();

// = LinkedHashSet(1, 1, 2, 2) (WRONG)
// = LinkedHashSet(1, 2) (FIXED)
map.keySet() = LinkedHashSet(1, 1, 2, 2)

// = List("1", "2", "3", "4") (WRONG)
// = List("2", "4") (FIXED)
map.values() = List(1, 2, 3, 4)

Details can be found here.

🚨 TreeSet fell back to natural comparator after removing all elements

// = TreeSet(2, 1)
var set1 = TreeSet.ofAll(Comparator.reverseOrder(), List(1, 1, 2, 2));

// = TreeSet() has now natural comparator (WRONG)
// = TreeSet() keeps reverse order (FIXED)
var set2 = set1.removeAll();

// = TreeSet(1, 2) (WRONG)
// = TreeSet(2, 1) (FIXED)
set2.addAll(List(1, 1, 2, 2));

Details can be found here.

🚨 Stream flatMap memory consumption

Stream.flatMap used an inner class for iteration, with the effect of the result stream holding an unnecessary indirect reference to the head of the source stream, resulting in a "temporary" memory leak.

However, when the reference to the original Stream was garbage-collected, the memory was completely freed.

Details can be found here.

Performance improvements

🏁 Hash code calculation

Internally, we relied on

Objects.hash(T... varargs)

for hashCode calculation. A call

Objects.hash(1, 2, 3)

results in an array creation. In order to prevent that unnecessary instance creation, we added internal methods that preserve our hash semantics.

🏁 Micro-optimizations of collections

We did some micro-optimizations to

  • CharSeq.ofAll(Iterable)
  • CharSeq.prependAll(Iterable)
  • Vector.ofAll(Iterable)
  • Vector.appendAll(Iterable)
  • Vector.prependAll(Iterable)

Low-level details can be found here.

New API

🎉 Map additions

We follow the Semantic Versioning scheme. Although this release is a patch release, there are two new methods:

I hope, your OSGi infrastructure does not complain about it.

Jar files

📦 Separate annotation processor jar

We separated annotation vavr-match-processor-<version>.jar from vavr-match-<version>.jar.

If you want to create your own pattern matching patterns, you need to include these two dependencies now instead of only vavr-match.

Documentation

📚 Javadoc improvements

  • We clarified that LinkedHashMap.put(K, V) and LinkedHashMap.add(T) have a worst-case linear complexity. This is because equal elements need to be replaced while preserving their position.
  • Several small improvements and fixes

Other improvements

  • Improved interoperability with the GWT compiler
  • Improved Eclipse integration for Vavr committers

Bugfix Release 0.9.2

24 Nov 21:44
Compare
Choose a tag to compare

Contributors

Daniel Dietrich
Erlend Hamnaberg
Michael Ummels
Pap Lőrinc
Robert Erdin
Valeriy Vyrva

Changelog

Works fine on JDK 9

Vavr 0.9.2 now works fine on JDK 9. The previous release 0.9.1 had an internal dependency that broke the JDK 9 build - we fixed that.

Note: JDK 9 introduced a type inference bug that may affect Vavr's pattern matching in some cases. Please see JDK-8039214.

Collections

  • We fixed the implementation of Multimap.last(). We did not override the default Traversable implementation.
  • We fixed a problem with the intersection of ordered collections that are based on RedBlackTree (such as TreeSet).

Concurrent

  • We fixed Future.traverse(ExecutorService, Iterable, Function). The ExecutorService was not taken into account.

More fixes...

  • Beside the above, we fixed some javadoc typos.

Please find the complete list of changes here.