Jump to content

Чистый (язык программирования)

Чистый
Парадигма функциональный
Разработано Группа исследований в области программных технологий Университета Радбауд в Неймегене
Впервые появился 1987 год ; 37 лет назад ( 1987 )
Стабильная версия
3.1 / 5 января 2022 г .; 2 года назад ( 05.01.2022 )
Дисциплина набора текста сильный , статический , динамичный
ТЫ Кросс-платформенный
Лицензия Упрощенный BSD [1]
Расширения имен файлов .icl, .dcl, .abc
Веб-сайт чистый .cs .ru .nl
Под влиянием
Лин , Миранда , Хаскелл
Под влиянием
Хаскелл , Идрис [2]

Clean общего назначения чисто функциональный язык программирования . Первоначально называлась Concurrent Clean System. [3] или Чистая система , [4] [5] он разрабатывается группой исследователей из Университета Радбауд в Неймегене с 1987 года. [6] [7] Хотя развитие языка замедлилось, некоторые исследователи все еще работают над ним. [8] В 2018 году была основана дочерняя компания, использующая Clean. [9]

Clean имеет много общих свойств и синтаксиса с младшим родственным языком Haskell : ссылочная прозрачность , понимание списков , защита , сборка мусора , функции высшего порядка , каррирование и ленивые вычисления . Однако Clean имеет дело с изменяемым состоянием и вводом/выводом (I/O) через систему типов уникальности в Haskell , в отличие от использования монад . Компилятор использует преимущества системы типов уникальности для создания более эффективного кода, поскольку он знает , что в любой момент выполнения программы может существовать только одна ссылка на значение уникального типа. Поэтому уникальное значение можно изменить на месте . [10]

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

Привет, мир :

 Start = "Hello, world!"

Факториал :

fac :: Int -> Int
fac 0 = 1
fac n = n * fac (n-1)

Start = fac 10
fac :: Int -> Int
fac n = prod [1..n] // The product of the numbers 1 to n

Start = fac 10

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

fib :: Int -> Int
fib 0 = 1
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1) 

Start = fib 7
fibs :: Int Int -> [Int]
fibs x_2 x_1 = [x_2:fibs x_1 (x_2 + x_1)]

fib :: Int -> Int
fib n = (fibs 1 1) !! n

Start = fib 7

Инфиксный оператор:

(^) infixr 8 :: Int Int -> Int
(^) x 0 = 1
(^) x n = x * x ^ (n-1)

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

Как работает «Чистота»

[ редактировать ]

Вычисления основаны на графов переписывании и сокращении . Константы, такие как числа, представляют собой графики, а функции — это формулы переписывания графиков. Это, в сочетании с компиляцией в собственный код, позволяет программам Clean, использующим высокую абстракцию, работать относительно быстро, согласно данным The Computer Language Benchmarks Game . [11] 2008 года Тест показал, что чистый собственный код работает так же, как компилятор Glasgow Haskell (GHC), в зависимости от теста. [12]

Компиляция

[ редактировать ]

Компиляция Clean в машинный код выполняется следующим образом:

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

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

Машина АВС

[ редактировать ]

Упомянутый выше код ABC является промежуточным представлением абстрактной машины . Поскольку генерация машинного кода для кода ABC относительно проста, легко поддерживать новые архитектуры. Машина ABC — это императивная машина для переписывания абстрактных графов . [13] Он состоит из хранилища графов для хранения перезаписываемого чистого графа и трех стеков:

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

Система времени выполнения , которая связана с каждым исполняемым файлом, создает Start node в хранилище графов и помещает его в A-стек. Затем он начинает его печатать, оценивая по мере необходимости.

Запуск Clean в браузере

[ редактировать ]

Хотя Clean обычно используется для создания собственных исполняемых файлов, некоторые проекты включили приложения в веб-браузеры . Сейчас заброшенный проект SAPL компилировал Core Clean в JavaScript и не использовал код ABC. интерпретатор ABC-кода, написанный на WebAssembly . С 2019 года вместо него используется [14] [15]

Платформы

[ редактировать ]

Clean доступен для Microsoft Windows ( IA-32 и X86-64 ), macOS ( X86-64 ) и Linux ( IA-32 , X86-64 и AArch64 ). [ нужна ссылка ]

Некоторые библиотеки доступны не на всех платформах, например ObjectIO , который доступен только в Windows. Также возможность записи динамики в файлы доступна только в Windows. [ нужна ссылка ]

Доступность Clean для каждой платформы зависит от каждой версии: [16] [17]

