Радость (язык программирования) - Joy (programming language)
Парадигма | мультипарадигма : функциональная , конкатенативная , стек-ориентированная |
---|---|
Разработано | Манфред фон Тун |
Разработчик | Манфред фон Тун Джон Коуэн |
Впервые появился | 2001 г. |
Стабильный выпуск | 17 марта 2003 г. / 17 марта 2003 г. |
Печатная дисциплина | сильный , динамичный |
Основные реализации | |
Joy0, Joy1, "Current Joy", "John Cowan's Joy", "JoyJ (Joy in jvmm)" | |
Под влиянием | |
Схема , FP , Forth | |
Под влиянием | |
Фактор , Кот , V, Трит |
Язык программирования Joy в информатике - это чисто функциональный язык программирования , созданный Манфредом фон Туном из Университета Ла Троб в Мельбурне , Австралия . Радость основана на композиции функций, а не на лямбда-исчислении . Оказалось, что он имеет много общего с Forth не из-за дизайна, а из-за своего рода параллельной эволюции и конвергенции. Он также был вдохновлен стилем программирования на уровне функций от John Бакуса «s FP .
Как это работает
Joy необычен среди языков функционального программирования (за исключением языков программирования на уровне функций и некоторых эзотерических, таких как Unlambda ) отсутствием лямбда- оператора и, следовательно, отсутствием формальных параметров . Чтобы проиллюстрировать это на общем примере, вот как функция квадрата может быть определена на императивном языке программирования ( C ):
int square(int x)
{
return x * x;
}
Переменная x - это параметр, который заменяется аргументом, который будет возведен в квадрат при вызове функции.
На функциональном языке ( схеме ) можно определить ту же функцию:
(define square
(lambda (x)
(* x x)))
Это во многом отличается, но по-прежнему использует параметр x таким же образом.
В Joy функция квадрата определяется:
DEFINE square == dup * .
В Joy все является функцией, которая принимает стек в качестве аргумента и в результате возвращает стек. Например, цифра «5» не представляет собой целочисленную константу, а вместо этого представляет собой короткую программу, которая помещает цифру 5 в стек.
- Оператор dup просто дублирует верхний элемент стека, выдвигая его копию.
- Оператор * извлекает из стека два числа и выталкивает их произведение.
Таким образом, функция square делает копию верхнего элемента, а затем умножает два верхних элемента стека, оставляя квадрат исходного верхнего элемента наверху стека без необходимости в формальном параметре. Это делает Джой лаконичным, о чем свидетельствует определение быстрой сортировки :
DEFINE qsort == [small] [] [uncons [>] split] [enconcat] binrec.
binrec - один из многих рекурсивных комбинаторов Joy , реализующих двоичную рекурсию. Он ожидает, что на вершине стека находятся четыре процитированные программы, которые представляют:
- условие завершения (если список «маленький» (1 или 0 элементов), он уже отсортирован),
- что делать, если условие прекращения выполнено (в данном случае ничего),
- что делать по умолчанию (разделить список на две половины, сравнив каждый элемент с точкой поворота), и, наконец,
- что делать в конце (вставить стержень между двумя разобранными половинками).
Математическая чистота
В радости, функция означает это гомоморфизм из синтаксической моноиде на семантическом моноиде . То есть, синтаксическое отношение конкатенации из символов карты непосредственно на смысловое отношение композиции из функций . Это скорее гомоморфизм , чем изоморфизм , потому что он включен, но не взаимно однозначен ; то есть ни один символ не имеет более одного значения, но некоторые последовательности символов имеют одинаковое значение (например, «dup +» и «2 *»).
Joy - это конкатенативный язык программирования : «Объединение двух программ обозначает композицию функций, обозначенных этими двумя программами».
Его библиотечные подпрограммы отражают подпрограммы ISO C , хотя текущую реализацию нелегко расширить с помощью функций, написанных на C.
Смотрите также
использованная литература
-
↑
Манфред фон Тун (12 декабря 2003 г.). «Разговор с Манфредом фон Туном» . Проверено 31 мая 2013 года .
В начале 80-х я наткнулся на знаменитую статью Бэкуса «Можно ли освободить программирование от стиля фон Неймана» и сразу был заинтригован более высоким уровнем программирования в его FP.
- ^ "Математические основы радости" . Архивировано из оригинального 7 -го октября 2011 года.
внешние ссылки
- Официальный веб-сайт языка программирования Joy (Университет Ла Троб)
- Зеркало домашней страницы Joy
- Составлен информативный сборник по Joy
- сразу исполняемый Joy (GitHub-Archiv)
- Френегер, Пол (август 2003). "РАДОСТЬ вперед" . Уведомления ACM SIGPLAN . 38 (8).
- фон Тун, Манфред ; Томас, Рувим (9 октября 2001 г.). «Радость: функциональный кузен Форта» (PDF) . Материалы 17-й Евро-четвертой конференции .
- Кристофер Диггинс (31 декабря 2008 г.). «Что такое конкатенативный язык» . Доктор Доббс.
- Аптер, Стеван. «Функциональное программирование в Joy and K» . Вектор . Архивировано из оригинала на 2008-08-28 . Проверено 28 февраля 2011 .
- mjoy, интерпретатор в Delphi для машинного рисования (подмножество Joy)