~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 74AFEFCFD8D1913DBDBBF0E9E6CAA0FE__1717439040 ✰
Заголовок документа оригинал.:
✰ Idris (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Идрис (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Idris_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/74/fe/74afefcfd8d1913dbdbbf0e9e6caa0fe.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/74/fe/74afefcfd8d1913dbdbbf0e9e6caa0fe__translat.html ✰
Дата и время сохранения документа:
✰ 24.06.2024 07:18:46 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 3 June 2024, at 21:24 (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

Идрис (язык программирования)

Из Википедии, бесплатной энциклопедии
Идрис
Парадигма Функциональный
Разработано Эдвин Брэди
Впервые появился 2007 г .; 17 лет назад ( 2007 ) [1]
Стабильная версия
1.3.4 [2] / 22 октября 2021 г .; 2 года назад ( 22.10.2021 )
Предварительный выпуск
0.7.0 (Идрис 2) [3] / 22 декабря 2023 г .; 5 месяцев назад ( 22.12.2023 )
Дисциплина набора текста Предполагаемый , статичный , сильный
ТЫ Кросс-платформенный
Лицензия БСД
Расширения имен файлов .idr, .lidr
Веб-сайт просто идрис .org
Под влиянием
Агда , Чистая , [4] Кок , [5] Эпиграмма , F# , Haskell , [5] МЛ , [5] Ржавчина [4]

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

Idris Система типов аналогична системе Agda , а доказательства аналогичны системе Coq , включая тактику ( функции/процедуры доказательства теорем ) посредством отражения разработчика. [6] По сравнению с Agda и Coq, Idris отдает приоритет управлению побочными эффектами и поддержке встроенных предметно-ориентированных языков . Idris компилируется в C (полагаясь на специальный копирующий сборщик мусора с использованием алгоритма Чейни ) и JavaScript (как на основе браузера, так и на основе Node.js ). Существуют сторонние генераторы кода для других платформ, включая виртуальную машину Java (JVM), Common Intermediate Language (CIL) и LLVM . [7]

Идрис назван в честь поющего дракона из британской детской телепрограммы 1970-х годов «Паровозик Айвор» . [8]

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

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

Функциональное программирование [ править ]

Синтаксис Idris имеет много общего с синтаксисом Haskell. Программа hello world в Идрисе может выглядеть так:

модуль   Main 

 main   :   IO   () 
  main   =   putStrLn   "Привет, Мир!" 

Единственные различия между этой программой и ее эквивалентом на Haskell - это одиночное (вместо двойного) двоеточие в сигнатуре типа основной функции и отсутствие слова " where" в объявлении модуля . [9]

данных и параметрические Индуктивные типы

Idris поддерживает индуктивно определяемые типы данных и параметрический полиморфизм . Такие типы могут быть определены как в традиционном Haskell 98 синтаксисе, подобном :

 данных  Дерево   a   =   Узел   (  Дерево   a  )   (  Дерево   a  )   |    Лист   а 
 

или в более общем синтаксисе, подобном обобщенному алгебраическому типу данных (GADT):

 данных  Дерево   :   Тип   ->   Тип   , где 
     Узел   :   Дерево   a   ->   Дерево   a   ->   Дерево   a 
      Лист   :   a   ->   Дерево   a 
 

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

При использовании зависимых типов значения могут появляться в типах; по сути, любые вычисления на уровне значений могут быть выполнены во время проверки типа . Ниже определяется тип списков, длина которых известна до запуска программы, традиционно называемых векторами :

data   Vect   :   Nat   ->   Type   ->   Type   где 
   Nil    :   Vect   0   a 
    (::)   :   (  x   :   a  )   ->   (  xs   :   Vect   n   a  )   ->   Vect   (  n   +   1  )   a 
 

Этот тип можно использовать следующим образом:

всего 
 добавить   :   Vect   n   a   ->   Vect   m   a   ->   Vect   (  n   +   m  )   a 
  добавить   ноль         ys   =   ys 
  добавить   (  x   ::   xs  )   ys   =   x   ::   добавить   xs   ys 
 

Функция append добавляет вектор m элементы типа a к вектору n элементы типа a. можно быть уверенным, Поскольку точные типы входных векторов зависят от значения, во время компиляции что результирующий вектор будет иметь именно ( n + m) элементы типа a. Слово " total" вызывает средство проверки целостности , которое сообщит об ошибке, если функция не охватывает все возможные случаи или невозможно (автоматически) доказать, что она не входит в бесконечный цикл .

Другой распространенный пример — попарное сложение двух векторов, параметризованных по их длине:

общая 
 параAdd   :   Num   a   =>   Vect   n   a   ->   Vect   n   a   ->   Vect   n   a 
  параДобавить   Ноль         Ноль         =   Ноль 
  параДобавить   (  x   ::   xs  )   (  y   ::   ys  )   =   x   +   y   ::   параДобавить   xs   ys 
 

Num a означает, что тип a принадлежит классу типов Num. Обратите внимание, что эта функция по-прежнему успешно проверяет тип в целом, даже несмотря на отсутствие сопоставления регистра. Nilв одном векторе и число в другом. Поскольку система типов может доказать, что векторы имеют одинаковую длину, мы можем быть уверены во время компиляции, что этот случай не произойдет, и нет необходимости включать этот случай в определение функции.

Функции помощника по проверке доказательств [ править ]

Зависимые типы достаточно мощны, чтобы кодировать большинство свойств программ, а программа Idris может проверять инварианты во время компиляции. Это превращает Идриса в помощника по доказательству.

Существует два стандартных способа взаимодействия с помощниками по доказательству: путем написания серии тактических вызовов (стиль Coq) или интерактивной разработки термина для доказательства ( Эпиграмма стиль -Агда). Идрис поддерживает оба режима взаимодействия, хотя набор доступных тактик пока не такой полезный, как у Coq. [ нечеткий ]

Генерация кода [ править ]

Поскольку в Idris есть помощник по доказательству, можно написать программы Idris для передачи доказательств. Если относиться к ним наивно, такие доказательства останутся во время выполнения. Идрис стремится избежать этой ловушки, агрессивно удаляя неиспользуемые термины. [10] [11]

По умолчанию Идрис генерирует собственный код C. через Другой официально поддерживаемый бэкэнд генерирует JavaScript .

Идрис 2 [ править ]

Idris 2 — это новая самостоятельная версия языка, в которой глубоко интегрирована система линейных типов , основанная на количественной теории типов . компилируется в Scheme и C. В настоящее время он [12]

См. также [ править ]

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

  1. ^ Брэди, Эдвин (12 декабря 2007 г.). «Индекс /~eb/darcs/Idris» . Сент-Эндрюсского университета Школа компьютерных наук . Архивировано из оригинала 20 марта 2008 г.
  2. ^ «Выпуск 1.3.4» . Гитхаб . Проверено 31 декабря 2022 г.
  3. ^ «Выпущена версия Idris 2 0.7.0» . Гитхаб . Проверено 20 апреля 2024 г.
  4. ^ Перейти обратно: а б «Типы уникальности» . Идрис 1.3.1 Документация . Проверено 26 сентября 2019 г.
  5. ^ Перейти обратно: а б с «Идрис, язык с зависимыми типами» . Проверено 26 октября 2014 г.
  6. ^ «Размышление разработчика — документация Idris 1.3.2» . Проверено 27 апреля 2020 г.
  7. ^ «Цели генерации кода — последняя документация Идриса» . docs.idris-lang.org .
  8. ^ "Часто задаваемые вопросы" . Проверено 19 июля 2015 г.
  9. ^ «Руководство по синтаксису — документация Idris 1.3.2» . Проверено 27 апреля 2020 г.
  10. ^ «Анализ стирания по использованию — последняя документация Idris» . idris.readthedocs.org .
  11. ^ «Результаты сравнительного анализа» . ziman.functor.sk .
  12. ^ "идрис-ланг/Идрис2" . Гитхаб . Проверено 11 апреля 2021 г.

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

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