串接式编程语言
串接式(concatenative)编程语言,是无点的电脑编程语言,在其中所有表达式都指示为函数,而表达式的并列指示函数复合[1]。串接式编程语言将常见于其他编程样式中的函数应用,替代为函数复合,作为建造子例程的缺省方法。
名称含义
串接式语言这个名词,最早在2001年提出的Joy语言中采用。在这门语言中,符号的串接的语法关系,被直接映射成函数的复合的语义关系上:“两个程序的串接指示这两个程序指示的函数的复合”[2]。
例子
例如,在如下的应用式语言的运算操作序列:
y = foo(x)
z = bar(y)
w = baz(z)
在串接式语言中被写为没有参数的函数的序列[3]:
foo bar baz
在串接式语言中的函数和过程,不是值级别而是函数级的,就是说它们典型的不通过显式的名字或标识符,来表示出它们所操作的数据结构;转而在它们中,函数被定义为管道,它的一序列操作运算,从一个隐式数据结构上获取参数,所有函数都在其上操作,并将函数的结果返回到这个共享的数据结构,从而被下一个算子(operator)所用[4]。
复合式语义与镜像这种语义的语法相组合,使得串接式语言高度服从于程序的代数式操纵[5];尽管在其中直接书写数学表达式可能会有困难[6]。串接式语言可以通过堆栈机器以高效的方式实现,并以虚拟机及其指令集的形式含蓄的出现[6]。
特性
串接式语言的特性来自它们的复合式语法和语义:
实现
第一个串接式编程语言是Forth,但是第一个自称串接式语言的是Joy。其他串接式语言有Factor、Onyx、PostScript和RPL等。
多数现存的串接式语言是基于堆栈的;这不是必须要求,并已有其他模型提出[10][11][12]。串接式语言目前作为目标语言用于嵌入式系统、桌面和网页编程,还用于研究用途。
参见
引用
- ^ Christopher Diggins: What is a concatenative language. Drdobbs.com. 2008-12-31 [2013-07-01]. (原始内容存档于2011-08-11).
- ^ Mathematical Foundations of Joy. [2020-05-06]. (原始内容存档于2011-10-07).
- ^ Name code not values. Concatenative.org. [13 September 2013]. (原始内容存档于2013-09-29).
- ^ Concatenative language. Concatenative.org. [13 September 2013]. (原始内容存档于2010-07-29).
- ^ Rationale for Joy, a functional language. [2020-04-19]. (原始内容存档于2011-01-15).
- ^ 6.0 6.1 Why Concatenative Programming Matters. [13 September 2013]. (原始内容存档于2016-10-11).
- ^ von Thun, Manfred: Joy compared with other functional languages. [2020-04-19]. (原始内容存档于2011-10-06).
- ^ von Thun, Manfred: Mathematical foundations of Joy. [2020-04-19]. (原始内容存档于2010-07-31).
- ^ Henry Baker: Linear Logic and Permutation Stacks — The Forth Shall Be First. Home.pipeline.com. [2013-07-01]. (原始内容存档于2014-07-24).
- ^ The Concatenative Language XY. Nsl.com. [2013-07-01]. (原始内容存档于2020-11-11).
- ^ The Enchilada Programming Language. Enchiladacode.nl. [2013-07-01]. (原始内容存档于2020-11-09).
- ^ The Om Programming Language. Om-language.org. [2013-07-01]. (原始内容存档于2020-11-19).
- ^ Cat Specification. Cat-language.com. [2013-07-01]. (原始内容存档于2015-02-05).