Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

См. Также [ править ]

  • Программирование на функциональном уровне
  • Гомоиконность
  • Стек-ориентированный язык программирования
  • Молчаливое программирование

Ссылки [ править ]

  1. ^ «Кристофер Диггинс: Что такое конкатенативный язык» . Drdobbs.com. 2008-12-31 . Проверено 1 июля 2013 .
  2. ^ «Код имени, а не значения» . Concatenative.org . Проверено 13 сентября 2013 года .
  3. ^ "Конкатенативный язык" . Concatenative.org . Проверено 13 сентября 2013 года .
  4. ^ «Обоснование радости, функциональный язык» . Архивировано из оригинала на 2011-01-15.
  5. ^ a b «Почему имеет значение конкатенативное программирование» . Проверено 13 сентября 2013 года .
  6. ^ «фон Тун, Манфред: радость по сравнению с другими функциональными языками» . Архивировано из оригинала на 2011-10-06.
  7. ^ «фон Тун, Манфред: математические основы радости» . Архивировано из оригинала на 2010-07-31.
  8. ^ «Генри Бейкер: линейная логика и перестановочные стеки - четвертый должен быть первым» . Home.pipeline.com. Архивировано из оригинала на 2014-07-24 . Проверено 1 июля 2013 .
  9. ^ «Конкатенативный язык XY» . Nsl.com . Проверено 1 июля 2013 .
  10. ^ "Язык программирования Энчилада" . Enchiladacode.nl . Проверено 1 июля 2013 .
  11. ^ "Язык программирования Ом" . Om-language.org . Проверено 1 июля 2013 .
  12. ^ «Спецификация кошек» . Cat-language.com. Архивировано из оригинала на 2015-02-05 . Проверено 1 июля 2013 .

Внешние ссылки [ править ]

  • concatenative.org: вики о конкатенативных языках
  • Staapl: Forth на схеме для встроенных контроллеров
  • Язык программирования Enchilada
  • Конкатенативный язык XY
  • Язык программирования Ом