Конкатенативный язык программирования
Конкатенативный язык программирования — это бесточечный язык компьютерного программирования в котором все выражения обозначают функции , а сопоставление выражений , обозначает композицию функций . [ 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 г.
- ^ Перейти обратно: а б «Почему конкатенативное программирование имеет значение» . Проверено 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 г.