Language-oriented programming: Difference between revisions

Content deleted Content added
Antonielly (talk | contribs)
External links: interviews with key people
OAbot (talk | contribs)
m Open access bot: url-access updated in citation with #oabot.
 
(100 intermediate revisions by 68 users not shown)
Line 1:
'''Language-oriented programming''' ('''LOP''')<ref name="lop">{{multiref2|{{cite journal <!-- Citation bot no --> |last1=Ward |first1=Martin |title=Language-Oriented Programming |journal=Software - Concepts and Tools |date=1994 |volume=15 |issue=4 |pages=147–161
'''Language oriented programming''' is a style of [[computer]] [[programming]], via [[metaprogramming]] in which, rather than solving problems in [[general-purpose programming language]]s, the programmer creates one or more [[___domain-specific programming language]]s for the problem first, and solves the problem in those languages. This concept is described in detail in the paper by Martin Ward entitled
|url=https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=825a90a7eaebd7082d883b198e1a218295e0ed3b
[http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf Language Oriented Programming] published in [http://www.informatik.uni-trier.de/~ley/db/journals/stp/stp15.html Software - Concepts and Tools, Vol.15, No.4, pp 147-161, 1994]
|access-date=15 May 2019}}|{{cite book | first= Robert | last= Pickering | title= Beginning F# |chapter=Language-Oriented Programming
and in the article by Sergey Dmitriev entitled [http://www.onboard.jetbrains.com/articles/04/10/lop/ Language Oriented Programming: The Next Programming Paradigm].
|doi=10.1007/978-1-4302-2390-0_12 |isbn=978-1-4302-2389-4 |pages=327–349 | place= Berkeley | publisher=Apress | date=2010}} }}</ref> is a software-development paradigm where "language" is a software building block with the same status as objects, modules and components,<ref name=Felleisen2018>{{cite journal |last1=Felleisen |first1=Matthias |last2=Findler |first2=Robert Bruce |last3=Flatt |first3=Matthew |last4=Krishnamurthi |first4=Shriram |last5=Barzilay |first5=Eli |last6=McCarthy |first6=Jay |last7=Tobin-Hochstadt |first7=Sam |title=A Programmable Programming Language |journal=Communications of the ACM |date=March 2018 |volume=61 |issue=3 |pages=62–71 |doi=10.1145/3127323 |s2cid=3887010 |url=https://cacm.acm.org/magazines/2018/3/225475-a-programmable-programming-language/fulltext |access-date=15 May 2019|url-access=subscription }}</ref> and rather than solving problems in [[general-purpose programming language]]s, the programmer creates one or more [[___domain-specific language]]s (DSLs) for the problem first, and solves the problem in those languages. Language-oriented programming was first described in detail in Martin Ward's 1994 paper ''Language Oriented Programming''.<ref name="lop" />
 
==Concept==
Existing implementations of this concept include:
A book that describes thisThe concept, with examples, is ''Building Better Applications: a Theory of Efficientlanguage-oriented Software Development''.<ref>Dunlavey 1994.</ref> Itprogramming takes the approach to capture requirements in the user's terms, and then to try to create an implementation language as [[wikt:isomorphic#Adjective|isomorphic]] as possible to the user's descriptions, so that the mapping between requirements and implementation is as direct as possible. A measure of the closeness of this [[isomorphism]] is the "redundancy" of the language, defined as the number of editing operations needed to implement a stand-alone change in requirements. It is not assumed ''a-priori'' what is the best language for implementing the new language. Rather, the developer can choose among options created by analysis of the information flows — what information is acquired, what its structure is, when it is acquired, from whom, and what is done with it.<ref>{{cite See [[Linguistic Method]].book
* [http://www.jetbrains.com/mps/ Meta Programming System] by [[JetBrains]].
* [http://www.ceteva.com/xmf.html XMF by Ceteva].
* [http://www.openarchitectureware.org/ openArchitectureWare].
* [http://whole.sourceforge.net/ Whole Platform].
* [[Microsoft]] [http://msdn2.microsoft.com/en-us/teamsystem/aa718951.aspx Software Factories].
* [http://www.intentsoft.com/ Intentional Software].
* [http://layerd.net/ LayerD].
 
A book that describes this concept, with examples, is ''Building Better Applications: a Theory of Efficient Software Development''.<ref>Dunlavey 1994.</ref> It takes the approach to capture requirements in the user's terms, and then to try to create an implementation language as isomorphic as possible to the user's descriptions, so that the mapping between requirements and implementation is as direct as possible. A measure of the closeness of this [[isomorphism]] is the "redundancy" of the language, defined as the number of editing operations needed to implement a stand-alone change in requirements. It is not assumed ''a-priori'' what is the best language for implementing the new language. Rather, the developer can choose among options created by analysis of the information flows — what information is acquired, what its structure is, when it is acquired, from whom, and what is done with it. See [[Linguistic Method]].
 
== See also ==
* [[Model Driven Engineering]]
* [[Domain Specific Language]]s
* [[Aspect-oriented programming]]
* [[Generative programming]]
* [[Intentional Programming]]
* [[Code generation]]
* [[Dialecting]]
* [[Metalinguistic abstraction]]
* [[Linguistic Method]]
*[[Service-Oriented Modeling]] Framework (SOMF)
 
==References==
<references />
<div class="references-small" style="margin-top: 1em;">
* {{cite book
|author = Dunlavey
|year = 1994
|title = Building Better Applications: a Theory of Efficient Software Development
|url =
|chapter =
|chapterurl =
|pages =
|publisher = [[International Thomson Publishing]]
|isbn = 0-442-01740-5
}}</citeref>
|accessdate =
 
}}</cite>
==Development==
</div>
 
The [[Racket programming language]] and [[RascalMPL]] were designed to support language-oriented programming from the ground up.<ref name=Felleisen2018 /> Other [[language workbench]]<ref name="killerapp">{{cite web |url= http://martinfowler.com/articles/languageWorkbench.html |title=Language Workbenches: The Killer-App for Domain Specific Languages? |last1=Fowler |first1=Martin |date=12 June 2005 |access-date=14 April 2015}}</ref> tools such as [[JetBrains MPS]], [[Kermeta]], or [[Xtext]] provide the tools to design and implement DSLs and language-oriented programming.<ref name=Erdweg>{{cite book |chapter-url= https://ir.cwi.nl/pub/21863 |chapter=The State of the Art in Language Workbenches |last1=Erdweg |first1=Sebastian |title=Software Language Engineering |series=Lecture Notes in Computer Science |date=2013 |volume=8225 |pages=197–217 |doi=10.1007/978-3-319-02654-1_11 |isbn=978-3-319-02653-4 |s2cid=5234848 |access-date=4 July 2023}}</ref>
 
== See also ==
* [[AspectGrammar-oriented programming]]
* [[Dialecting]]
* [[Domain-specific language]]
* [[GenerativeExtensible programming]]
 
==References==
{{Reflist}}
 
== External links ==
and in the article by Sergey Dmitriev entitled* [http://www.onboard.jetbrains.com/articles/04/10/lop/ Language Oriented Programming: The Next Programming Paradigm] Sergey Dmitriev's paper that further explored the topic.
* [https://link.springer.com/chapter/10.1007/978-3-319-02654-1_11 The State of the Art in Language Workbenches. Conclusions from the Language Workbench Challenge.] In: Proceedings of the 6th International Conference on Software Language Engineering (SLE'13). 2013.
*[https://www.researchgate.net/publication/322499807_Language_Oriented_Programming_in_Meta-Lisp Language Oriented Programming in MetaLisp] Gyuri Lajos's [https://leeds.primo.exlibrisgroup.com/discovery/fulldisplay?docid=alma991002968069705181&context=L&vid=44LEE_INST:VU1&lang=en&search_scope=My_Inst_CI_not_ebsco&adaptor=Local%20Search%20Engine&tab=AlmostEverything&query=any,contains,language%20oriented%20programming&facet=rtype,include,dissertations thesis 1992 University of Leeds] The system used the very same Top Down Parsing Language algorithm that powered [[TREE-META|Tree-Meta]]
 
{{Programming paradigms navbox}}
== External links ==
* [http://www.ceteva.com/xmf.html Ceteva's XMF 'Language Oriented Programming' language]
* [http://www.ucalc.com/langbuilder.html uCalc Language Builder]
* [http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf Language Oriented Programming]
* [http://www.cse.dmu.ac.uk/~mward/martin/papers/ Papers by Martin Ward]
* [http://www.onboard.jetbrains.com/articles/04/10/lop/ Language Oriented Programming: The Next Programming Paradigm]
* [http://www.sergeydmitriev.com/ Sergey Dmitriev's personal homepage]
* [http://www.jetbrains.com/mps The Meta-Programming System]
* [http://www.martinfowler.com/articles/languageWorkbench.html http://www.martinfowler.com/articles/languageWorkbench.html]
* [http://msdn.microsoft.com/architecture/overview/softwarefactories/ http://msdn.microsoft.com/architecture/overview/softwarefactories/]
* [http://osl.iu.edu/~tveldhui/papers/dagstuhl1998/ http://osl.iu.edu/~tveldhui/papers/dagstuhl1998/]
* [http://research.microsoft.com/research/pubs/view.aspx?tr_id=4 http://research.microsoft.com/research/pubs/view.aspx?tr_id=4]
* [http://www.intentsoft.com/ http://www.intentsoft.com/]
* [http://oozy.blogspot.com/ http://oozy.blogspot.com/]
* [http://lambda-the-ultimate.org/node/377 http://lambda-the-ultimate.org/node/377]
* [http://www.paulgraham.com/onlisp.html http://www.paulgraham.com/onlisp.html]
* [http://fragmental.tw/research-on-dsls/language-oriented-programming-lop/ Language Oriented Programming (LOP)]
* [http://layerd.net/ LayerD framework]
* [http://www.codegeneration.net/tiki-read_article.php?articleId=60 An interview with Sergey Dmitriev] and [http://www.codegeneration.net/tiki-read_article.php?articleId=61 another one with Charles Simonyi]
 
[[Category:Programming paradigms]]