Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Clean
Изображение логотипа
Семантика функциональный
Класс языка чистый функциональный язык программирования[d], язык программирования и non-strict programming language[d]
Появился в 1987; 37 лет назад (1987)
Автор Software Technology Research Group of Radboud University Nijmegen
Выпуск 3.1 (5 января 2022; 23 месяца назад (2022-01-05))
Система типов строгая
Основные реализации Clean
Испытал влияние Lean
Лицензия GNU LGPL
Сайт clean.cs.ru.nl (англ.)

Clean — чистый функциональный язык программирования, поддерживающий основные принципы парадигмы функционального программирования. Для вычислений использует традиционные математические способы вывода значений — унифицированную подстановку и математическую индукцию.

Характеристики языка

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

Язык Clean во многом похож (в том числе и синтаксически) на язык Haskell. Главным отличием Clean от Haskell является способ взаимодействия с внешним состоянием (т.е. способ ввода/вывода): вместо монад Clean использует типы, гарантирующие уникальность. Это обеспечивает более высокую эффективность в соответствующих фрагментах кода, т.к. абстрактные структуры данных деструктивно обновляются, а не замещаются.

Транслятор языка Clean использует переписывание и редукцию[en] графов и порождает нативный код относительно высокой эффективности (то обгоняя Haskell, то отставая от него), используя Си в качестве промежуточного языка.

Примеры

Hello, world!:

 module hello
 Start :: {#Char}
 Start = "Hello, world!"

Факториал:

  module factorial
  import StdEnv
  fac 0 = 1
  fac n = n * fac (n-1)

  // Найти факториал 10
  Start = fac 10
  module factorial2
  import StdEnv
  fac 0 = 1
  fac n = prod [1..n] // Произведение чисел от 1 до n

  // Найти факториал 6
  Start = fac 6

Числа Фибоначчи:

  module fibonacci
  fib 0 = 0
  fib 1 = 1
  fib n = fib (n - 2) + fib (n - 1) 
  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

Вычисления основаны на переписывании и редукции графов  (англ.). Константы, такие как числа, представляют собой графы, а функции — формулы перезаписи графа. Это, в сочетании с компиляцией в машинный код, делает программы, написанные на Clean и использующие высокий уровень абстракции, работающими относительно быстро. Это подтверждается тестами Computer Language Benchmarks Game.

Компиляция

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

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

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

ABC-машина

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

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

Платформы

Clean имеет версии для Microsoft Windows, Apple Macintosh, Solaris и Linux.

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

Синтаксические различия с Haskell

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

Haskell Clean Remarks
[ x | x <- [1..10] , isOdd x]
[ x \\ x <- [1..10] | isOdd x]
Списковое включение
x:xs
[x:xs]
Оператор cons
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
class assertions and contexts
fun t@(Node l x r) = ...
fun t=:(Node l x r) = ...
as-patterns
if x > 10 then 10 else x
if (x > 10) 10 x
if

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

Примечания

Ссылки


Эта страница в последний раз была отредактирована 4 января 2024 в 22:39.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).