~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 73891F895BCF585BBD66A576879611AB__1718037780 ✰
Заголовок документа оригинал.:
✰ Elm (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Elm (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Elm_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/73/ab/73891f895bcf585bbd66a576879611ab.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/73/ab/73891f895bcf585bbd66a576879611ab__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:59:22 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 10 June 2024, at 19:43 (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: далее начало оригинального документа

Elm (язык программирования) — Википедия Jump to content

Элм (язык программирования)

Из Википедии, бесплатной энциклопедии
Вяз
Танграм Вяза
Парадигма функциональный
Семья Хаскелл
Разработано Эван Чаплицки
Впервые появился 30 марта 2012 г .; 12 лет назад ( 30 марта 2012 ) [1]
Стабильная версия
0.19.1 / 21 октября 2019 г .; 4 года назад ( 21.10.2019 ) [2]
Дисциплина набора текста статический , сильный , предполагаемый
Платформа х86-64
ТЫ macOS , Windows
Лицензия Разрешительный ( пересмотренный BSD ) [3]
Расширения имен файлов .вяз
Веб-сайт длинный вяз .org Отредактируйте это в Викиданных
Под влиянием
Haskell , стандартный ML , OCaml , F#
Под влиянием
Редукс , [4] Ржавчина , [5] Вид , [6] Рок, [7] Дуб, [8] Ветвь [9]

Elm — это предметно-ориентированный язык программирования для декларативного создания веб-браузера на основе графических пользовательских интерфейсов . Elm является чисто функциональным продуктом , при разработке которого особое внимание уделяется удобству использования , производительности и надежности . Он рекламирует « во время выполнения », никаких исключений на практике [10] компилятора Elm стало возможным благодаря статической проверке типов .

История [ править ]

Первоначально Вяз был разработан Эваном Чаплицки в качестве его диссертации в 2012 году. [11] В первый выпуск Elm входило множество примеров и онлайн-редактор, который позволял легко опробовать его в веб-браузере . [12] Г-н Чаплицки присоединился к Prezi в 2013 году, чтобы работать над Elm. [13] а в 2016 году перешёл в NoRedInk в качестве инженера по открытому коду, а также основал Elm Software Foundation. [14]

Первоначальная реализация компилятора Elm ориентирована на язык гипертекстовой разметки ( HTML ), каскадные таблицы стилей (CSS) и JavaScript . [15] Набор основных инструментов продолжает расширяться и теперь включает в себя цикл чтения-оценки-печати (REPL), [16] менеджер пакетов , [17] путешествующий во времени отладчик, [18] и установщики для macOS и Windows . [19] В Elm также есть экосистема библиотек , созданных сообществом . [20] и Ellie, продвинутый онлайн-редактор, позволяющий сохранять работу и включающий общественные библиотеки. [21]

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

В Elm имеется небольшой набор языковых конструкций, включая традиционные if-выражения, let-выражения для хранения локальных значений и регистровые выражения для сопоставления с образцом . [22] Как функциональный язык, он поддерживает анонимные функции , функции в качестве аргументов, а функции могут возвращать функции, причем последние часто за счет частичного применения каррированных функций. Функции вызываются по значению. Его семантика включает неизменяемые значения, функции без сохранения состояния и статическую типизацию с выводом типа. Программы Elm отображают HTML через виртуальный DOM и могут взаимодействовать с другим кодом, используя «JavaScript как услугу».

Неизменяемость [ править ]

Все значения в Elm неизменяемы , что означает, что значение не может быть изменено после его создания. Elm использует постоянные структуры данных для реализации своих массивов, наборов и словарей в стандартной библиотеке. [23]

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

Elm статически типизирован. Аннотации типов не являются обязательными (из-за вывода типа), но настоятельно приветствуются. Аннотации располагаются на строке над определением (в отличие от языков семейства C, где типы и имена перемежаются). Elm использует одно двоеточие для обозначения «имеет тип».

Типы включают примитивы, такие как целые числа и строки, а также базовые структуры данных, такие как списки, кортежи и записи. Функции имеют типы, записанные стрелками, например round : Float -> Int. Пользовательские типы позволяют программисту создавать собственные типы для представления данных в соответствии с проблемной областью. [24]

Типы могут ссылаться на другие типы, например List Int. Типы всегда пишутся с заглавной буквы; Имена в нижнем регистре являются переменными типа. Например, List aпредставляет собой список значений неизвестного типа. Это тип пустого списка и аргумента List.length, который не зависит от элементов списка. Существует несколько специальных типов, которые программисты создают для взаимодействия со средой выполнения Elm. Например, Html Msg представляет (виртуальное) дерево DOM, все обработчики событий которого создают сообщения типа Msg.

Вместо того, чтобы позволять любому значению быть неявно обнуляемым (например, в JavaScript undefined или нулевой указатель ), стандартная библиотека Elm определяет Maybe aтип. Код, который создает или обрабатывает необязательное значение, делает это явно, используя этот тип, а для всего остального кода гарантируется фактическое присутствие значения заявленного типа.

Elm предоставляет ограниченное количество встроенных классов типов : number которая включает в себя Int и Float для облегчения использования числовых операторов, таких как (+) или (*), comparable который включает числа, символы, строки, списки сравниваемых объектов и кортежи сопоставимых объектов для облегчения использования операторов сравнения, и appendable который включает строки и списки для облегчения конкатенации с (++). Elm не предоставляет механизма для включения пользовательских типов в эти классы типов или создания новых классов типов (см. Ограничения ).

Система модулей [ править ]

В Elm есть система модулей , которая позволяет пользователям разбивать свой код на более мелкие части, называемые модулями. Модули могут скрывать детали реализации, такие как вспомогательные функции, и группировать связанный код. Модули служат пространством имен для импортируемого кода, например Bitwise.and. Сторонние библиотеки (или пакеты) состоят из одного или нескольких модулей и доступны в публичной библиотеке Elm . Все библиотеки имеют версии в соответствии с semver , который обеспечивается компилятором и другими инструментами. То есть удалить функцию или изменить ее тип можно только в мажорном релизе.

Совместимость с HTML, CSS и JavaScript [ править ]

Elm использует абстракцию, называемую портами, для взаимодействия с JavaScript . [25] Он позволяет значениям входить и выходить из программ Elm, что позволяет взаимодействовать между Elm и JavaScript.

В Elm есть библиотека elm/html, которую программист может использовать для написания HTML и CSS внутри Elm. [26] Он использует подход виртуального DOM для повышения эффективности обновлений. [27]

Бэкэнд [ править ]

Elm официально не поддерживает разработку на стороне сервера. Основная команда разработчиков не считает это своей основной целью и предпочитает сосредоточить разработку на улучшении опыта фронтенд-разработки. Тем не менее, существует несколько независимых проектов, которые пытаются изучить возможности использования Elm в качестве серверной части. Проекты в основном привязаны к версии Elm 0.18.0, поскольку более новые не поддерживают «родной» код и некоторые другие используемые функции. Есть две попытки использовать Elm с BEAM (виртуальной машиной Erlang). Один из проектов выполняет Elm непосредственно в среде. [28] а другой компилирует его в Elixir. [29] Также была попытка создать серверную структуру для Elm на базе инфраструктуры Node.js. [30] Ни один из проектов не готов к производству.

Архитектура Вяза [ править ]

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

Программа Elm всегда делится на три части:

  • Модель — состояние приложения
  • Просмотр — функция, преобразующая модель в HTML.
  • Update — функция, обновляющая модель на основе сообщений.

Это ядро ​​архитектуры Elm.

Например, представьте себе приложение, отображающее число, и кнопку, которая увеличивает это число при нажатии. [31] В этом случае все, что нам нужно сохранить, это одно число, поэтому наша модель может быть такой простой, как type alias Model = Int. view функция будет определена с помощью Htmlбиблиотеку и отобразите номер и кнопку. Чтобы номер обновлялся, нам нужно иметь возможность отправить сообщение на update функция, которая выполняется с помощью пользовательского типа, такого как type Msg = Increase. Increase значение прикрепляется к кнопке, определенной в view функция такова, что при нажатии кнопки пользователем, Increase передается в update функция, которая может обновлять модель, увеличивая число.

В архитектуре Elm отправка сообщений updateэто единственный способ изменить состояние. В более сложных приложениях сообщения могут поступать из разных источников: взаимодействие с пользователем, инициализация модели, внутренние вызовы из update, подписки на внешние события (изменение размера окна, системные часы, взаимодействие с JavaScript...), а также изменения и запросы URL-адресов.

Ограничения [ править ]

Elm не поддерживает полиморфизм высшего рода . [32] которые предлагают родственные языки Haskell и PureScript , а также Elm не поддерживает создание классов типов .

Это означает, что, например, в Elm нет универсального map функция, которая работает с несколькими структурами данных, такими как List и Set. В Elm такие функции обычно вызываются по имени их модуля, например, вызывая List.map и Set.map. В Haskell или PureScript будет только одна функция. map. Это известный запрос на добавление функции, который включен в план действий г-на Чаплицкого как минимум с 2015 года. [33]

Другим результатом является большое количество шаблонного кода в проектах среднего и большого размера, как показано автором книги «Elm в действии» в примере одностраничного приложения. [34] при этом почти идентичные фрагменты повторяются в функциях обновления, просмотра, подписок, анализа маршрутов и построения.

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

-- Это однострочный комментарий. 

  {- 
 Это многострочный комментарий. 
  Это {- вложенно.   -} 
 -} 

 -- Здесь мы определяем значение с именем `приветствие`.   Тип определяется как String. 
  приветствие   = 
     «Привет, мир!» 

   -- Лучше всего добавлять аннотации типов к объявлениям верхнего уровня. 
  hello   :   String 
 hello   = 
     «Привет». 

  -- Функции объявляются одинаково, с аргументами после имени функции. 
  add   x   y   = 
     x   +   y 

 — Опять же, лучше всего добавлять аннотации типов. 
  гипотенуза   :   Float   ->   Float   ->   Float 
 гипотенуза   a   b   = 
     sqrt   (  a  ^  2   +   b  ^  2  ) 

 — мы можем создавать лямбда-функции с синтаксисом `\[arg] -> [expression]`. 
  hello   :   String   ->   String 
 hello   =   \  s   ->   "Привет,"   ++   s 

 -- Объявления функций могут иметь анонимные имена параметров, обозначаемые `_`, 
 -- которые совпадают, но не используются в теле. 
  const   :   a   ->   b   ->   a 
 const   k   _   =   k 

 — Функции также каррируются;   здесь мы каррировали инфиксный 
 оператор умножения с `2` 
 MultipleBy2   :   Number   ->   Number 
 MultipleBy2   = 
     (*)   2 

 -- If-выражения используются для ветвления по значениям `Bool` 
 AbsoluteValue   :   Number   ->   Number 
 AbsoluteValue   Number   = 
     если   число   <   0   , то   отрицать   число  else   число 

  — записи используются для хранения значений с именованными полями 
 book   :   {   title   :   String  ,   author   :   String  ,   pages   :   Int   } 
 book   = 
     {   title   =   "Steppenwolf" 
     ,   author   =   "Hesse" 
     ,   pages   =   237  
     } 

 — Запись доступ осуществляется с помощью `.` 
 title   :   String 
 title   = 
     book  .   title 

 к записи. `.` также может использоваться как 
 функцияauthor   :   Stringauthor 
 — Доступ   = 
     .  автора    книга 

 . Мы можем создавать тегированные объединения с помощью ключевого слова `type`. 
  -- Следующее значение представляет двоичное дерево. 
  тип   Дерево   a 
     =   Пусто 
     |    Узел   a   (  Дерево   a  )   (  Дерево   a  ) 

 — эти типы можно проверить с помощью регистровых выражений. 
  глубина   :   Дерево   a   ->   Int 
 глубины   дерево   = 
     случаев   дерево   Empty 
         -   -    0 
         Node_   справа   left   right   > 
             1   +   max   (  глубина   слева  )   (  глубина   >  ) 

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

  • PureScript — строго типизированный чисто функциональный язык программирования, который компилируется в JavaScript.
  • Причина – расширение синтаксиса и набор инструментов для OCaml, которые также можно перенести в JavaScript.

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

  1. ^ Чаплицки, Эван (30 марта 2012 г.). «Моя диссертация наконец завершена!» Elm: Параллельный FRP для функциональных графических интерфейсов» « . Реддит .
  2. ^ «Релизы: elm/Компилятор» . Гитхаб .
  3. ^ "вяз/компилятор" . Гитхаб . 16 октября 2021 г.
  4. ^ «Предшествующий уровень техники — Redux» . redux.js.org .
  5. ^ «Типы уникальности» . Ржавый блог . Проверено 8 октября 2016 г. Те из вас, кто знаком со стилем Elm, возможно, поймут, что обновленные сообщения --explain во многом вдохновлены подходом Elm.
  6. ^ «Сравнение с другими фреймворками — Vue.js» .
  7. ^ "roc/roc-for-elm-programmers.md в main · roc-lang/roc" . Гитхаб . Проверено 17 февраля 2024 г. Roc — прямой потомок языка программирования Elm. Эти два языка похожи, но не одинаковы!
  8. ^ «Почему Derw: язык, похожий на Elm, который компилируется в TypeScript?» .
  9. ^ «Выпущен Грен 0.1.0» .
  10. ^ «Домашняя страница Вяза» .
  11. ^ «Elm: параллельный FRP для функциональных графических интерфейсов» (PDF) .
  12. ^ «Попробуй Вяз» . elm-lang.org . Архивировано из оригинала 21 мая 2017 г. Проверено 24 июля 2019 г.
  13. ^ «вяз и прези» . elm-lang.org .
  14. ^ «Новые приключения вяза» . elm-lang.org .
  15. ^ "вяз/компилятор" . Гитхаб . 16 октября 2021 г.
  16. ^ "репл" . elm-lang.org .
  17. ^ «Менеджер пакетов» . elm-lang.org .
  18. ^ "Дом" . elm-lang.org .
  19. ^ "Установить" . guide.elm-lang.org .
  20. ^ «Вязовые пакеты» . Elm-lang.org .
  21. ^ «Элли» . Ellie-app.com .
  22. ^ «синтаксис» . elm-lang.org . Архивировано из оригинала 13 марта 2016 г. Проверено 31 мая 2013 г.
  23. ^ «вяз/ядро» . package.elm-lang.org .
  24. ^ «Моделируйте задачу» . Вяз . Проверено 4 мая 2016 г.
  25. ^ «Взаимодействие с JavaScript» . elm-lang.org .
  26. ^ "вяз/html" . package.elm-lang.org .
  27. ^ «Сверхбыстрый HTML» . elm-lang.org .
  28. ^ «Кофигумбс/Вяз-балка» . Гитхаб . 24 сентября 2021 г.
  29. ^ "Что это такое?" . Гитхаб . 24 сентября 2021 г.
  30. ^ "Доска" . Гитхаб . 18 сентября 2021 г.
  31. ^ «Кнопки · Введение в Elm» . guide.elm-lang.org . Проверено 15 октября 2020 г.
  32. ^ «Типы высшего рода невыразимы? #396» . github.com/elm-lang/elm-compiler . Проверено 6 марта 2015 г.
  33. ^ «Типы высшего рода, невыразимые № 396» . github.com/elm-lang/elm-compiler . Проверено 19 ноября 2019 г.
  34. ^ "Майн.вяз" . github.com/rtfeldman/elm-spa-example . Проверено 30 июня 2020 г.

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

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