A язык конкатенативного программирования - это безточечный компьютер язык программирования, в котором все выражения обозначают функции, а сопоставление выражений обозначает композицию функции. Конкатенативное программирование заменяет приложение-функцию, которое является обычным для других стилей программирования, на композиция функций в качестве способа по умолчанию для создания подпрограмм .
Например, последовательность операций на прикладном языке, подобная следующей:
y = foo (x) z = bar (y) w = baz (z)
... записывается на конкатенативном языке как последовательность функций без параметров:
foo bar baz
Функции и процедуры, написанные в конкатенативном стиле, не относятся к уровню значений, т.е. они обычно не представляют структуры данных, с которыми они работают, с явными именами или идентификаторами ; вместо этого это уровень функции - функция определяется как конвейер, последовательность операций, которые принимают параметры из неявной структуры данных, на которой работают все функции, и возвращают результаты функции в эта совместно используемая структура, так что она будет использоваться следующим оператором.
Комбинация композиционной семантики с синтаксисом, который отражает такую семантику, делает конкатентивные языки высокоэффективными поддаются алгебраической обработке программ; хотя может быть трудно написать математические выражения прямо в них. Конкатенативные языки могут быть эффективно реализованы с помощью стековой машины и обычно неявно присутствуют в виртуальных машинах в виде их наборов инструкций .
Большая часть Первоначальная работа по теории конкатенативного языка была проведена Манфредом фон Тун.
Свойства конкатенативных языков являются результатом их композиционного синтаксиса и семантики:
Первый конкатенативный языком программирования был Forth, хотя Joy был первым языком, называвшим себя конкатенативным. Другие конкатенативные языки: Factor, Onyx, PostScript и RPL.
Большинство существующих конкатенативных языков основаны на стеке ; это не требование, и были предложены другие модели. Конкатенативные языки в настоящее время используются для встроенного, настольного и веб-программирования, как целевые языки, а также для исследовательских целей.
Большинство конкатенативных языков динамически типизированы. Исключения включают статически типизированный язык Cat.