Atom (programming language): Difference between revisions

Content deleted Content added
m Bot: Removing category Category:Embedded systems which is already in Category:Real-time computing
 
(8 intermediate revisions by 4 users not shown)
Line 1:
{{notability|date=March 2018}}
{{Infobox programming language
| name = Atom
| logo =
| paradigm = [[functionalFunctional programming|functionalFunctional]], [[Synchronous programming language|synchronous]], [[Reactive programming|reactive]]
| family = [[Haskell]]
| year = 2007
| designer = Thomas Hawkins
| developer =
| released = {{Start date and age|2007}}
| latest_release_version =
| latest release version = 1.0.13
| latest_release_date =
| latest release date = {{Start date and age|2021|11|13}}
| latest_test_version =
| typing = [[staticStatic typing|static]], [[strongStrong and weak typing|strong]]
| latest_test_date =
| implementations =
| typing = [[static typing|static]], [[strong typing|strong]]
| dialects =
| implementations =
| influenced =
| dialects =
| influenced by = [[Bluespec]], Confluence, =[[Haskell]]
| operating system = [[Cross-platform software|Cross-platform]]
| influenced_by = [[Bluespec, Inc.|Bluespec]], Confluence, [[Haskell (programming language)|Haskell]]
| license = [[BSD licenses|BSD]]3
| operating_system = portable
| website = http://{{URL|hackage.haskell.org/package/atom/}}
| license = [[Bsd license|BSD3]]
| file ext =
| website = http://hackage.haskell.org/package/atom/
| file ext =
}}
'''Atom''' is a [[___domain-specific language]] (DSL) in [[Haskell (programming language)|Haskell]], for designing [[Real-time computing|real-time]] [[Embeddedembedded programming|embeddedsoftware]] software.
 
