Language-oriented programming: Difference between revisions

Content deleted Content added
OAbot (talk | contribs)
m Open access bot: url-access updated in citation with #oabot.
 
(113 intermediate revisions by 76 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==
One of the existing implementations of this concept is the [http://www.jetbrains.com/mps/ Meta Programming System] by JetBrains.
A book that describes thisThe concept, with examples, is: Dunlavey, "Building Better Applications: a Theory of Efficient Software Development" [[International Thomson Publishing]] ISBN 0language-442-01740-5,oriented 1994.programming In this booktakes the approach taken is 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, anthe 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, results in options from which the developer can choose.<ref>{{cite See [[Linguistic Method]].book
|author = Dunlavey
|year = 1994
|title = Building Better Applications: a Theory of Efficient Software Development
|publisher = [[International Thomson Publishing]]
|isbn = 0-442-01740-5
}}</ref>
 
==Development==
A book that describes this concept, with examples, is: Dunlavey, "Building Better Applications: a Theory of Efficient Software Development" [[International Thomson Publishing]] ISBN 0-442-01740-5, 1994. In this book the approach taken is 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 an 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, results in options from which the developer can choose. See [[Linguistic Method]].
 
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==
* [[Grammar-oriented programming]]
*[[Model Driven Engineering]]
* [[Dialecting]]
*[[Domain Specific Language]]s
* [[AspectDomain-orientedspecific programminglanguage]]
* [[GenerativeExtensible programming]]
 
*[[Intentional Programming]]
==References==
*[[Code generation]]
{{Reflist}}
*[[Dialecting]]
*[[Metalinguistic abstraction]]
 
==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.
*[http://www.ucalc.com/langbuilder.html uCalc Language Builder]
* [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.
*[http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf Language Oriented Programming]
*[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]]
*[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)]
 
{{Programming paradigms navbox}}
 
[[Category:Programming paradigms]]