Skip to content

Releases: aol/cyclops

Cyclops X patch release 1

30 Oct 15:39
d9a6b7c
Compare
Choose a tag to compare

Cyclops X patch release 1 (10.0.1)

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona
  • JVM polyglot higher kinder types support via KindedJ

What’s new Cyclops X patch release 1

  • Views respect the semantics of the JDK Collection interfaces as defined in the Javadoc (i.e. UnsupportedOperationExceptions are thrown for add / remove etc).

Changelog

Check out the features delivered and bugs fixed -

github 10.0.1 issues & PRs

Dependency changes

None this time

Modules

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.1’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.1’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.1’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.1’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.1’

Cyclops Reactor Integration

   compile 'com.oath.cyclops:cyclops-reactor-integration:10.0.1'

Cyclops RxJava2 Integration

   compile 'com.oath.cyclops:cyclops-rx2-integration:10.0.1'

Cyclops Jackson Integration

   compile 'com.oath.cyclops:cyclops-jackson-integration:10.0.1'

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops Reactor Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactor-integration</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops RxJava2 Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-rx2-integration</artifactId>
    <version>10.0.1</version>
</dependency>

Cyclops Jackson Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-jackson-integration</artifactId>
    <version>10.0.1</version>
</dependency>

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

Cyclops X FINAL : Release version of Cyclops 10!

31 Aug 13:40
9835db0
Compare
Choose a tag to compare

Cyclops X FINAL (10.0.0-FINAL)

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona
  • JVM polyglot higher kinder types support via KindedJ

What’s new Cyclops X FINAL Release

  • API enhancement : remove limit / skip overloads (remains on ReactiveSeq for Stream compatibility)
  • Recursion and concurrent Evaluation enhancements to Eval
  • Performance enhancements : core operations improved for Vector, Seq, LazySeq
  • Make illegal states unrepresentable : LazySeq is 100% lazy
  • IO enhancements : synchronous IO and FutureStream based concurrent IO

API enhancement : remove limit / skip overloads

  • take / drop are used everywhere
  • only ReactiveSeq retains limit / skip as defined in the Stream API

Recursion and concurrent Evaluation enhancements to Eval

  • Eval zipping should focus on supporting interleaving the execution of Evals

The zip method on Eval can used to Evaluate multiple lazy code blocks concurrently, and only accepts another Eval, Trampoline or Supplier as a parameter.

public void interleave(){

        Eval<Integer> algorithm1 = loop(50000,Eval.now(5));
        Eval<Integer> algorithm2 = loop2(50000,Eval.now(5));

        //interleaved execution via Zip!
        Tuple2<Integer, Integer> result = algorithm1.zip(algorithm2,Tuple::tuple).get();

        System.out.println(result);
}

Eval<Integer> loop2(int times,Eval<Integer> sum){
        System.out.println("Loop-B " + times + " : " + sum);
        if(times==0)
            return sum;
        else
            return sum.flatMap(s->loop2(times-1,Eval.now(s+times)));
}

Eval<Integer> loop(int times,Eval<Integer> sum){
        System.out.println("Loop-A " + times + " : " + sum);
        if(times==0)
            return sum;
        else
            return sum.flatMap(s->loop(times-1,Eval.now(s+times)));
}
Producing output showing executing of interleaved lazy calls
Loop-B 15746 : Always[1126048874]
Loop-A 15745 : Always[1126064620]
Loop-B 15745 : Always[1126064620]
Loop-A 15744 : Always[1126080365]
Loop-B 15744 : Always[1126080365]
Loop-A 15743 : Always[1126096109]
Loop-B 15743 : Always[1126096109]
Loop-A 15742 : Always[1126111852]
Loop-B 15742 : Always[1126111852]
Loop-A 15741 : Always[1126127594]

Support Tail-recursion on methods that return a Supplier

Ensure a clean Eval can be created from a Supplier that supports tail-recursion on methods with JDK Friendly method signatures.

Supplier<Integer> loopSupplier(int times, int sum)
Then using Eval, this call shouldn't blow the stack
Supplier<Integer> algorithm1 = loopSupplier(50000,5);
System.out.println(algorithm1.get());
Provide a method to create an Eval from a Supplier
Supplier<Integer> loopSupplier(int times, int sum){
        if(times==0)
            return ()->sum;
        else
            return eval(()->sum).flatMap(s->Evala.eval(loopSupplier(times-1,s+times)));
}

