~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ DCDA03424A549439A45B6B2A2EDB776D__1710071400 ✰
Заголовок документа оригинал.:
✰ Clean (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Чистый (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Clean_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/dc/6d/dcda03424a549439a45b6b2a2edb776d.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/dc/6d/dcda03424a549439a45b6b2a2edb776d__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:34:20 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 10 March 2024, at 14:50 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Чистый (язык программирования) — Википедия 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   =   «Привет, мир!» 

Факториал :

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

 Начало   =   fac   10 
fac   ::   Int   ->   Int 
 fac   n   =   prod   [  1  ..  n  ]   // Произведение чисел от 1 до n 

 Start   =   fac   10 

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

фиб   ::   Int   ->   Int 
 фиб   0   =   1 
 фиб   1   =   1 
 фиб   n   =   фиб   (  n   -   2  )   +   фиб   (  n   -   1  )  

 Начало   =   фиб   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 

 Начало   =   фибо   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 относительно проста, легко поддерживать новые архитектуры. Машина ABC — это императивная машина для переписывания абстрактных графов . [13] Он состоит из хранилища графов для хранения перезаписываемого чистого графа и трех стеков:

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

Система времени выполнения , которая связана с каждым исполняемым файлом, создает Startnode в хранилище графов и помещает его в 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 ( СПАРК )

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

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

Хаскелл Чистый Примечания
[   х   |    x   <-   [  1  ..  10  ]   ,   isOdd   x  ] 
[   х   \\   х   <-   [  1  ..  10  ]   |    isOdd   x  ] 
понимание списка
х  :  хз 
[  х  :  хз  ] 
минусов оператор
 данных  Дерево   a 
   =   Пусто 
   |    Узел   (  Дерево   a  )   a   (  Дерево   a  ) 
::   Дерево   a 
   =   Пусто 
   |    Узел   (  Дерево   a  )   a   (  Дерево   a  ) 
алгебраический тип данных
(  уравнение   a  ,   уравнение   b  )   =>   ... 
...   |    Уравнение   а   и   уравнение   б 
утверждения класса и контексты
весело   т  @  (  Узел   l   x   r  )   =   ... 
fun   t  =:  (  Узел   l   x   r  )   =   ... 
как-шаблоны
если   х   >   10   , то   10   , иначе   х 
если   (  х   >   10  )   10   х 
если

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

  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
Номер скриншота №: DCDA03424A549439A45B6B2A2EDB776D__1710071400
URL1:https://en.wikipedia.org/wiki/Clean_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
Clean (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)