Версия Дата Линукс macOS Оракул Солярис Окна Разнообразный
ИА-32 х86-64 AArch64 Моторола 68040 PowerPC х86-64 СПАРК ИА-32 х86-64
3.1 5 января 2022 г. Да Да Да Нет Нет Да Нет Да Да
3.0 2 октября 2018 г. Да Да Нет Нет Нет Да Нет Да Да
2.4 23 декабря 2011 г. Да Да Нет Нет Нет Да Нет Да Да
2.3 22 декабря 2010 г. Да Да Нет Нет Нет Нет Нет Да Да
2.2 19 декабря 2006 г. Да Да Нет Нет Да Нет Да Да Да
2.1.1 31 мая 2005 г. Да Нет Нет Нет Да Нет Да Да Нет
2.1.0 31 октября 2003 г. Да Нет Нет Нет Да Нет Да Да Нет
2.0.2 12 декабря 2002 г. Да Нет Нет Нет Да Нет Да Да Нет
2.0.1 4 июля 2002 г. Да Нет Нет Нет Да Нет Да Да Нет
2.0 21 декабря 2001 г. Нет Нет Нет Нет Нет Нет Нет Да Нет
1.3.3 13 сентября 2000 г. Да Нет Нет Нет Да Нет Да Да Нет
1.3.2 1 июля 1999 г. Нет Нет Нет Да Да Нет Да Да Нет
1.3.1 Январь 1999 г. Да Нет Нет Нет Да Нет Да Да Нет
1.3 22 мая 1998 г. Да Нет Нет Нет Да Нет Да Да Нет
1.2.4 июнь 1997 г. Нет Нет Нет Да Да Нет Нет Да Нет
1.2.3 май 1997 г. Нет Нет Нет Да Да Нет Нет Да Нет
1.2 13 января 1997 г. Нет Нет Нет Да Да Нет Нет Нет Нет
1.1.3 Октябрь 1996 г. Нет Нет Нет Нет Нет Нет Да Нет Нет ОС/2 ( i80386 )
1.1.2 сентябрь 1996 г. Да Нет Нет Нет Нет Нет Да Нет Нет SunOS 4 ( СПАРК )
1.1 март 1996 г. Да Нет Нет Да Нет Нет Нет Нет Нет
1.0.2 сентябрь 1995 г. Да Нет Нет Да Нет Нет Да Нет Нет ОС/2 ( i80386 ); SunOS 4 ( СПАРК )
1.0 май 1995 г. Нет Нет Нет Да Нет Нет Нет Нет Нет ОС/2 ( i80386 )
0.8.4 11 мая 1993 г. Да Нет Нет Да Нет Нет Нет Нет Нет Экспериментальный транспьютера T800 выпуск
0.8.3 26 февраля 1993 г. Нет Нет Нет Да Нет Нет Нет Нет Нет
0.8.1 19 октября 1992 г. Нет Нет Нет Да Нет Нет Нет Нет Нет
0.8 13 июля 1992 г. Нет Нет Нет Да Нет Нет Нет Нет Нет ОС/2 ( i80386 ); SunOS 3–4 ( СПАРК )
0.7 май 1991 г. Нет Нет Нет Да Нет Нет Нет Нет Нет SunOS 3–4 ( СПАРК )

Сравнение с Хаскеллом

[ редактировать ]

Синтаксис Clean очень похож на синтаксис Haskell, но с некоторыми заметными отличиями. В целом, в Haskell введено больше синтаксического сахара , чем в Clean: [10]

Хаскелл Чистый Примечания
[ x | x <- [1..10] , isOdd x]
[ x \\ x <- [1..10] | isOdd x]
понимание списка
x:xs
[x:xs]
минусов оператор
data Tree a
  = Empty
  | Node (Tree a) a (Tree a)
:: Tree a
  = Empty
  | Node (Tree a) a (Tree a)
алгебраический тип данных
(Eq a, Eq b) => ...
... | Eq a & Eq b
утверждения класса и контексты
fun t@(Node l x r) = ...
fun t=:(Node l x r) = ...
как-шаблоны
if x > 10 then 10 else x
if (x > 10) 10 x
если
  1. ^ «Скачать начисто» . Чистый . Проверено 23 июля 2019 г.
  2. ^ «Идрис — Типы уникальности» . Проверено 20 ноября 2018 г.
  3. ^ «Чистая версия 0.7: Readme» . Архивировано из оригинала 24 мая 2019 года.
  4. ^ «Clean 1.0: Readme» . Архивировано из оригинала 5 мая 2019 года.
  5. ^ «Чистая версия 1.3: Readme» . Архивировано из оригинала 27 апреля 2019 года.
  6. ^ «Университет Радбауд в Неймегене: факультет программных наук: программное обеспечение» .
  7. ^ "ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ" . Чистый . Проверено 26 ноября 2021 г.
  8. ^ «Публикации» . Чистый . Проверено 26 ноября 2021 г.
  9. ^ "Дом" . ТОП-технологии программного обеспечения . Проверено 26 ноября 2021 г.
  10. ^ Перейти обратно: а б ftp://ftp.cs.ru.nl/pub/Clean/papers/2007/achp2007-CleanHaskellQuickGuide.pdf
  11. ^ «Какие языки программирования самые быстрые?» . Игра «Бенчмарки компьютерного языка» . Архивировано из оригинала 28 июня 2011 года. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  12. ^ Янсен, Ян Мартин; Купман, Питер; Пласмейер, Ринус (2008). «От интерпретации к компиляции» (PDF) . Проверено 21 мая 2016 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  13. ^ Купман, Питер (10 декабря 1990 г.). Функциональные программы как спецификации исполняемых файлов (доктор философии). Католический университет Неймегена. п. 35. ISBN  90-9003689-Х .
  14. ^ «Clean и iTasks/ABC Interpreter · GitLab» . Clean и iTasks на GitLab . Проверено 13 апреля 2023 г.
  15. ^ Стапс, Камил; ван Гронинген, Джон; Пласмейер, Ринус (15 июля 2021 г.). «Ленивое взаимодействие скомпилированного и интерпретируемого кода для песочницы и распределенных систем». Материалы 31-го симпозиума по реализации и применению функциональных языков . стр. 1–12. дои : 10.1145/3412932.3412941 . ISBN  9781450375627 . S2CID   202751977 .
  16. ^ «История выпусков» . Чистый . Проверено 7 января 2022 г.
  17. ^ «Индекс/Чистота» . Проверено 7 января 2022 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3eee3818b453fa63cb3e8645ba40ca14__1722609240
URL1:https://arc.ask3.ru/arc/aa/3e/14/3eee3818b453fa63cb3e8645ba40ca14.html
Заголовок, (Title) документа по адресу, URL1:
Clean (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)