Skip to content

Commit

Permalink
add a general intro to include later
Browse files Browse the repository at this point in the history
  • Loading branch information
stefjoosten committed Aug 15, 2024
1 parent 2dedb5a commit 7599e5c
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions docs/Wikipedia.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
This page was prepared as a Wikipedia article draft but rejected. However, it contains valuable references, so we might use it in our own documentation.

{{Short description|Information System Specification Language}}
{{Draft topics|software|computing|technology}}
{{AfC topic|stem}}

<!-- Important, do not remove this line before the article has been created. -->

{{Software development process}}
'''Ampersand'''<ref name="JLAMP">Stef Joosten, [https://www.sciencedirect.com/science/article/pii/S2352220817301499 Relation Algebra as programming language using the Ampersand compiler], Journal of Logical and Algebraic Methods in Programming, Volume 100, 2018, Pages 113-129, ISSN 2352-2208, [https://doi.org/10.1016/j.jlamp.2018.04.002]. Springer.</ref> is a [[specification language]] that focuses on [[computer information systems|information systems]]. Its main purpose is to generate information systems correctly by minimizing the human effort and human mistakes involved in programming.

Ampersand is an instance of [[constraint programming]]<ref>F. Rossi, P. van Beek, and T. Walsh, eds., Handbook of Constraint Programming, Elsevier Science, 2006.</ref>or [[Invariant-based programming]].<ref>R_J Back, Invariant based programming: basic approach and teaching experiences, Formal Aspects of Computing (2009) 21: 227–244, DOI 10.1007/s00165-008-0070-y.</ref> After specifying a [[data set]] structurally as a set of [[Relation_(mathematics) | relations]], the programmer asserts [[Constraint_(mathematics) | constraints]] on that data set (Ampersand uses the keyword RULE to specify constraints). Each constraint serves as an [[Invariant_(computer_science) | invariant]] on the data set, to be kept satisfied throughout time. The programmer writes invariants only. For this reason, the programmer perceives this as specifying rather than programming, even though the compiler generates working software from an Ampersand script. The compiler generates all the code needed to execute the specification.

To specify relations together with constraints is equivalent to specifying an [[Ontology_(information_science) | ontology]]<ref>T. R. Gruber. Toward principles for the design of ontologies used for knowledge sharing. Presented at the Padua workshop on Formal Ontology, March 1993, later published in International Journal of Human-Computer Studies, Vol. 43, Issues 4-5, pp. 907-928, November 1995.</ref>, which is useful to specify a [[Domain_(software_engineering) | domain]]<ref>E. Evans, Domain Driven Design: Tackling Complexity in the Heart of Software, Addison-Wesley Professional, 2003,
ISBN 0321125215.</ref> formally. An Ampersand user specifies her constraints in [[relation algebra]], which makes Ampersand suitable for [[automated theorem proving]] and [[program analysis]].

On top of the relations and invariants, the programmer specifies interfaces that define the functionality of the system.

The Ampersand compiler is available as [[Free_and_open-source_software | free open-source software]] to generate a working application from a specification. This compiler generates [[web application]]s and documentation.

Ampersand has been used in practice both in education and industry (Ordina and TNO-ICT). For example, Ordina designed a proof-of-concept in 2007 of the INDIGO-system. This design was based on Ampersand, to obtain correct, detailed results in the least amount of time. Today INDIGO is used as the core information system of the Dutch immigration authority, IND. More recently, Ampersand was used to design an information system called DTV for the Dutch Food Authority, NVWA. A prototype of DTV was built in Ampersand and was used as a model to build the actual system. TNO-ICT, a major Dutch industrial research laboratory, is using Ampersand for research purposes. For example, TNO-ICT did a study of international standardization efforts such as RBAC ([[Role-based access control]]) in 2003 and architecture [[IEEE_1471 | IEEE 1471-2000]] in 2004. TNO-ICT has also used the technique in conceiving several patents, e.g. patents DE60218042D, WO2006126875, EP1727327, WO2004046848, EP1563361, NL1023394C, EP1420323, WO03007571, and NL1013450C. The most elaborate information systems in production, generated by Ampersand, are in the Semantic Treehouse Project.

At the [[Open University of the Netherlands]], Ampersand is being taught in a course called Rule-Based Design. In this course, students use a platform called RAP, which has been built in Ampersand<ref name="Michels">Michels, G., Joosten, S., van der Woude, J., Joosten, S. (2011). Ampersand. In: de Swart, H. (eds) Relational and Algebraic Methods in Computer Science. RAMICS 2011. Lecture Notes in Computer Science, vol 6663. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-21070-9_21</ref>. RAP is the first ever Ampersand generated application that has run in production.

== Key features ==
[[Declarative programming | Declarative]]
:Ampersand is free of [[side effects]]. So, users can add, update, or delete any rule in the code without affecting other rules, which makes rules [[Composability | composable]]. (Opposite: [[imperative programming]]) As a consequence, the order of statements does not affect the meaning of an Ampersand script.
[[Reactive programming | Reactive]]
:Ampersand is a reactive<ref>Conal Elliott, Paul Hudak, Functional reactive animation, Proceedings of the second ACM SIGPLAN international conference on Functional programming, ICFP '97, Pages 263–273, August 1997. DOI 10.1145/258948.258973.</ref> specification language. It does not follow pre-specified threads of action but reacts to events from outside and inside the system. Reactive programming sets Ampersand apart from [[Thread_(computing) | single-threaded]] and [[Thread_(computing) | multi-threaded]] computing.
[[Type_system#STATIC | Statically typed]]
:The word static refers to type checking at compile-time. The type system of Ampersand<ref name="Braga">Joosten, S.M.M., Joosten, S.J.C. (2015). Type Checking by Domain Analysis in Ampersand. In: Kahl, W., Winter, M., Oliveira, J. (eds) Relational and Algebraic Methods in Computer Science. RAMICS 2015. Lecture Notes in Computer Science, vol 9348, Pages pp 225–240, pub: Springer, Cham. https://doi.org/10.1007/978-3-319-24704-5_14.</ref> presents errors at compile time as type errors, saving modelers' effort and enhancing the quality of the generated code<ref>Hanenberg, S., Kleinschmager, S., Robbes, R. et al. An empirical study on the impact of static typing on software maintainability. Empir Software Eng 19, 1335–1382 (2014). https://doi.org/10.1007/s10664-013-9289-1</ref> Static type checking is the opposite of [[Type_system#DYNAMIC | dynamic type checking]], which is typically done at runtime. Ampersand is related to the business rules approach<ref>Lex Wedemeijer, and Jaap van der Woude, [https://www.researchgate.net/profile/Stef-Joosten/publication/327022933_Rule_Based_Design with Ampersand/links/5b7321be45851546c903234a/Rule-Based-Design.pdf Rule Based Design], Open Universiteit Nederland, January 2013, ISBN: 978 94 91825 90 3.</ref>. However, Ampersand uses constraints for more than decision-making only. A difference with many other constraint-based languages is the use of relation algebra rather than [[First-order logic | predicate logic]].
[[Algebraic_logic#CALCULUS | Relation Algebra]]
:Ampersand is based on Relation Algebra (also known as the [[Algebraic_logic#CALCULUS | Calculus of Relations]]) to ensure that business rules can be defined precisely and that a compiler can generate an information system. The language uses relation algebra in constraints to specify invariants. It also uses relation algebra in interfaces to specify which data is displayed in interface fields.
Composable
:The schemas of two different Ampersand applications can be combined to get a new (composed) application. Ampersand allows its users to solve individual problems in separate efforts, and use composability to put everything together in the end.

Scientific foundations of Ampersand <ref name="JLAMP"/><ref name="Michels"/><ref name="Braga"/> have been verified, peer-reviewed and published in the International Conference on Relational and Algebraic Methods in Computer Science (RAMiCS) and in the Journal of Logic and Algebraic Methods in Programming (JLAMP) from 2011 onwards.

== References ==
<!-- Inline citations added to your article will automatically display here. See en.wikipedia.org/wiki/WP:REFB for instructions on how to add citations. -->
{{reflist}}

==External links==
*{{official|https://ampersandtarski.github.io/}}
*[https://github.com/AmpersandTarski/Ampersand Ampersand compiler] at [[Github]]

0 comments on commit 7599e5c

Please sign in to comment.