串接式(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

XAML Browser Application

XAML Browser Application,最开始叫xapp,后来在Sept CTP中叫wba,是美國微軟公司所提出的新技術,以XAML作為使用者介面(UI)之描述,寄宿(hosted)在瀏覽器(IE web browser sandbox)中執行的程式。XBAP可以取代ActiveX、Java

F♯

single-argument functions there is syntactic sugar (pattern matching function): let rec factorial = function | 0 -> 1 | n -> n * factorial (n - 1) /// Using fold and

函数式编程

结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂的执行过程。 阿隆佐·邱奇在1930年代开发的λ演算,是建造自函数应用(英语:Function application)的一种计算形式系统。在1937年,艾伦·图灵证明了λ演算和图灵机是等价的计算模型,展示了λ演算是图灵完备性的。λ演算形成了所有函

续体

all/cc将当前续体包装(package up)成为一个“逃脱过程”(escape procedure),即具有函数应用(英语:Function application)作为其唯一的运算,并把它作为实际参数传递给Scheme编程者所定义的函数。call/cc所包装的续体是头等对象,逃脱过程有着无限

ISWIM

let x = M; L,尤其是let子句适合表达ALGOL 60的嵌套(英语:Nested function)的块结构而为后继者语言所承袭: λ演算中的应用(英语:Function application)项(M N)及其关联的抽象项M := λx.L,在应用表达式中要一起表示为:{λM.(M N)}[λx

隐式编程

(\lambda y.(f(x,y)))=\lambda x.\lambda y.f(x,y)} ,采用括号显式的表示出其函数应用(英语:Function application)的左结合性,即 curry ( f ) x y = ( curry ( f ) x ) y {\displaystyle

功能點

method version 2.3 – Definitions and counting guidelines for the application of Function Point Analysis COSMIC(英语:COSMIC functional size measurement): ISO/IEC

LispKit Lisp

e) e₁ e₂……):let在声明列表中,将诸表达式的值绑定到诸变量名字。lambda定义并返回一个函数,在后续的函数应用(英语:Function application)之时,将诸实际参数表达式的值绑定到诸形式参数名字。 (letrec e (x₁.e₁) (x₂