串接式編程語言
外觀
串接式(concatenative)編程語言,是無點的計算機編程語言,在其中所有表達式都指示為函數,而表達式的並列指示函數複合[1]。串接式編程語言將常見於其他編程樣式中的函數應用,替代為函數複合,作為建造子例程的缺省方法。
名稱含義
[編輯]串接式語言這個名詞,最早在2001年提出的Joy語言中採用。在這門語言中,符號的串接的語法關係,被直接映射成函數的複合的語義關係上:「兩個程序的串接指示這兩個程序指示的函數的複合」[2]。
例子
[編輯]例如,在如下的應用式語言的運算操作序列:
y = foo(x)
z = bar(y)
w = baz(z)
在串接式語言中被寫為沒有參數的函數的序列[3]:
foo bar baz
在串接式語言中的函數和過程,不是值級別而是函數級的,就是說它們典型的不通過顯式的名字或標識符,來表示出它們所操作的數據結構;轉而在它們中,函數被定義為管道,它的一序列操作運算,從一個隱式數據結構上取得參數,所有函數都在其上操作,並將函數的結果返回到這個共享的數據結構,從而被下一個算子(operator)所用[4]。
複合式語義與鏡像這種語義的語法相組合,使得串接式語言高度服從於程序的代數式操縱[5];儘管在其中直接書寫數學表達式可能會有困難[6]。串接式語言可以通過堆棧機器以高效的方式實現,並以虛擬機及其指令集的形式含蓄的出現[6]。
特性
[編輯]串接式語言的特性來自它們的複合式語法和語義:
- 任何表達式的歸約都是一個函數到另一個函數的簡化;處理函數到對象的應用是從來都不需要的[7]。
- 任何子表達式可以被替代為代表相同子表達式的一個名字。這在串接式語言社區中被稱為重構並被廣泛使用來將程序簡化為更小的各部份。
- 串接式語言的語法和語義形成了幺半群的代數結構[8]。
- 受不產生任何垃圾的線性邏輯的啟發,串接式語言可以變得非常適合實現[9]。
實現
[編輯]第一個串接式編程語言是Forth,但是第一個自稱串接式語言的是Joy。其他串接式語言有Factor、Onyx、PostScript和RPL等。
多數現存的串接式語言是基於堆棧的;這不是必須要求,並已有其他模型提出[10][11][12]。串接式語言目前作為目標語言用於嵌入式系統、桌面和網頁編程,還用於研究用途。
多數串接式語言是動態類型的。例外包括靜態類型的Cat語言[13]。
參見
[編輯]引用
[編輯]- ^ 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).