Конкатенативное программирование — это язык программирования без точек , в котором все выражения обозначают функции , а сопоставление выражений обозначает композицию функций . [1] Конкатенативное программирование заменяет применение функций , которое распространено в других стилях программирования, на композицию функций как способ по умолчанию для построения подпрограмм .
Например, последовательность операций на аппликативном языке выглядит следующим образом:
y знак равно foo ( x ) z знак равно бар ( y ) ш знак равно baz ( z )
...записывается на конкатенативном языке как последовательность функций: [2]
x foo бар баз
Функции и процедуры, написанные в конкатенативном стиле, не являются уровнем значений , т. е. они обычно не представляют структуры данных, с которыми они работают, с явными именами или идентификаторами . Вместо этого они являются уровнем функций — функция определяется как конвейер или последовательность операций, которые берут параметры из неявной структуры данных , с которой работают все функции, и возвращают результаты функции в эту общую структуру, чтобы она использовалась следующим оператором. [3]
Сочетание композиционной семантики с синтаксисом , который отражает такую семантику, делает конкатенативные языки весьма податливыми для алгебраической манипуляции программами; [4] хотя может быть сложно писать математические выражения непосредственно в них. [5] Конкатенативны языки могут быть эффективно реализованы с помощью стековой машины и обычно неявно присутствуют в виртуальных машинах в форме их наборов инструкций . [5]
Свойства конкатенативных языков являются результатом их композиционного синтаксиса и семантики:
Первым конкатенативным языком программирования был Forth , хотя Joy был первым языком, назвавшим себя конкатенативным. Другие конкатенативными языками являются dc , Factor , Onyx, PostScript и RPL .
Большинство существующих конкатенативных языков основаны на стеке ; это не является обязательным требованием, и были предложены другие модели. [9] [10] [11] В настоящее время конкатенативные языки используются для встраиваемого , настольного и веб-программирования , в качестве целевых языков и в исследовательских целях.
Большинство конкатенативных языков являются динамически типизированными . Исключение составляет статически типизированный язык Cat. [12]