面向语言的程序设计
外观
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
面向语言的程序设计(Language-Oriented Programming,LOP)[1],指一种程序设计范型,将有相同状态的块建造成对象、模块和构件[2],不再用通用编程语言解决问题,程序员首先为问题编写一种或多种领域特定语言,然后再在这些语言中解决问题。这个概念具体描述于Martin Ward的1994年的题为《面向语言编程》的论文中。
概念
[编辑]这个概念使用用户词汇来获得需求,然后创造一门与用户描述尽可能一致的实现语言,这样从需求到实现的映射会非常直接。判断“一致性”的方法是这门语言的“重复度”,即当需求有一次独立变动时需要做多少次修改操作。它并不假定什么是实现新语言的最好语言,相反,开发者可以通过对信息流的分析做不同选择。[3]
开发
[编辑]Racket被设计用来支持面向语言编程[2]。其他的语言工作台工具比如JetBrains MPS、Kermeta和Xtext,提供了设计及实现领域特定语言和面向语言编程的工具[4]。
相关内容
[编辑]参考文献
[编辑]- ^ Ward, Martin. Language Oriented Programming (PDF). Software - Concepts and Tools. 1994, 15 (4): 147–161 [15 May 2019]. doi:10.1007/978-1-4302-2390-0_12. (原始内容存档 (PDF)于2020-11-09).
- ^ 2.0 2.1 Felleisen, Matthias; Findler, Robert Bruce; Flatt, Matthew; Krishnamurthi, Shriram; Barzilay, Eli; McCarthy, Jay; Tobin-Hochstadt, Sam. A Programmable Programming Language. Communications of the ACM. March 2018, 61 (3): 62–71 [15 May 2019]. doi:10.1145/3127323. (原始内容存档于2020-11-29).
- ^ Dunlavey. Building Better Applications: a Theory of Efficient Software Development. International Thomson Publishing. 1994. ISBN 0-442-01740-5.
- ^ Fowler, Martin. Language Workbenches: The Killer-App for Domain Specific Languages?. 12 June 2005 [14 April 2015]. (原始内容存档于2021-05-02).
外部链接
[编辑]- Language Oriented Programming (页面存档备份,存于互联网档案馆) Martin Ward's original paper that coined the term.
- Language Oriented Programming: The Next Programming Paradigm (页面存档备份,存于互联网档案馆) Sergey Dmitriev's paper that further explored the topic.
- Language Workbenches: The Killer-App for Domain Specific Languages? (页面存档备份,存于互联网档案馆) Martin Fowler's article describing both the concept and tools that support it.
- Papers by Martin Ward (页面存档备份,存于互联网档案馆)
- Sergey Dmitriev's personal homepage (页面存档备份,存于互联网档案馆)
- The Meta-Programming System(页面存档备份,存于互联网档案馆)
- https://web.archive.org/web/20160115203115/http://www.intentsoft.com/
- uCalc Language Builder (页面存档备份,存于互联网档案馆)
- http://msdn.microsoft.com/architecture/overview/softwarefactories/ (页面存档备份,存于互联网档案馆)
- https://web.archive.org/web/20060918132317/http://osl.iu.edu/~tveldhui/papers/dagstuhl1998/
- http://research.microsoft.com/research/pubs/view.aspx?tr_id=4 (页面存档备份,存于互联网档案馆)
- http://oozy.blogspot.com/ (页面存档备份,存于互联网档案馆)
- http://lambda-the-ultimate.org/node/377 (页面存档备份,存于互联网档案馆)
- http://www.paulgraham.com/onlisp.html (页面存档备份,存于互联网档案馆)
- Language Oriented Programming (LOP)
- LayerD framework
- Interviews with Sergey Dmitriev, Charles Simonyi, Krzystof Czarnecki and Andy Evans
|