串接式(concatenative)编程语言,是无点的计算机编程语言,在其中所有表达式都指示为函数,而表达式的并列指示函数复合[1]串接式编程语言将常见于其他编程样式中的函数应用英语Function application,替代为函数复合英语function composition (computer science),作为建造子例程的缺省方法。

名称含义

编辑

串接式语言这个名词,最早在2001年提出的Joy语言中采用。在这门语言中,符号串接的语法关系,被直接映射成函数复合的语义关系上:“两个程序的串接指示这两个程序指示的函数的复合”[2]

例子

编辑

例如,在如下的应用式语言的运算操作序列:

y = foo(x)
z = bar(y)
w = baz(z)

在串接式语言中被写为没有参数的函数的序列[3]

 foo bar baz

在串接式语言中的函数和过程,不是值级别而是函数级的,就是说它们典型的不通过显式的名字或标识符,来表示出它们所操作的数据结构;转而在它们中,函数被定义为管道,它的一序列操作运算,从一个隐式数据结构上取得参数,所有函数都在其上操作,并将函数的结果返回到这个共享的数据结构,从而被下一个算子(operator)所用[4]

复合式语义与镜像这种语义的语法英语Syntax of programming languages相组合,使得串接式语言高度服从于程序的代数式操纵[5];尽管在其中直接书写数学表达式可能会有困难[6]。串接式语言可以通过堆栈机器以高效的方式实现,并以虚拟机及其指令集的形式含蓄的出现[6]

特性

编辑

串接式语言的特性来自它们的复合式语法和语义:

  • 任何表达式的归约都是一个函数到另一个函数的简化;处理函数到对象的应用是从来都不需要的[7]
  • 任何子表达式可以被替代为代表相同子表达式的一个名字。这在串接式语言社区中被称为重构并被广泛使用来将程序简化为更小的各部份。
  • 串接式语言的语法和语义形成了幺半群的代数结构[8]
  • 受不产生任何垃圾英语Garbage (computer science)线性逻辑的启发,串接式语言可以变得非常适合实现[9]

实现

编辑

第一个串接式编程语言是Forth,但是第一个自称串接式语言的是Joy。其他串接式语言有Factor、Onyx、PostScriptRPL英语RPL (programming language)等。

多数现存的串接式语言是基于堆栈的;这不是必须要求,并已有其他模型提出[10][11][12]。串接式语言目前作为目标语言用于嵌入式系统桌面网页编程,还用于研究用途。

多数串接式语言是动态类型的。例外包括静态类型的Cat语言[13],和它的后继者Kitten[14]. 。

参见

编辑

引用

编辑
  1. ^ Christopher Diggins: What is a concatenative language. Drdobbs.com. 2008-12-31 [2013-07-01]. (原始内容存档于2011-08-11). 
  2. ^ Mathematical Foundations of Joy. [2020-05-06]. (原始内容存档于2011-10-07). 
  3. ^ Name code not values. Concatenative.org. [13 September 2013]. (原始内容存档于2013-09-29). 
  4. ^ Concatenative language. Concatenative.org. [13 September 2013]. (原始内容存档于2010-07-29). 
  5. ^ Rationale for Joy, a functional language. [2020-04-19]. (原始内容存档于2011-01-15). 
  6. ^ 6.0 6.1 Why Concatenative Programming Matters. [13 September 2013]. (原始内容存档于2016-10-11). 
  7. ^ von Thun, Manfred: Joy compared with other functional languages. [2020-04-19]. (原始内容存档于2011-10-06). 
  8. ^ von Thun, Manfred: Mathematical foundations of Joy. [2020-04-19]. (原始内容存档于2010-07-31). 
  9. ^ Henry Baker: Linear Logic and Permutation Stacks — The Forth Shall Be First. Home.pipeline.com. [2013-07-01]. (原始内容存档于2014-07-24). 
  10. ^ The Concatenative Language XY. Nsl.com. [2013-07-01]. (原始内容存档于2020-11-11). 
  11. ^ The Enchilada Programming Language. Enchiladacode.nl. [2013-07-01]. (原始内容存档于2020-11-09). 
  12. ^ The Om Programming Language. Om-language.org. [2013-07-01]. (原始内容存档于2020-11-19). 
  13. ^ Cat - a statically typed functional stack-based programming language. 
  14. ^ Kitten Programming Language. kittenlang.org. [2025-03-31]. 

外部链接

编辑

📚 Artikel Terkait di Wikipedia

Concurrent ML

Concurrent ML(CML)是Standard ML编程语言的并发扩展,其特征是能够允许编程者建立可复合(英语:Function composition (computer science))的通信抽象,它是为头等对象而并未建入于语言。CML的设计和原语操作已经被一些其他编程语言接纳,比如GNU

J语言

J语言最初起步于肯尼斯·艾佛森在1987年发表的《APL字典》,它实现了其中至关重要的秩的概念。J语言提供隐式定义机制包括秩、钩子、叉子和多种函数复合(英语:function composition (computer science)),并介入了作为头等对象的动名词,用以建立控制结构,它常被作为隱式編程的典范之一。

高阶函数

x。 排序函数,接受一个比较函数作为参数。 filter函数 fold函数 apply(英语:apply)函数 函数复合(英语:Function composition (computer science)) 积分 回调函数 蒙塔古文法 這是一個Python 脚本语言的例子,其中函式g()有一引數以及回傳一函數

管道 (软件)

流(stream),而管道的元素可以叫做过滤器(英语:Filter (software))。将元素连接成管道类似于函数复合(英语:Function composition (computer science))。在软件工程中,称之为管道与过滤器设计模式。 管道的概念是在Unix的发源地贝尔实验室由Douglas

单子 (函数式编程)

表示一种特殊形式计算,与之在一起的有两个过程,一个过程用来包装单子内“任何”基本类型的值(产生单子值),另一个过程用来复合(英语:function composition (computer science))那些输出单子值的函数(叫做单子函数)。 单子的概念和术语二者最初都来自范畴论,这里的单子被

隐式编程

这里的参数是不必须的,进而将它改写成如下“无点”也称为函数级编程的样式: sum = foldr (+) 0 Haskell拥有函数复合(英语:Function composition (computer science))算子: (.) :: (b -> c) -> (a -> b) -> a -> c (.)

Filter (高阶函数)

…, 9,这是通过搜集整数列表1, 2, …, 10中,谓词对其返回布尔值false的那些元素(这里的.是函数复合算子(英语:Function composition (computer science)))。 >>>print(list(filter(lambda x:x % 2 == 0,[1

Haskell

的输入参数,返回一个函数(type2->type3) f1 = (absolute . area) -- 函数复合运算符是 . (function composition operator) 多态类型(Polymorphic types)类似于C++的模板。例如,算术加法: (+) :: (Num a)