Atom (programming language)

Atom
Paradigm functional, synchronous, reactive
Designed by Thomas Hawkins
First appeared 2007
Typing discipline static, strong, inferred
OS portable
License BSD3
Website http://hackage.haskell.org/package/atom/
Influenced by
Bluespec, Confluence, Haskell

Atom is a domain-specific language (DSL) in Haskell, for designing real-time embedded software.

History

Originally intended as a high level hardware description language, Atom was created in early 2007 and released in open-source of April of the same year.[1] Inspired by TRS [2] and Bluespec, Atom compiled circuit descriptions, that were based on guarded atomic operations, or conditional term rewriting, into Verilog netlists for simulation and logic synthesis. As a hardware compiler, Atom's primary objective was to maximize the number of operations, or rules, that can execute in a given clock cycle without violating the semantics of atomic operation. By employing the properties of conflict-free and sequentially-composable rules,[2] Atom reduced maximizing execution concurrency to a feedback arc set optimization of a rule-data dependency graph. This process was similar to James Hoe's original algorithm.[2]

When Atom's author switched careers in late 2007 from logic design to embedded software engineering, Atom was redesigned from an HDL to a domain specific language targeting hard realtime embedded applications. As a result, Atom's compiler's primary objective changed from maximizing rule concurrency to balancing processing load and minimizing worst case timing latency. In September 2008, Atom was presented at CUFP,[3] and in April 2009, was released as open-source in its new form.[4]

Overview

Atom is a concurrent programming language intended for embedded applications. Atom features compile-time task scheduling and generates code with deterministic execution time and memory consumption, simplifying worst case execution time analysis for applications that require hard realtime performance. Atom's concurrency model is that of guarded atomic actions, which eliminates the need for, and the problems of using, mutex locks.

By removing run-time task scheduling and mutex locking—two services traditionally served by an RTOS—Atom can eliminate the need and overhead of an RTOS in embedded applications.

Limitations

To provide guarantees of deterministic execution time and memory consumption, Atom places several restrictions on computation. First, Atom designs are always finite state: all variables are global and declared at compile time and dynamic memory allocation is not allowed. Second, Atom provides no function or looping constructs. Instead state variable updates are pure combinational functions of the current state.

References

This article is issued from Wikipedia - version of the Thursday, April 30, 2015. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.