Atom (programming language): Difference between revisions

Content deleted Content added
TomMD (talk | contribs)
mNo edit summary
 
(32 intermediate revisions by 21 users not shown)
Line 1:
{{Infobox programming language
| name = Atom
| logo =
| paradigm = [[functionalFunctional programming|functionalFunctional]], [[Synchronous_programming_languageSynchronous programming language|synchronous]], [[Reactive_programmingReactive 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]], [[type inference|inferred]]
| latest_test_date =
| implementations =
| typing = [[static typing|static]], [[strong typing|strong]], [[type inference|inferred]]
| 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___domain-specific language]] (DSL) in [[Haskell_(programming_language)|Haskell]], for designing [[Real-time_computing|hardtime realtimecomputing|real-time]] [[Embedded_programming|embedded]] 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 based on guarded atomic operations, or [[Term_Rewriting_System| conditional term rewriting]], into [[Verilog]] [[netlist|netlists]] for simulation and [[logic synthesis]].
As a hardware compiler, Atom's primary objective was to maximize the number of operations, or rules, that could execute in a given clock cycle without violating the semantics of atomic operation.
Based on the properties of conflict-free and sequentially-composable rules<ref name="hoe1"/>, Atom's author reduced maximizing execution concurrency to a [[feedback arc set]] optimization of a rule-data dependency graph --
a process similar, if not equivalent 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 redesign 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|worse case timing latency]]. In September 2008, Atom was presented at CUFP<ref>[http://cufp.galois.com/2008/schedule.html Controlling Hybrid Vehicles with Haskell.]</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 [[Realtime_computing|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_Lock (computer_sciencecomputer science)#The_problems_with_locksDisadvantages|problems]] of using, [[Lock_Lock (computer_sciencecomputer science)|mutex locks]].
 
By removing [[RunRuntime time(program (computinglifecycle phase)|run-timeruntime]] task scheduling and mutex locking --, two services traditionally served by ana [[Realreal-time operating system|RTOS]] --(RTOS), Atom can eliminate the need and overhead of an [[Real-time operating system|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 [[Realtime_computing|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]].
 
== ExamplesLimits ==
By removing [[Run time (computing)|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 [[Real-time operating system|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.
 
== Examples ==
 
== 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 ==
{{Reflist}}
 
== External links ==
{{reflist}}
*{{Official website|hackage.haskell.org/package/atom}}
*{{GitHub|tomahawkins/atom}}
 
{{Haskell programming}}
== External links ==
 
[[Category:Declarative programming languages]]
[[Category:Embedded_systems]]
[[Category:Functional languages]]
[[Category:Real-time_computingtime computing]]
[[Category:Synchronous_programming_languagesSynchronous 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:Embedded_systems2007 software]]