Performance enhancements : core operations improved for Vector, Seq, LazySeq

Significant performance enhancements for append, get, setAt / update for core collections. E.g. Comparison with Vavr (post enhancements - Vavr was faster before) for Vector storing Strings

  • Append 10,000 Strings 50th percentile (ms/ops) :
  1. Vector (Vavr) : 0.222
  2. Vector (Cyclops) : 0.041
    https://github.com/aol/cyclops-react/blob/master/cyclops/src/jmh/java/cyclops/DataAppend.java

Make illegal states unrepresentable

** Make LazySeq totally lazy, solves numerous runtime errors and infinite loop issues
e.g. in Scala

Stream.continually(1)
	    .filter(i=>false)
            .take(0)
            .isEmpty //infinite loop that never finishes!

But Cyclops

LazySeq.generate(()->1)
	      .filter(I->false)
              .take(0)
              .isEmpty() //true! 

IO enhancements : synchronous IO and FutureStream based concurrent IO

  • Synchronous IO
    For purely synchronous IO this model of execution will give better performance
IO.sync(this::readData)
  .map(this::process)
  .map(this::save)
  .run()
  • FutureStream based IO for blocking concurrent operations
FutureStreamIO.of(Executors.newCachedThreadPool(), this::readUserDataFromCache, this::readUserDataFromDisk, this::readUserDataFromDB)
                .map(this::process)
                .map(this::save)
                .run()

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-FINAL issues & PRs

Dependency changes

Reactive Streams to 1.0.2

Modules

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-FINAL’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-FINAL’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-FINAL’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-FINAL’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.0-FINAL’

Cyclops Reactor Integration

   compile 'com.oath.cyclops:cyclops-reactor-integration:10.0.0-FINAL'

Cyclops RxJava2 Integration

   compile 'com.oath.cyclops:cyclops-rx2-integration:10.0.0-FINAL'

Cyclops Jackson Integration

   compile 'com.oath.cyclops:cyclops-jackson-integration:10.0.0-FINAL'

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops Reactor Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactor-integration</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops RxJava2 Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-rx2-integration</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

Cyclops Jackson Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-jackson-integration</artifactId>
    <version>10.0.0-FINAL</version>
</dependency>

License

cyclops-react is licensed ...

Read more

Cyclops X Release Candidate 1 : List improvements & API simplification

25 Jul 14:56
0f70816
Compare
Choose a tag to compare

Release Candidate 1 of Cyclops X

List improvements

  • DifferenceList implements ImmutableList
  • lazyFoldRight added to LazySeq
  • Vector.size bug after take / drop fixes
  • splitAt / partition /span operators on Reactive Collections
  • NonEmptyList conversions

Make illegal states unrepresentable

  • atPercentile returns an Option (when out of range percentiles are passed as input, Option.none is returned).

Bug fixes

  • atPercentile bug fixes

API & usability enhancements

  • Eq, Ord and NaturalTransformation should move to cyclops.function
  • Rename Function0..8 lift() to lazyLift
  • Move Comparators to cyclops.companion
  • Rename visit in LazySeq to foldLazySeq (similar in BankersQueue and Seq)

lazyFoldRight

