RxAda: An Ada implementation of the ReactiveX API

The ReactiveX API, also known as the Reactive Extensions in the .NET world, is a recently popularized reactive programming framework for asynchronous, event-based, multi-threaded programming. Presented by its proponents as a solid tool for applications requiring a simple yet powerful approach to event-driven systems, it has seen favorable adoption in many popular languages. Although Ada has been long-favored by powerful tasking capabilities that reduce the need for additional multi-threading support, the reactive approach has properties that are well-suited to the safety and maintainability culture predominant in the Ada world, such as complexity reduction, race-condition and deadlock avoidance, and enhanced maintainability by means of concise and well-defined information flows. This work presents the design for a ReactiveX Ada implementation that aims to balance desirable library properties such as compile-time checks, reasonable user-required generic instantiations, and a shallow learning curve for both library clients and maintainers. The Ada programmer can henceforth benefit from the abundant documentation existing for the language-agnostic ReactiveX approach without stepping out of the Ada tool chain.

[1]  Jonathan Edwards,et al.  Coherent reaction , 2009, OOPSLA Companion.

[2]  Paul Hudak,et al.  Functional reactive programming from first principles , 2000, PLDI '00.

[3]  Wolfgang De Meuter,et al.  A survey on reactive programming , 2013, CSUR.

[4]  Giordano Tamburrelli,et al.  Reactive Programming: A Walkthrough , 2015, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[5]  Andrea Maglie ReactiveX and RxJava , 2016 .

[6]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[7]  John Thornley Parallel Programming with Declarative Ada , 1993 .

[8]  Conal Elliott,et al.  Push-pull functional reactive programming , 2009, Haskell.