Comparisons To Related Technologies

A number of familiar technologies bear some resemblance to accessors and have in part inspired the design of accessors. This page offers a starting point for comparisons with such technologies.

On this page... (hide)

  1.   1.  AJAX
  2.   2.  Vert.x
  3.   3.  Others

1.  AJAX

AJAX is a technology used by web clients, JavaScript programs running in browsers, to asynchronously retrieve data from a server and update a web page dynamically. The way that browser layout works is that elements of a document can be filled and updated in asynchronously in any order. A browser provides a function called XMLHttpRequest that constructs an object that is used to issue requests to a server and to asynchronously handle responses from the server. Callback functions get invoked later, when the response arrives, and fill in web page elements. The callback functions are invoked atomically with respect to each other and with respect to the script running in the browser.

Accessors are not (typically) used to update web pages, but like web pages, they may issue requests to remote devices or servers. These requests are typically handled asynchronously with mutually atomic callback functions, much like AJAX. Instead of updating web page elements, these callback functions will normally update the state of the actor and send messages through output ports to other accessors.

2.  Vert.x

Vert.x is a toolkit built on the Java virtual machine for concurrent applications that make extensive use of asynchronous atomic callbacks (AAC), also called the reactor pattern. It goes beyond the implementation of AAC in typical JavaScript hosts, such as browsers, by introducing the notion of verticles (Vert.x particles). A verticle is an event loop that invokes a collection of related callback functions. Verticles can run in parallel with one another, so through verticles, Vert.x scales up to multicore machines. Vert.x also provides a publish-and-subscribe event bus that enables communication across verticles and across instances of Vert.x, providing scalability so that applications can run on multiple servers.

An accessor is like a verticle in that it internally handles mutually atomic callback functions that can be executed in parallel with the functions of other accessors. In fact, the Java swarmlet host uses Vert.x for its implementation. Accessors extend Vert.x with more structured concurrent model of computation (MoC) for composing accessors. Instead of using a publish-and-subscribe event bus, accessors send and receive message through ports to other accessors. The ports hide from the accessor details about the other accessors it is communicating with (e.g., the accessors do not even need to agree about the name of an event). And a more structured MoC than pub-sub can be used by the swarmlet host to govern interaction between accessors. For example, the Java swarmlet host uses a time-stamped discrete-event (DE) MoC.

3.  Others

More comparisons are needed here, including at least:

  • Node.js
  • Reactive streams
  • RxJava
  • NoFlo - a JavaScript-based actor language that includes a visual editor, a JSON syntax for models, and several IoT demonstration programs.