Elm (з англ. В'яз) — функційна мова програмування, для декларативного створення браузерних застосунків з графічним інтерфейсом користувача. Elm використовує стиль та для того щоб сконструювати інтерфейс користувача унеможливлюючи деструктивні зміни. Синтаксис схожий на Haskell, але значно спрощений і спеціалізований. Вихідний код на Elm компілюється в нативний JavaScript. Скомпільований JavaScript містить код додатка, яке керують піддерево DOM.
Elm | |
---|---|
Парадигма | , функційне програмування |
Дата появи | 2012 |
Творці | Еван Чапліцькі |
Останній реліз | 0.19.1 (21 жовтня 2019) |
Система типізації | статична, , |
Під впливом від | Haskell, Standard ML, OCaml, F# |
Вплинула на | |
Мова реалізації | Haskell[2] |
Ліцензія | Дозвільна (Переглянута BSD) |
Звичайні розширення файлів | .elm |
Репозиторій вихідного коду | github.com/elm/compiler |
Вебсайт | elm-lang.org |
Історія
Elm спроектував Еван Чапліцькі в своїй дипломній роботі 2012 року. Перший випуск Elm містив приклади та онлайн-редактор, який дозволяв досить просто спробувати мову у браузері. Еван Чапліцькі приєднався до Prezi в 2013 аби продовжити роботу над Elm, а в 2016 перейшов до як Open Source Engineer, також заснувавши «Elm Software Foundation».
Початкова реалізація компілятора Elm націлена на генерацію HTML, CSS, та JavaScript коду. Набір інструментів мови продовжив розширюватись, і тепер включає REPL,менеджер пакунків, зневадник який подорожує в часі, та інсталятори для Mac та Windows. Elm також має екосистему бібліотек створених спільнотою.
Особливості
Elm містить невеликий, але виразний набір конструкцій мови, який включає if-вирази, let-вирази, case-вирази, анонімні функції та інтерполяцію списків.
Незмінність
Всі значення в Elm незмінні, що означає, що значення не може модифікуватись, після того як воно було створеним. Elm використовує щоб реалізувати свої бібліотеки Array
, Dict
, та Set
.
Статична типізація
Elm статично типізований. Кожному визначенню в Elm можна дати анотацію типу, яка опише точний формат значення. Типи включають:
- примітивні типи, такі як числа та рядки
- базові структури даних, такі як списки, кортежі та асоціативні масиви
- [en], які дозволяють створювати нові типи
Elm також підтримує повне виведення типів, тому компілятор може перевірити що програма типо-безпечна, не читаючи жодних анотацій типів.
Система модулів
Elm має систему модулів яка дозволяє користувачам розбити свій код на менші частини, які називаються модулями. Користувачі можуть імпортувати та експортувати значення, дозволяючи приховувати деталі реалізації, щоб іншим програмістам не було потреби про них думати. Модулі складають основу сайту бібліотеки спільноти Elm: Elm Public Library.
Взаємодія з HTML, CSS, та JavaScript
Elm для спілкування з JavaScript використовує абстракцію, яка називається «порти».
Elm також має бібліотеку, яка називається elm-html
і дозволяє користувачам використовувати HTML в Elm та стилізувати його з CSS. Для того щоб зміни в HTML були ефективними, використовується .
Обмеження
На відміну від Haskell, Elm не має підтримки [en], і тому не може надавати загальну абстракцію для багатьох типових операцій. Наприклад, нема загальної функції map
, apply
, fold
, чи filter
. Замість цього, такі імена містять свій модуль як префікс, як в List.map
та Dict.map
.
Інструменти
- Онлайн-редактор і компілятор на
- Онлайн REPL: http://elmrepl.cuberoot.in/ [ 16 жовтня 2016 у Wayback Machine.]
- Elm Platform [ 28 лютого 2017 у Wayback Machine.] для інсталяції основних інструментів локально
- та
- Core Libraries та
Приклад коду
-- Це однорядковий коментар {- А це багаторядковий. Він може розтягуватись на багато рядків. -} {- Можна вкладати багаторядкові коментарі {- один в одного -} -} -- Тут ми описуємо значення, яке назвемо `greeting`. Його тип виведеться як String. greeting = "Привіт, світе!" -- Але краще додавати анотації типів до декларацій верхнього рівня: hello : String hello = "Привіт вам!" -- Функції описуються аналогічно до значень, аргументи йдуть за іменем функції add x y = x + y -- Знову ж таки, краще додавати анотації типів. hypotenuse : Float -> Float -> Float hypotenuse a b = sqrt (a^2 + b^2) -- If-вирази використовуються щоб відгалужувати значення absoluteValue : Int -> Int absoluteValue number = if number < 0 then -number else number -- Записи використовуються щоб містити значення з іменованими полями book : { title:String, author:String, pages:Int } book = { title = "Кобзар" , author = "Шевченко" , pages = 237 } -- Можна створювати цілком нові типи, використовуючи ключове слово `type`. -- Наступне значення задає бінарне дерево. type Tree a = Empty | Node a (Tree a) (Tree a) -- Такі типи можна опрацьовувати за допомогою case-виразів. depth : Tree a -> Int depth tree = case tree of Empty -> 0 Node value left right -> 1 + max (depth left) (depth right)
Зноски
- . Архів оригіналу за 24 серпня 2016. Процитовано 24 серпня 2016.
- https://github.com/elm/compiler
- https://github.com/evancz/Elm/blob/master/LICENSE
- (PDF). Архів оригіналу (PDF) за 20 листопада 2016. Процитовано 24 серпня 2016.
- . Архів оригіналу за 21 травня 2017. Процитовано 24 серпня 2016.
- . Архів оригіналу за 24 травня 2015. Процитовано 24 серпня 2016.
- . Архів оригіналу за 5 вересня 2016. Процитовано 24 серпня 2016.
- Elm compiler source code
- . Архів оригіналу за 31 травня 2015. Процитовано 24 серпня 2016.
- . Архів оригіналу за 13 березня 2016. Процитовано 24 серпня 2016.
- . Архів оригіналу за 3 травня 2017. Процитовано 24 серпня 2016.
- . Архів оригіналу за 28 лютого 2017. Процитовано 24 серпня 2016.
- . Архів оригіналу за 11 лютого 2015. Процитовано 24 серпня 2016.
- . Архів оригіналу за 13 березня 2016. Процитовано 24 серпня 2016.
- About Elm [ 30 серпня 2017 у Wayback Machine.] Elm features
- . Архів оригіналу за 11 лютого 2015. Процитовано 24 серпня 2016.
- . Elm. Архів оригіналу за 9 травня 2016. Процитовано 4 травня 2016.
- . Архів оригіналу за 11 лютого 2015. Процитовано 24 серпня 2016.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 13 березня 2016. Процитовано 24 серпня 2016.
- . Архів оригіналу за 4 вересня 2016. Процитовано 24 серпня 2016.
- . Архів оригіналу за 13 березня 2016. Процитовано 24 серпня 2016.
- Higher-Kinded types Not Expressible? #396. github.com/elm-lang/elm-compiler. Процитовано 6 березня 2015.
Посилання
- Офіційний сайт
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Elm z angl V yaz funkcijna mova programuvannya dlya deklarativnogo stvorennya brauzernih zastosunkiv z grafichnim interfejsom koristuvacha Elm vikoristovuye stil ta dlya togo shob skonstruyuvati interfejs koristuvacha unemozhlivlyuyuchi destruktivni zmini Sintaksis shozhij na Haskell ale znachno sproshenij i specializovanij Vihidnij kod na Elm kompilyuyetsya v nativnij JavaScript Skompilovanij JavaScript mistit kod dodatka yake keruyut pidderevo DOM ElmParadigma funkcijne programuvannyaData poyavi2012TvorciEvan ChaplickiOstannij reliz0 19 1 21 zhovtnya 2019 Sistema tipizaciyistatichna Pid vplivom vidHaskell Standard ML OCaml F Vplinula naMova realizaciyiHaskell 2 LicenziyaDozvilna Pereglyanuta BSD Zvichajni rozshirennya fajliv elmRepozitorij vihidnogo kodugithub com elm compilerVebsajtelm lang orgIstoriyaElm sproektuvav Evan Chaplicki v svoyij diplomnij roboti 2012 roku Pershij vipusk Elm mistiv prikladi ta onlajn redaktor yakij dozvolyav dosit prosto sprobuvati movu u brauzeri Evan Chaplicki priyednavsya do Prezi v 2013 abi prodovzhiti robotu nad Elm a v 2016 perejshov do yak Open Source Engineer takozh zasnuvavshi Elm Software Foundation Pochatkova realizaciya kompilyatora Elm nacilena na generaciyu HTML CSS ta JavaScript kodu Nabir instrumentiv movi prodovzhiv rozshiryuvatis i teper vklyuchaye REPL menedzher pakunkiv znevadnik yakij podorozhuye v chasi ta instalyatori dlya Mac ta Windows Elm takozh maye ekosistemu bibliotek stvorenih spilnotoyu OsoblivostiElm mistit nevelikij ale viraznij nabir konstrukcij movi yakij vklyuchaye if virazi let virazi case virazi anonimni funkciyi ta interpolyaciyu spiskiv Nezminnist Vsi znachennya v Elm nezminni sho oznachaye sho znachennya ne mozhe modifikuvatis pislya togo yak vono bulo stvorenim Elm vikoristovuye shob realizuvati svoyi biblioteki Array Dict ta Set Statichna tipizaciya Elm statichno tipizovanij Kozhnomu viznachennyu v Elm mozhna dati anotaciyu tipu yaka opishe tochnij format znachennya Tipi vklyuchayut primitivni tipi taki yak chisla ta ryadki bazovi strukturi danih taki yak spiski kortezhi ta asociativni masivi en yaki dozvolyayut stvoryuvati novi tipi Elm takozh pidtrimuye povne vivedennya tipiv tomu kompilyator mozhe pereviriti sho programa tipo bezpechna ne chitayuchi zhodnih anotacij tipiv Sistema moduliv Elm maye sistemu moduliv yaka dozvolyaye koristuvacham rozbiti svij kod na menshi chastini yaki nazivayutsya modulyami Koristuvachi mozhut importuvati ta eksportuvati znachennya dozvolyayuchi prihovuvati detali realizaciyi shob inshim programistam ne bulo potrebi pro nih dumati Moduli skladayut osnovu sajtu biblioteki spilnoti Elm Elm Public Library Vzayemodiya z HTML CSS ta JavaScript Elm dlya spilkuvannya z JavaScript vikoristovuye abstrakciyu yaka nazivayetsya porti Elm takozh maye biblioteku yaka nazivayetsya elm html i dozvolyaye koristuvacham vikoristovuvati HTML v Elm ta stilizuvati jogo z CSS Dlya togo shob zmini v HTML buli efektivnimi vikoristovuyetsya ObmezhennyaNa vidminu vid Haskell Elm ne maye pidtrimki en i tomu ne mozhe nadavati zagalnu abstrakciyu dlya bagatoh tipovih operacij Napriklad nema zagalnoyi funkciyi map apply fold chi filter Zamist cogo taki imena mistyat svij modul yak prefiks yak v List map ta Dict map InstrumentiOnlajn redaktor i kompilyator na Onlajn REPL http elmrepl cuberoot in 16 zhovtnya 2016 u Wayback Machine Elm Platform 28 lyutogo 2017 u Wayback Machine dlya instalyaciyi osnovnih instrumentiv lokalno ta Core Libraries taPriklad kodu Ce odnoryadkovij komentar A ce bagatoryadkovij Vin mozhe roztyaguvatis na bagato ryadkiv Mozhna vkladati bagatoryadkovi komentari odin v odnogo Tut mi opisuyemo znachennya yake nazvemo greeting Jogo tip vivedetsya yak String greeting Privit svite Ale krashe dodavati anotaciyi tipiv do deklaracij verhnogo rivnya hello String hello Privit vam Funkciyi opisuyutsya analogichno do znachen argumenti jdut za imenem funkciyi add x y x y Znovu zh taki krashe dodavati anotaciyi tipiv hypotenuse Float gt Float gt Float hypotenuse a b sqrt a 2 b 2 If virazi vikoristovuyutsya shob vidgaluzhuvati znachennya absoluteValue Int gt Int absoluteValue number if number lt 0 then number else number Zapisi vikoristovuyutsya shob mistiti znachennya z imenovanimi polyami book title String author String pages Int book title Kobzar author Shevchenko pages 237 Mozhna stvoryuvati cilkom novi tipi vikoristovuyuchi klyuchove slovo type Nastupne znachennya zadaye binarne derevo type Tree a Empty Node a Tree a Tree a Taki tipi mozhna opracovuvati za dopomogoyu case viraziv depth Tree a gt Int depth tree case tree of Empty gt 0 Node value left right gt 1 max depth left depth right Znoski Arhiv originalu za 24 serpnya 2016 Procitovano 24 serpnya 2016 https github com elm compiler https github com evancz Elm blob master LICENSE PDF Arhiv originalu PDF za 20 listopada 2016 Procitovano 24 serpnya 2016 Arhiv originalu za 21 travnya 2017 Procitovano 24 serpnya 2016 Arhiv originalu za 24 travnya 2015 Procitovano 24 serpnya 2016 Arhiv originalu za 5 veresnya 2016 Procitovano 24 serpnya 2016 Elm compiler source code Arhiv originalu za 31 travnya 2015 Procitovano 24 serpnya 2016 Arhiv originalu za 13 bereznya 2016 Procitovano 24 serpnya 2016 Arhiv originalu za 3 travnya 2017 Procitovano 24 serpnya 2016 Arhiv originalu za 28 lyutogo 2017 Procitovano 24 serpnya 2016 Arhiv originalu za 11 lyutogo 2015 Procitovano 24 serpnya 2016 Arhiv originalu za 13 bereznya 2016 Procitovano 24 serpnya 2016 About Elm 30 serpnya 2017 u Wayback Machine Elm features Arhiv originalu za 11 lyutogo 2015 Procitovano 24 serpnya 2016 Elm Arhiv originalu za 9 travnya 2016 Procitovano 4 travnya 2016 Arhiv originalu za 11 lyutogo 2015 Procitovano 24 serpnya 2016 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 13 bereznya 2016 Procitovano 24 serpnya 2016 Arhiv originalu za 4 veresnya 2016 Procitovano 24 serpnya 2016 Arhiv originalu za 13 bereznya 2016 Procitovano 24 serpnya 2016 Higher Kinded types Not Expressible 396 github com elm lang elm compiler Procitovano 6 bereznya 2015 PosilannyaOficijnij sajt