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

Clean - это чисто функциональный язык программирования общего назначения . На протяжении большей части истории активного развития языка он назывался Concurrent Clean , но в какой-то момент от него отказались. Clean разрабатывается группой исследователей из Университета Радбауд в Неймегене с 1987 года.

Особенности [ править ]

Язык Clean впервые появился в 1987 году и продолжает развиваться. [3] У него много общих свойств с Haskell : ссылочная прозрачность , понимание списка , защита , сборка мусора , функции высшего порядка , каррирование и отложенное вычисление .

В дистрибутив Clean включена интегрированная среда разработки (IDE) для Microsoft Windows .

Clean имеет дело с изменяемым состоянием и вводом-выводом через систему типизации уникальности , в отличие от использования монад в Haskell . Компилятор использует преимущества системы типов уникальности для генерации более эффективного кода, поскольку он знает, что все, что имеет тип уникальности, можно использовать только один раз. Таким образом, уникальное значение может быть изменено на месте . [4]

Примеры [ править ]

Привет, мир :

 Start = "Привет, мир!"  

Факториал :

Последовательность Фибоначчи :

Оператор Infix :

( ^ ) инфикс 8 :: Int Int -> Int       ( ^ ) х 0 = 1    ( ^ ) х п = х * х ^ ( п -1 )        

В объявлении типа указано, что функция является правым ассоциативным инфиксным оператором с приоритетом 8: это x*x^(n-1)означает, что эквивалентно, x*(x^(n-1))а не (x*x)^(n-1). Этот оператор предопределен в StdEnv , стандартной библиотеке Clean.

Как работает Clean [ править ]

Вычисления основаны на переписывании и редукции графа . Константы, такие как числа, представляют собой графики, а функции - формулы перезаписи графиков. Это, в сочетании с компиляцией в машинный код, делает чистые программы, использующие высокую абстракцию, относительно быстрыми в соответствии с игрой компьютерных тестов . [5]

Компиляция [ править ]

  1. Исходные файлы (.icl) и файлы определений (.dcl) переводятся в Core Clean, базовый вариант Clean, в Clean.
  2. Core clean конвертируется в платформенно-независимый промежуточный язык Clean (.abc), реализованный на языках C и Clean.
  3. Промежуточный АВС код преобразуется в код объекта (.o) с использованием C .
  4. Объектный код связывается с другими файлами в модуле и системе времени выполнения и преобразуется в обычный исполняемый файл с помощью системного компоновщика (если он доступен) или специального компоновщика, написанного в Clean в Windows .

Ранние версии чистой системы были полностью написаны на C , что позволило избежать проблем с загрузкой.

Система SAPL компилирует Core Clean в JavaScript и не использует код ABC.

Машина ABC [ править ]

Чтобы сократить разрыв между Core Clean, функциональным языком высокого уровня, и машинным кодом , используется машина ABC. Это императивная машина для перезаписи абстрактных графов . [6] Генерация конкретного машинного кода из абстрактного кода ABC - относительно небольшой шаг, поэтому с помощью машины ABC гораздо проще ориентироваться на несколько архитектур для генерации кода.

Машина ABC имеет необычную модель памяти . Он имеет хранилище графиков для хранения перезаписываемого чистого графа. Стек A (rgument) содержит аргументы, которые относятся к узлам в хранилище графов. Таким образом можно переписать аргументы узла, что необходимо для сопоставления с образцом . Стек B (базовое значение) содержит базовые значения (целые числа, символы, действительные числа и т. Д.). Хотя это и не обязательно (все эти элементы также могут быть узлами в хранилище графов), использование отдельного стека намного эффективнее. Стек C (ontrol) содержит адреса возврата для управления потоком.

Система времени выполнения , которая связана с каждым исполняемым файлом, имеет printправило, которое выводит узел на выходной канал. Когда программа выполняется, Startузел печатается. Для этого он должен быть переписан в корневую нормальную форму, после чего его дочерние элементы переписываются в корневую нормальную форму и т. Д., Пока не будет напечатан весь узел.

Платформы [ править ]

Clean доступен для Microsoft Windows , Apple Macintosh , Solaris и Linux .

Некоторые библиотеки доступны не на всех платформах, например ObjectIO, который доступен только в Windows и Mac. Функция записи динамики в файлы доступна только в Windows.

Сравнение с Haskell [ править ]

Тест 2008 года показал, что чистый собственный код работает примерно так же хорошо, как Haskell ( GHC ), в зависимости от теста. [7]

Синтаксические различия [ править ]

Синтаксис Clean очень похож на синтаксис Haskell с некоторыми заметными отличиями: [4]

В общем, Haskell ввел больше синтаксического сахара, чем Clean.

Сообщество [ править ]

  • Канал IRC: #cleanlang на freenode

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

  1. ^ "Скачать Чистый" . Чистый . Проверено 23 июля 2019 года .
  2. ^ «Идрис - Типы уникальности» . Проверено 20 ноября 2018 .
  3. ^ "FAQ - Чистота" .
  4. ^ a b ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  5. ^ "Какие языки программирования самые быстрые?" . Игра "Тесты компьютерного языка" . Архивировано 28 июня 2011 года.CS1 maint: bot: original URL status unknown (link)
  6. ^ Купман, Питер (10 декабря 1990). Функциональные программы как исполняемые спецификации (PhD). Katholieke Universiteit Nijmegen. п. 35. ISBN 90-9003689-X.
  7. ^ Янсен, Ян Мартин; Купман, Питер; Пласмейер, Ринус (2008). «От интерпретации к компиляции» (PDF) . Проверено 21 мая 2016 . Cite journal requires |journal= (help)

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

  • Чистая вики
  • Cloogle: поисковая система с чистыми функциями