== History ==
Originally intended as a [[High-level programming language|high-level]] [[hardware description language]] (HDL), Atom was created in early 2007 and released as [[free and open-source software]] (FOSS) of April of that year.<ref>{{Cite report |url=http://www.haskell.org/pipermail/haskell-cafe/2007-April/024090.html |title=ANN: Atom: Yet another Haskell HDL}}</ref> Inspired by TRS<ref name="hoe1">{{Cite conference |last1=Hoe |first1=James C. |author2=Arvind |author2-link=Arvind (computer scientist) |date=November 2000 |url=http://www.ece.cmu.edu/~jhoe/distribution/2000/iccad00.pdf |title=Synthesis of Operation-Centric Hardware Descriptions |conference=International Conference on Computer Aided Design (ICCAD)}}</ref> and [[Bluespec]], Atom [[Compiler|compiled]] circuit descriptions, that were based on guarded [[Linearizability|atomic operations]], or conditional term [[rewriting]], into [[Verilog]] [[netlist]]s for simulation and [[logic synthesis]]. As a hardware compiler, Atom's main objective is to maximize the number of operations, or rules, that can execute in a given [[Clock signal#Digital circuits|clock cycle]] without violating the semantics of atomic operation. By employing the properties of conflict-free and sequentially composable rules,<ref name="hoe1"/> Atom reduced maximizing execution [[Concurrency (computer science)|concurrency]] to a [[feedback arc set]] optimization of a rule-data dependency graph. This process was similar to [[James Hoe]]'s original algorithm.<ref name="hoe1"/>
 
When Atom's author switched careers in late 2007, from [[Logic synthesis|logic design]] to [[embedded system]] software engineering, Atom was redesigned from an HDL to a [[___domain-specific language]] targeting hard [[real-time computing]] embedded applications. As a result, Atom's compiler's main objective changed from maximizing rule concurrency to balancing processing load and minimizing [[Worst case execution time|worst case timing latency]]. In September 2008, Atom was presented at the Commercial Users of Functional Programming (CUFP) conference.<ref>{{Cite web |url=http://cufp.galois.com/2008/schedule.html |title=Controlling Hybrid Vehicles with Haskell |url-status=dead |archive-url=https://web.archive.org/web/20080704175648/http://cufp.galois.com/2008/schedule.html |archive-date=2008-07-04 |access-date=2009-12-05}}</ref> In April 2009, in its new form, it was released as FOSS.<ref>[http://www.haskell.org/pipermail/haskell-cafe/2009-April/060602.html ANN: atom-0.0.2]</ref>
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.<ref>[http://www.haskell.org/pipermail/haskell-cafe/2007-April/024090.html ANN: Atom - Yet another Haskell HDL]</ref>
Inspired by TRS <ref name="hoe1">[http://www.ece.cmu.edu/~jhoe/distribution/2000/iccad00.pdf Synthesis of Operation-Centric Hardware Descriptions].
James C. Hoe and Arvind. International Conference on Computer Aided Design (ICCAD), November 2000.</ref>
and [[Bluespec]], Atom compiled circuit descriptions, that were based on guarded atomic operations, or [[Term Rewriting System|conditional term rewriting]], into [[Verilog]] [[netlist]]s 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,<ref name="hoe1"/> 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.<ref name="hoe1" />
 
When Atom's author switched careers in late 2007 from logic design to [[Embedded systems|embedded software]] engineering, Atom was redesigned from an [[hardware description language|HDL]] to a [[___domain specific language]]
targeting [[Realtime computing|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 execution time|worst case timing latency]]. In September 2008, Atom was presented at CUFP,<ref>{{Cite web |url=http://cufp.galois.com/2008/schedule.html |title=Controlling Hybrid Vehicles with Haskell. |access-date=2009-12-05 |archive-url=https://web.archive.org/web/20080704175648/http://cufp.galois.com/2008/schedule.html |archive-date=2008-07-04 |url-status=dead }}</ref>
and in April 2009, was released as open-source in its new form.<ref>[http://www.haskell.org/pipermail/haskell-cafe/2009-April/060602.html ANN: atom-0.0.2]</ref>
 
== Overview ==
Atom is a concurrent programming language intended for embedded applications. Atom features [[Compilecompile time|compile-time]] task [[Scheduling (computing)|task scheduling]] and generates code with [[Determinism|deterministic]] execution time and memory consumptionuse, simplifying [[worst case execution time]] analysis for applications that requireneed hard realtime performance. Atom's concurrency model is that of guarded [[Atomicatomic action|guarded atomic actions]]s, which eliminates the need for, and the [[Lock (computer science)#The problems with locksDisadvantages|problems]] of using, [[Lock (computer science)|mutex locks]].
 
By removing [[Run timeRuntime (program lifecycle phase)|run-timeruntime]] task scheduling and mutex locking—twolocking, two services traditionally served by ana [[Realreal-time operating system|RTOS]]—Atom (RTOS), Atom can eliminate the need and overhead of an RTOS in embedded applications.
Atom is a concurrent programming language intended for embedded applications. Atom features [[Compile time|compile-time]] [[Scheduling (computing)|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 [[Atomic action|guarded atomic actions]], which eliminates the need for, and the [[Lock (computer science)#The problems with locks|problems]] of using, [[Lock (computer science)|mutex locks]].
 
== Limits ==
By removing [[Run time (program lifecycle phase)|run-time]] task scheduling and mutex locking—two services traditionally served by an [[Real-time operating system|RTOS]]—Atom can eliminate the need and overhead of an RTOS in embedded applications.
To provide guarantees of deterministic execution time and memory consumption, Atom places several restrictions on computationcomputing. First, Atom designs are always [[Finite-state machine|finite state]]: all variables are global and declared at compile time and [[Memory management#Automated memory management|dynamic memory allocation]] is not alloweddisallowed. Second, Atom provides no function or looping constructs. Instead, state variable updates are pure [[Combinationalcombinational logic|combinational]] functions]] of the current state.
 
== ExamplesReferences ==
{{Reflist}}
 
== External links ==
{{Empty section|date=July 2010}}
*{{Official website|hackage.haskell.org/package/atom}}
 
*{{GitHub|tomahawkins/atom}}
== 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 logic|combinational functions]] of the current state.
 
== References ==
 
{{Haskell programming}}
{{reflist}}
 
[[Category:Declarative programming languages]]
Line 59 ⟶ 47:
[[Category:Real-time computing]]
[[Category:Synchronous programming languages]]
[[Category:Statically typed programming languages]]
[[Category:Haskell programming language family]]
[[Category:Free software programmed in Haskell]]
[[Category:Cross-platform free software]]
[[Category:Free and open source compilers]]
[[Category:Programming languages created in 2007]]
[[Category:2007 software]]