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