Language-oriented programming: Difference between revisions
JurgenVinju (talk | contribs) m fixed bracket |
Citation bot (talk | contribs) Alter: title, template type. Add: s2cid, isbn, doi, pages, volume, series, chapter-url, chapter. Removed or converted URL. | Use this bot. Report bugs. | Suggested by Corvus florensis | #UCB_webform 763/2500 |
||
Line 1: | Line 1: | ||
{{Programming paradigms}} |
{{Programming paradigms}} |
||
'''Language-oriented programming''' ('''LOP''')<ref name="lop">{{cite |
'''Language-oriented programming''' ('''LOP''')<ref name="lop">{{cite book |last1=Ward |first1=Martin |title=Beginning F# |chapter=Language-Oriented Programming |journal=Software - Concepts and Tools |date=1994 |volume=15 |issue=4 |pages=147–161 |doi=10.1007/978-1-4302-2390-0_12 |isbn=978-1-4302-2389-4 |chapter-url=http://www.gkc.org.uk/martin/papers/middle-out-t.pdf |access-date=15 May 2019}}</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}}</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" /> published in ''Software - Concepts and Tools'', Vol.15, No.4, pp 147–161, 1994. |
||
==Concept== |
==Concept== |
||
Line 13: | Line 13: | ||
==Development== |
==Development== |
||
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.{{cite |
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.{{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}} |
||
==See also== |
==See also== |
Revision as of 00:37, 10 September 2023
Language-oriented programming (LOP)[1] is a software-development paradigm where "language" is a software building block with the same status as objects, modules and components,[2] and rather than solving problems in general-purpose programming languages, the programmer creates one or more domain-specific languages (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,[1] published in Software - Concepts and Tools, Vol.15, No.4, pp 147–161, 1994.
Concept
The concept of language-oriented programming 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.[3]
Development
The Racket programming language and RascalMPL were designed to support language-oriented programming from the ground up.[2] Other language workbench[4] tools such as JetBrains MPS, Kermeta, or Xtext provide the tools to design and implement DSLs and language-oriented programming.Erdweg, Sebastian (2013). "The State of the Art in Language Workbenches". Software Language Engineering. Lecture Notes in Computer Science. Vol. 8225. pp. 197–217. doi:10.1007/978-3-319-02654-1_11. ISBN 978-3-319-02653-4. S2CID 5234848. Retrieved 4 July 2023.
See also
- Grammar-oriented programming
- Dialecting
- Domain-specific language
- Extensible programming
- Intentional programming
- Homoiconicity
References
- ^ a b Ward, Martin (1994). "Language-Oriented Programming" (PDF). Beginning F#. Vol. 15. pp. 147–161. doi:10.1007/978-1-4302-2390-0_12. ISBN 978-1-4302-2389-4. Retrieved 15 May 2019.
{{cite book}}
:|journal=
ignored (help) - ^ a b Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam (March 2018). "A Programmable Programming Language". Communications of the ACM. 61 (3): 62–71. doi:10.1145/3127323. S2CID 3887010. Retrieved 15 May 2019.
- ^ Dunlavey (1994). Building Better Applications: a Theory of Efficient Software Development. International Thomson Publishing. ISBN 0-442-01740-5.
- ^ Fowler, Martin (12 June 2005). "Language Workbenches: The Killer-App for Domain Specific Languages?". Retrieved 14 April 2015.
External links
- Language Oriented Programming: The Next Programming Paradigm Sergey Dmitriev's paper that further explored the topic.
- 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.
- Language Oriented Programming in MetaLisp Gyuri Lajos's thesis 1992 University of Leeds The system used the very same Top Down Parsing Language algorithm that powered Tree-Meta