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