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.