EventJ: A language for IoT systems based on asynchronous π -calculus

Basic abstractions of EventJ

  • Receive and hold data: Buffers!
  • Communicate data: Channels!
  • Lightweight concurrent processing: Processes!


Typed entities that carry data frames

Channels - carry buffers or other channels

  • Will support zero-copy data transfers
  • Asynchronous transfers, various modes supported

Processes- provides concurrency

  • Creates buffers, channels, performs computations on buffers, communicates buffers via channels

EventJ Archtitecture

The internet of things (IoT) promises to saturate our world with physical objects embedded with sensors and tiny computing devices. Such systems are continually generating event data from embedded sensors, including producing real-time data streams. In order to take advantage of this scenario, these events must be concurrently processed by applications running in computing systems ranging from embedded to server systems. There is a lack of fundamental research and development in proper programming abstractions for such systems. Good programming abstractions would allow us to easily take advantage of true concurrency offered by multi-cores for concurrent data processing. We may look up to the rich developments in the concurrency theory for gaining insights into suitable abstractions. Process calculi are concurrent formal languages for specifying and reasoning about concurrent, communicating systems. The p-calculus is a process calculus for mobile systems.

< class="wow fadeInDown animated"

A simple EventJ pseudocode

In the context of IoT, we propose to investigate programming abstractions for concurrent event-processing systems based on the asynchronous p-calculus. The proposed language is tentatively named EventJ. The process-based model offered by the p-calculus would allow us to quickly take advantage of multi-cores wherever available for rapid event processing. The asynchronous channels have underlying bounded FIFO queues. When queue is full either the channel must block (e.g., when specifying in-memory queues) or the operation simply returns with no effect (lossy, distributed channel) or it simply pushes the oldest entry out (real-time data streams). A receive operation on an empty channel either returns a default value (polling mode) or blocks. The channels may be configured for any of these behaviors. The use of asynchronous FIFO channels is the key to providing a viable channel abstraction for supporting real-time data streams.

There is already some work in designing practical programming languages based on p-calculus – namely, occam-p, which is a programming language based on the synchronous p-calculus. Though EventJ would draw insights from the experience in developing occam-p, this language is fundamentally different owing to the use of asynchronous channels.

The proposed tool chain implementation for the language



    Amrita Center for Cyber Security Systems and Networks
    Amrita Vishwa Vidyapeetham
    Amritapuri, Kollam
    Amrita Vishwa Vidhyapeetam
    Research Initiative