Конкатенативный язык программирования
Конкатенативный язык программирования — это бесточечный язык компьютерного программирования в котором все выражения обозначают функции , а сопоставление выражений , обозначает композицию функций . [1] Конкатенативное программирование заменяет применение функций , которое распространено в других стилях программирования, на композицию функций в качестве способа построения подпрограмм по умолчанию .
Пример [ править ]
Например, последовательность операций на аппликативном языке, подобная следующей:
y = foo(x)
z = bar(y)
w = baz(z)
...записывается на конкатенативном языке как последовательность функций: [2]
x foo bar baz
Функции и процедуры, написанные в конкатенативном стиле, не относятся к уровню значений , т.е. они обычно не представляют структуры данных, с которыми они работают, с явными именами или идентификаторами . Вместо этого они являются функциональным уровнем — функция определяется как конвейер или последовательность операций, которые берут параметры из неявной структуры данных , с которой работают все функции, и возвращают результаты функции в эту общую структуру, чтобы они могли использоваться следующий оператор. [3]
Сочетание композиционной семантики с синтаксисом , отражающим такую семантику, делает конкатенативные языки легко поддающимися алгебраическим манипуляциям с программами; [4] хотя писать математические выражения непосредственно в них может быть затруднительно. [5] Конкатенативные языки могут быть эффективно реализованы с помощью стековой машины и обычно неявно присутствуют в виртуальных машинах в виде их наборов команд . [5]
Свойства [ править ]
Свойства конкатенативных языков являются результатом их композиционного синтаксиса и семантики:
- Сокращение любого выражения — это упрощение одной функции до другой функции; никогда не приходится иметь дело с применением функций к объектам. [6]
- Любое подвыражение можно заменить именем, представляющим то же подвыражение. В сообществе конкатенативов это называется факторингом и широко используется для упрощения программ на более мелкие части.
- Синтаксис и семантика конкатенативных языков образуют алгебраическую структуру моноида . [7]
- Конкатенативные языки можно сделать хорошо подходящими для реализации, основанной на линейной логике , где мусор никогда не генерируется. [8]
Реализации [ править ]
Первым конкатенативным языком программирования был Forth , хотя Joy был первым языком, назвавшим себя конкатенативным. Другими конкатенативными языками являются dc , Factor , Onyx, PostScript и RPL .
Большинство существующих конкатенативных языков основаны на стеках ; это не является обязательным требованием, и были предложены другие модели. [9] [10] [11] Конкатенативные языки в настоящее время используются для встроенного , настольного и веб-программирования , в качестве целевых языков и в исследовательских целях.
Большинство конкатенативных языков являются динамически типизированными . Исключением является статически типизированный язык Cat. [12]
См. также [ править ]
- Программирование на функциональном уровне
- Гомоконичность
- Стек-ориентированный язык программирования
- Негласное программирование
Ссылки [ править ]
- ^ «Кристофер Диггинс: Что такое конкатенативный язык» . Drdobbs.com. 31 декабря 2008 г. Проверено 1 июля 2013 г.
- ^ «Код имени, а не значения» . Concatenative.org . Проверено 13 сентября 2013 г.
- ^ «Конкатенативный язык» . Concatenative.org . Проверено 13 сентября 2013 г.
- ^ «Обоснование Joy, функционального языка» . Архивировано из оригинала 15 января 2011 г.
- ^ Jump up to: Перейти обратно: а б «Почему конкатенативное программирование имеет значение» . Проверено 13 сентября 2013 г.
- ^ «фон Тун, Манфред: радость по сравнению с другими функциональными языками» . Архивировано из оригинала 6 октября 2011 г.
- ^ «фон Тун, Манфред: Математические основы радости» . Архивировано из оригинала 31 июля 2010 г.
- ^ «Генри Бейкер: линейная логика и стеки перестановок — четвертый должен быть первым» . Home.pipeline.com. Архивировано из оригинала 24 июля 2014 г. Проверено 1 июля 2013 г.
- ^ «Конкатенативный язык XY» . NSL.com . Проверено 1 июля 2013 г.
- ^ «Язык программирования Энчилада» . Enchiladacode.nl . Проверено 1 июля 2013 г.
- ^ «Язык программирования Ом» . Ом-язык.org . Проверено 1 июля 2013 г.
- ^ «Спецификация кота» . Cat-language.com. Архивировано из оригинала 5 февраля 2015 г. Проверено 1 июля 2013 г.