About RDP

This blog is about Reactive Demand Programming (RDP) and some of the concepts and motivations surrounding it, and a planned language RDP-based with preliminary name Awelon. Almost every article is related to RDP at least indirectly.

RDP is a bidirectional, reactive dataflow model that supports commutative, idempotent, continuous effects on external resources: resource state may be influenced by a set of values. RDP is a logical extension of REST architectural style to influence and effect. The resulting programming model is deeply symmetric and compositional, and enables much equational reasoning.

The current implementation of RDP is as a set of packages in Haskell, called Sirea (simply reactive). Open discussion of RDP is available at reactive-demand@googlegroups.com, which is a better venue for questions than comments on this blog.

Meta Comments: I accept discussion in comments, but I also believe in moderating them. Not immediately, mind – no need to hurt someone doing this, and time provides some emotional distance – but, a few months after you’ve commented, I may try to trim comments down to those of great relevance, pith, or clarity. If that is not for you, consider use of external fora for comments such as reddit or reactive-demand@googlegroups.com or your own blog.

9 Responses to About RDP

  1. Ben says:

    Can you provide some reading recommendations that’ll help someone with basic computer science knowledge make sense of your more technical posts? I’d be very grateful.

  2. M. says:

    Are you familiar with programming or specification languages based on category theory? I think they have some nice ideas that might be useful for RDP.
    Some main ones are Charity (http://pll.cpsc.ucalgary.ca/charity1/www/home.html) and Specware (http://specware.org/)

    There are many links for interesting ideas found here:

    • dmbarbour says:

      I am familiar with Charity. It did influence some of my earlier approaches to language design, though less now. I am also aware of the relationship between RDP and many categories (e.g. the Sirea.Behavior classes align with many classes of the ‘categories’ package in Haskell, by design).

  3. M. says:

    I guess that’s why I saw some ideas I thought was a bit similar.

    Among the Specware papers, this is the one I’ve found most interesting myself:

  4. vitalyper says:

    Is RDP has any relation to B. Pierce et la. Boomerang http://www.seas.upenn.edu/~harmony

    • dmbarbour says:

      No. Well, at a philosophical level, there is some relationship: both RDP and Boomerang support influence of a system through a view of the system. But RDP does not ensure reversibility, and is a very different approach from Boomerang.

  5. mtousi says:

    How is this this model different from concurrent constraint programming?

    • dmbarbour says:

      RDP was inspired in part by temporal concurrent constraint programming (TCCC). But TCCC is not very composable, e.g. there is no sensible ‘reply’ to declaring a constraint. And TCCC tends to not scale very well.

      RDP does not have any built-in constraint model. In RDP, each resource can receive a set of ‘demands’ which may represent constraints or other things, e.g. a demand for information. Each distinct demand may receive a distinct reply (duplicate demands must receive duplicate replies). To model TCCC above RDP would mostly involve interpreting demands on some resources as describing constraints.

      I think such constraint systems would make useful resources within the larger RDP system for many problems (cf [1][2]). But I imagine most RDP behaviors will focus instead on information gathering (e.g. demanding information from sensors or databases) and ad-hoc influence over state or actuators. Reactive concurrent constraint models would be small subsystems within the larger RDP system.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s