There adds the ability to short circuit a la Haskell (see http://voidmainargs.blogspot.com/2011/08/folding-stream-with-scala.html)

foldr (||) False (repeat True)
True

The following code runs forever

LazySeq.generate(()->true)
       .foldRight(false,(a, b)->a ? true : b);

But this does not

LazySeq.generate(()->true)
       .lazyFoldRight(false,(a, b)->a ? true : b.get());
//true

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona
  • JVM polyglot higher kinder types support via KindedJ

What’s new Cyclops X Release Candidate 1

  • List enhancements
  • API simplification
  • bug fixes

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-RC1 issues & PRs

Dependency changes

Agrona to 0.9.21
RxJava 2 to 2.1.16

Modules

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-RC1’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-RC1’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-RC1’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-RC1’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.0-RC1’

Cyclops Reactor Integration

   compile 'com.oath.cyclops:cyclops-reactor-integration:10.0.0-RC1'

Cyclops RxJava2 Integration

   compile 'com.oath.cyclops:cyclops-rx2-integration:10.0.0-RC1'

Cyclops Jackson Integration

   compile 'com.oath.cyclops:cyclops-jackson-integration:10.0.0-RC1'

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops Reactor Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactor-integration</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops RxJava2 Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-rx2-integration</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

Cyclops Jackson Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-jackson-integration</artifactId>
    <version>10.0.0-RC1</version>
</dependency>

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

Cyclops X Milestone 8 : Effect management with reactive-streams

28 Jun 11:06
926b40b
Compare
Choose a tag to compare

Milestone 8 of Cyclops X

Make illegal states unrepresentable

  • retry methods now only available on reactive-types where error handling is expected
  • recover methods now only available on types where errors can be caught and recovered
  • Semigroup for NonEmptyList concatenation
  • Validated control type to represent valid and error states

API Simplification

  • Streamable implements Stream
  • Streamable moved to cyclops.companion
  • mapReduce renamed foldMap
  • visit renamed fold
  • foldLeft favoured over reduce, reduce moved from non-stream types
  • Improved pattern matching API
  • endsWithIterable and startsWithIterable become endsWith and startsWith

Handling effects with Reactive Streams

  • IO monad interface (cyclops.reactive)
  • reactive-streams based implementations of IO (cyclops ReactiveSeq, RxJava2 Flowable, Reactor Flux, generic higher kinded implementation in cyclops-pure based around Monad type class)
  • Managed monad interface - for managing resources (see https://www.iravid.com/posts/resource-management.html)
  • reactive streams based implementations of Managed (cyclops ReactiveSeq, RxJava2 Flowable, Reactor Flux, generic higher kinded implementation in cyclops-pure based around Monad type class)

Managed monad

 SessionFactory factory;
 Try<String, Throwable> res = Managed.of(factory::openSession)
                                     .with(Session::beginTransaction)
                                     .map((session, tx) ->
                                           deleteFromMyTable(session)
                                                 .bipeek(success -> tx.commit(),error -> tx.rollback())
                                         )
                                     .foldRun(Try::flatten);

public Try<String,Throwable> deleteFromMyTable(Session s);

Using Reactor with cyclops IO Monad

Autoclosing a resource

FluxIO.of(()->10)
      .bracket(i-> new CloseableResource())
      .map(resource->process(resource))
      .run();

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona
  • JVM polyglot higher kinder types support via KindedJ

What’s new Cyclops X Milestone 8

  • Improved safety / removal of unsafe apis
  • API simplification
  • promotion of cyclops-jackson-integration to core module
  • effect handling with reactive-streams

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M8 issues & PRs

Dependency changes

None this release

Modules

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M8’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M8’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M8’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-M8’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.0-M8’

Cyclops Reactor Integration

   compile 'com.oath.cyclops:cyclops-reactor-integration:10.0.0-M8'

Cyclops RxJava2 Integration

   compile 'com.oath.cyclops:cyclops-rx2-integration:10.0.0-M8'

Cyclops Jackson Integration

   compile 'com.oath.cyclops:cyclops-jackson-integration:10.0.0-M8'

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops Reactor Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactor-integration</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops RxJava2 Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-rx2-integration</artifactId>
    <version>10.0.0-M8</version>
</dependency>

Cyclops Jackson Integration

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-jackson-integration</artifactId>
    <version>10.0.0-M8</version>
</dependency>

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

Cyclops X Milestone 7 : JSON Serialization / Deserialization

10 Apr 22:35
ab90c66
Compare
Choose a tag to compare

Milestone 7 of Cyclops X

cyclops-jackson-integration is a brand new Cyclops module that provides Jackson JSON serialisation and deserialisation for cyclops persistent collections and control types. Milestone 7 also bring the cyclops-vavr-integration module up-to-date (providing integration with cyclops-reactive-collections for Vavr persistent collections, and cyclops AnyM(onad) integration for Vavr monadic types).

Other improvements in this release include

  • A better Eval implementation (under the hood changes making use of Cyclops’ Trampoline implementation).
  • Fixes to method and package names
  • Enhancments to cyclops Tuples (new concat methods)

Jackson serialisation and derserialization

import com.oath.cyclops.jackson.CyclopsModule;
import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();

mapper.registerModule(new CyclopsModule());

Serializing and deserializing a Cyclops Vector programmatically

String json = JacksonUtil.serializeToJson(Vector.of(1,2,3));

Vector<Integer> s = JacksonUtil.convertFromJson(json,Vector.class);
//[1,2,3]

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 5

  • Pure functional programming Module
  • flatMap and map Operators on Trampoline
  • reactive-streams based IO Monad
  • Safe PartialFunction API

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M7 issues & PRs

Dependency changes

None this release

Modules

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M7’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M7’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M7’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-M7’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.0-M7’

Cyclops Reactor Integration

   compile 'com.oath.cyclops:cyclops-reactor-integration:10.0.0-M7'

Cyclops RxJava2 Integration

   compile 'com.oath.cyclops:cyclops-rx2-integration:10.0.0-M7'

Cyclops RxJava Integration

   compile 'com.oath.cyclops:cyclops-rx-integration:10.0.0-M7'

Cyclops Vavr Integration

   compile 'com.oath.cyclops:cyclops-vavr-integration:10.0.0-M7'

Cyclops Jackson Integration

   compile 'com.oath.cyclops:cyclops-jackson-integration:10.0.0-M7'

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M7</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M7</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M7</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-M7</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <version>10.0.0-M7</version>
</dependency>

Cyclops Reactor Integration

    com.oath.cyclops
    cyclops-reactor-integration
    10.0.0-M7

Cyclops RxJava2 Integration

    com.oath.cyclops
    cyclops-rx2-integration
    10.0.0-M7

Cyclops RxJava Integration

   
    com.oath.cyclops
    cyclops-rx-integration
    10.0.0-M7

Cyclops Vavr Integration

    com.oath.cyclops
    cyclops-vavr-integration
    10.0.0-M7

Cyclops Jackson Integration

    com.oath.cyclops
    cyclops-jackson-integration
    10.0.0-M7

Documentation

Articles

Read more

Cyclops X Milestone 6 : Reactive Collections

11 Mar 00:00
5548827
Compare
Choose a tag to compare

Milestone 6 of Cyclops X

Cyclops-reactive-collections is the last module to be created for Cyclops X (released in Milestone 6). Cyclops lazy and reactive extended collection types move out of the core into their own module, where they can be configured to run powered by Cyclops’ ReactiveSeq or by asynchronous streams in RxJava/2 or Pivotal’s Reactor.

Cyclops Reactive Collections are a suite of extensions for JDK and Persistent Collection types that support a large range of operators as well as (smart) lazy execution of chained operators to drive performance and asynchronous data flows through those operators.

As well as providing configuration options for the reactive engine powering the collections, it is possible to configure the collection types used. E.g. we can switch between Cyclops persistent collections or Vavr persistent collections.

The core of cyclops has been refactored to use Cyclops’ own eager persistent data structures (such as Vector, Seq and LazySeq).

Other improvements in this release include

  • Integration with KindedJ which provides a standard interface for simulated Higher Kinded types on the JVM (also used in the Arrow library for Kotlin)
  • A much enhanced LazyString implementation
  • More consistent naming of grouped and append method suites
  • cyclops-pure refactored to use cyclops persistent data types rather than extended collections
  • AnyM based monad transformers for core Cyclops Data types (OptionT, VectorT, LazySeqT, SeqT)

Enhanced performance via laziness

Chaining combinator operations on traditional functional datastructures such as the core persistent data structures provided in cyclops.data (or in Vavr or the Scala SDK) results in traversing the datastructure multiple times, once per combinator operation.

E.g. to transform and filter a Cyclops Vector we could write code like the following

Vector.of(1,2,3)
      .map(i->i*100)
      .filter(i->i<200);

Each of the chained operations will traverse the Vector, once for map and once for filter.

With Cyclops Reactive Collections VectorX the code remains very similar, the underlying datastructure remains identical, but the performance is much improved

VectorX.of(1,2,3)
       .map(i->i*100)
       .filter(i->i<200);

VectorX in contrast to a raw Vector traverses the underlying data structure just once.

Performance improvement for Vavr's Vector when used with Cyclops VectorX

Lower score is better

  • Raw Vavr Vector is on the Right.
  • Vavr Vector with Cyclops VectorX is on the left.

screen shot 2018-03-01 at 15 14 43

Reactive Collections!

In the example below we asynchronously populate an Xtended list using an asynchronously executing ReactiveSeq. Additional reactive operations can be performed on the List asynchronously.
The ListX only blocks on first access to the data.

AtomicBoolean complete = new AtomicBoolean(false);


ReactiveSeq<Integer> async =  Spouts.async(ReactiveSeq.of(1,2,3),Executors.newFixedThreadPool(1));

ListX<Integer> asyncList = ListX.listX(async)
                                   .map(i->i+1);

System.out.println("Blocked? " + complete.get());

System.out.println("First value is "  + asyncList.get(0));

System.out.println("Completed? " + complete.get());

Which will print

Blocked? false
First value is 101
Completed? true

Available data structures

cyclops.collections (mutable / immutable)

type description characteristics
ListX Functional extensions for working with Lists Optionally Reactive or Coreactive, Lazy, mutable, immutable, 3rd party support, Higher kinded
DequeX Functional extensions for working with Deques Optionally Reactive or Coreactive, Lazy, mutable, immutable, 3rd party support, Higher kinded
QueueX Functional extensions for working with Queues Optionally Reactive or Coreactive, Lazy, mutable, immutable, 3rd party support, Higher kinded
SetX Functional extensions for working with Sets Optionally Reactive or Coreactive, Lazy , mutable, immutable, 3rd party support
SortedSetX Functional extensions for working with SortedSets Optionally Reactive or Coreactive, Lazy, mutable, immutable
MapX Functional extensions for working with Maps Eager, mutable, immutable

cyclops.collections.persistent

type description characteristics
LinkedListX Functional extensions for working with persistent Lists Optionally Reactive or Coreactive, Lazy, persistent, 3rd party support, Higher kinded
VectorX Functional extensions for working with persistent Vectors Optionally Reactive or Coreactive, Lazy, persistent, 3rd party support, Higher kinded
PersistentSetX Functional extensions for working with persistent Sets Optionally Reactive or Coreactive, Lazy, persistent, 3rd party support
OrderedSetX Functional extensions for working with persistent Ordered Sets Optionally Reactive or Coreactive, Lazy, persistent, 3rd party support
PersistentQueueX Functional extensions for working with persistent Queues Optionally Reactive or Coreactive, Lazy, persistent, 3rd party support, Higher kinded
BagX Functional extensions for working with persistent Bags (set like collections that allow duplicates) Optionally Reactive or Coreactive,Lazy, persistent, 3rd party support

Examples

Lazy execution using extended Collections

Eval<Integer> lazyResult = ListX.of(1,2,3,4)
                                 .map(i->i*10)
                                 .foldLazy(s->s
                                 .reduce( 50,(acc,next) -> acc+next));

Articles

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 5

  • Pure functional programming Module
  • flatMap and map Operators on Trampoline
  • reactive-streams based IO Monad
  • Safe PartialFunction API

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M6 issues & PRs

Dependency changes

Cyclops no longer depends on pCollections or jOOλ

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M6’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M6’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M6’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-M6’

Cyclops Reactive Collections

compile 'com.oath.cyclops:cyclops-reactive-collections:10.0.0-M6’

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M6</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M6</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M6</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-M6</version>
</dependency>

Cyclops Reactive Collections

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-reactive-collections</artifactId>
    <versi...
Read more

10.0.0-M5 : Cyclops Pure module and reactive-streams based IO Monad

25 Dec 10:03
614c7a4
Compare
Choose a tag to compare

Milestone 5 of Cyclops X

M5 of Cyclops X introduces another new module cyclops-pure. Cyclops Pure provides additional control structures, typeclass definitions and instances for pure category theoritic functional programming in Java. Cyclops Pure simulates Higher Kinded Types using Witness Types (see Simulating Higher Kinded Types in Java ).

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 5

  • Pure functional programming Module
  • flatMap and map Operators on Trampoline
  • reactive-streams based IO Monad
  • Safe PartialFunction API

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M5 issues & PRs

Dependency changes

Cyclops no longer depends on pCollections or jOOλ

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M5’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M5’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M5’

Cyclops Pure

compile 'com.oath.cyclops:cyclops-pure:10.0.0-M5’

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M5</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M5</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M5</version>
</dependency>

Cyclops Pure

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-pure</artifactId>
    <version>10.0.0-M5</version>
</dependency>

Documentation

Articles

Old simple-react landing page

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

10.0.0-M4 : FutureStream module and improved type safety.

20 Dec 12:40
dc29918
Compare
Choose a tag to compare

Milestone 4 of Cyclops X

M4 of Cyclops X introduces another new module cyclops-futurestream. Cyclops Futurestream provides support for asynchronous / parallel Streaming implemented as a Stream of Future based tasks. For developers familar with Java 8 Streams, this is a pretty easy to use API that can very performantly handle blocking I/O based tasks (such as block operations on resources from file, or remote systems / dbs).

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 4

  • Futurestream Module
  • mapOrCatch / flatMapOrCatch operators added to Try
  • Transform method added to TupleN
  • Naming convention improvements : flatMapI / flatMapIterable to become concatMap. flatMapP / flatMapPublisher to become mergeMap
  • Performance improvements on Map / filter operations in Seq
  • Cyclops Try type safety and usability enhancements
  • Zippable type simplified
  • indexOf / lastIndexOf fold operator added

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M4 issues & PRs

Dependency changes

Cyclops no longer depends on pCollections or jOOλ

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M4’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M4’

Cyclops Futurestream

compile 'com.oath.cyclops:cyclops-futurestream:10.0.0-M4’

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M4</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M4</version>
</dependency>

Cyclops Futurestream

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M4</version>
</dependency>

Documentation

Articles

Old simple-react landing page

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

Cyclops X - Milestone 3

11 Dec 14:50
Compare
Choose a tag to compare

Milestone three of Cyclops X

M3 of Cyclops X introduces a new module cyclops-anym. All of the classes supporting higher kinded Monad abstraction AnyM have been moved to this module.

Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 3

  • AnyM Module
  • Bug in Hash Array Mapped Trie fixed

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M4 issues & PRs

Dependency changes

Cyclops no longer depends on pCollections or jOOλ

Get cyclops X

Gradle

Cyclops

compile 'com.oath.cyclops:cyclops:10.0.0-M3’

Cyclops AnyM

compile 'com.oath.cyclops:cyclops-anym:10.0.0-M3’

Maven

Cyclops

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M3</version>
</dependency>

Cyclops AnyM

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops-anym</artifactId>
    <version>10.0.0-M3</version>
</dependency>

Documentation

Articles

Old simple-react landing page

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#

Cyclops X - Milestone 2

14 Nov 16:18
f86af49
Compare
Choose a tag to compare

Milestone two of Cyclops X

Cyclops X (cyclops 10) unifies cyclops-react and the cyclops integration modules on the cyclops versioning scheme. The goal of this project is remove a whole class of runtime errors from application code by providing much stricter APIs that prevent exceptional states from arising. A secondary goal is to modularize cyclops into a series of smaller more focused projects so that functionality is easy to find and developers only take what they need.

What’s new Cyclops X

-> Enhancements over cyclops-react 2

  • Fast purely functional datastructures (Vector, Seq / List, LazySeq / LazyList, NonEmptyList, HashSet, TreeSet, TrieSet, HashMap, LinkedMap, MultiMap, TreeMap, BankersQueue, LazyString, Discrete Interval Encoded Tree, Zipper, Range, Tree, DifferenceList, HList, Dependent Map )
  • Structural Pattern Matching API (deconstruct algebraic product and sum types)
  • Improved type safety via the removal of unsafe APIs
    -- E.g. Unlike Optional, Option has no get method (which could throw a null pointer)
    -- New data structures do not support operations that would throw exceptions (you can't call head on an empty list for example)
  • Eager and Lazy alternatives for most datastructures (Option is eager, Maybe is lazy + reactive)
  • Improved naming of types (Function1-8 rather than Fn1-8, Either not Xor)
  • Group id is changed to com.oath.cyclops
  • Versioning between cyclops-react and cyclops is merged on cyclops versioning scheme (version 10 = Cyclops X)
  • Light weight dependencies : reactive-streams API & Agrona

What’s new Cyclops X Milestone 2

  • JDK Collection Views on Immutable Data Structures
  • LazySeq map / flatMap / filter lazy bug fix
  • HashMappedArrayTrie minus bug fix

Changelog

Check out the features delivered and bugs fixed -

github 10.0.0-M2 issues & PRs

Dependency changes

Cyclops no longer depends on pCollections or jOOλ

Get cyclops X

Gradle

compile 'com.oath.cyclops:cyclops:10.0.0-M2’

Maven

<dependency>
    <groupId>com.oath.cyclops</groupId>
    <artifactId>cyclops</artifactId>
    <version>10.0.0-M2</version>
</dependency>

Documentation

Articles

Old simple-react landing page

License

cyclops-react is licensed under the Apache 2.0 license.

http://www.apache.org/licenses/LICENSE-2.0#