Language-oriented programming: Difference between revisions

Content deleted Content added
Snipem (talk | contribs)
No edit summary
OAbot (talk | contribs)
m Open access bot: url-access updated in citation with #oabot.
 
(77 intermediate revisions by 50 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
{{Programming paradigms}}
|url=https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=825a90a7eaebd7082d883b198e1a218295e0ed3b
|access-date=15 May 2019}}|{{cite book | first= Robert | last= Pickering | title= Beginning F# |chapter=Language-Oriented Programming
|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==
'''Language oriented programming''' is a style of [[computer]] [[programming]] 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
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 [[isomorphismwikt: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.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]
|author = Dunlavey
and in the article by Sergey Dmitriev entitled [http://www.onboard.jetbrains.com/articles/04/10/lop/ Language Oriented Programming: The Next Programming Paradigm].
|year = 1994
|title = Building Better Applications: a Theory of Efficient Software Development
|publisher = [[International Thomson Publishing]]
|isbn = 0-442-01740-5
}}</citeref>
 
==Development==
Existing implementations of this concept include:
* [[Forth]]
* [http://www.intentsoft.com/ Intentional Software]
* [http://layerd.net/ LayerD]
* [[Macro (computer science)#Lisp macros|Lisp macros]]
* [[JetBrains MPS|Meta Programming System]] by [[JetBrains]]
* [http://www.eclipse.org/workinggroups/oaw/ openArchitectureWare]
* [[REBOL]]
* [http://strategoxt.org/Stratego Spoofax/IMP]
* [http://whole.sourceforge.net/ Whole Platform]
* [http://xlr.sf.net The XL programming language]
* [http://www.ceteva.com/xmf.html XMF by Ceteva]
 
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>
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 [[isomorphism|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==
* [[Aspect-oriented programming]]
* [[Code generation]]
* [[Concept programming]]
* [[Dialecting]]
* [[Domain Specific Language]]s
* [[Fourth-generation programming language]]
* [[Generative programming]]
* [[Grammar-oriented programming]]
* [[Intentional ProgrammingDialecting]]
* [[LinguisticDomain-specific Methodlanguage]]
* [[MetalinguisticExtensible abstractionprogramming]]
* [[Model Driven Engineering]]
* [[Domain-specific_multimodeling]]
 
==References==
{{Reflist}}
<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
|accessdate =
}}</cite>
</div>
 
== External links ==
* [http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf Language Oriented Programming] Martin Ward's original paper that coined the term.
* [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.
* [http://www.martinfowler.com/articles/languageWorkbench.html Language Workbenches: The Killer-App for Domain Specific Languages?] Martin Fowler's article describing both the concept and tools that support it.
*[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.sergeydmitriev.com/ Sergey Dmitriev's personal homepage]
* [http://www.jetbrains.com/mps The Meta-Programming System]
* [http://www.intentsoft.com/ http://www.intentsoft.com/]
* [http://www.ceteva.com/xmf.html Ceteva's XMF 'Language Oriented Programming' language]
* [http://www.ucalc.com/langbuilder.html uCalc Language Builder]
* [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://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]
* Interviews with [http://www.codegeneration.net/tiki-read_article.php?articleId=60 Sergey Dmitriev], [http://www.codegeneration.net/tiki-read_article.php?articleId=61 Charles Simonyi], [http://codegeneration.net/tiki-read_article.php?articleId=64 Krzystof Czarnecki] and [http://codegeneration.net/tiki-read_article.php?articleId=68 Andy Evans]
 
[[Category:{{Programming paradigms]] navbox}}
 
{{[[Category:Programming paradigms}}]]
[[zh:面向语言的程序设计]]