Elm (limbaj de programare)
Ulm limbaj de programare | |
---|---|
Autor | Evan Czaplicki |
Data de origine | 2012 |
Ultima versiune | 0.19.1 (octombrie 2019) |
Utilizare | generare dinamică de pagini web |
Paradigme | programare funcțională |
Tastare | puternic, static, dedus |
Extensii comune | .ulm |
Influențată de | Haskell , Standard ML , OCaml , F # |
Implementare referință | |
Limbă | Engleză |
Licență | Permisiv ( BSD revizuit ) [1] |
Site-ul web | elm-lang.org/ |
Elm este un limbaj de programare specific domeniului pentru crearea deschisă a interfețelor grafice de utilizator bazate pe browserele web . Elm este pur funcțional și este dezvoltat cu prioritate în ceea ce privește gradul de utilizare , performanță și robustețe . Se pretinde că evită practic orice excepție în timpul rulării [2] , datorită verificărilor statice ale compilatorului Elm.
Istorie
Elm a fost proiectat inițial de Evan Czaplicki ca proiect de teză în 2012. [3] Prima versiune a lui Elm a fost însoțită de multe exemple și un editor online care a facilitat testarea limbii într-un browser web. [4] Evan Czaplicki este s-a alăturat Prezi în 2013 pentru a lucra la Elm, [5] și în 2016 s-a mutat la NoRedInk ca inginer Open Source, creând și Elm Software Foundation. [6]
Implementarea inițială a compilatorului Elm generează HTML, CSS și JavaScript. [7] Setul de instrumente de bază a continuat să se extindă și include acum un interpret interactiv , [8] un manager de pachete, [9] un depanator de călătorii în timp, [10] și instalatori Mac și Windows. [11] Mai mult, Elm are un ecosistem de biblioteci create de comunitatea de utilizatori. [12]
Caracteristici
Elm are un set mic, dar expresiv, de constructe lingvistice, incluzând expresii „if”, expresii „let”, expresii „case”, funcții anonime și tweens. [13] [14] Caracteristicile cheie includ imuabilitatea, tastarea statică și interoperabilitatea cu HTML, CSS și JavaScript.
Imuabilitate
Toate valorile din Elm sunt imuabile, adică nicio valoare nu poate fi modificată după ce a fost creată. Elm folosește structuri de date persistente pentru a-și implementa bibliotecile Array
, Dict
și Set
. [15]
Tastarea statică
Ulmul este tastat static. Fiecare definiție din Elm poate primi o adnotare de tip care descrie forma exactă a valorii. Printre tipuri se numără:
- tipuri primitive precum numere întregi și șiruri
- structuri de date de bază, cum ar fi liste, tupluri și înregistrări extensibile
- tipuri personalizate, numite „uniuni etichetate”, care vă permit să creați tipuri complet noi [16]
Elm acceptă, de asemenea, inferența de tip complet, astfel încât compilatorul să poată verifica dacă un program este sigur de tip chiar și fără adnotări de tip.
Sistem de module
Elm are un sistem de module care permite programatorilor să descompună codul lor în părți mai mici, numite „module”. Programatorii pot importa și exporta simboluri, făcând posibilă ascunderea detaliilor de implementare care nu sunt necesare pentru alte module. Modulele stau la baza site-ului Elm Community Library , Elm Public Library .
Interoperabilitate cu HTML, CSS și JavaScript
Elm folosește o abstracție numită „uși” pentru a comunica cu JavaScript . [17] Permite valorilor să curgă în și din programele Elm, făcând posibilă comunicarea între Elm și JavaScript.
Elm are o bibliotecă numită „elm-html”, pe care programatorii o pot folosi pentru a specifica HTML și CSS din cadrul Elm. [18] Folosiți o abordare DOM virtuală pentru a face actualizările eficiente. [19]
Limitări
Spre deosebire de Haskell, Elm nu acceptă tipuri de nivel superior și, prin urmare, nu poate oferi abstracții generice pentru multe operații comune. [20] De exemplu, nu există filter
map
generică, apply
, fold
și nici filter
. În schimb, aceste nume folosesc prefixe din numele modulului în care sunt definite, ca pentru List.map
și Dict.map
.
Instrumente
- Editor online Elm-lang.org/try pentru experimente ușoare
- Platforma Elm pentru instalarea locală a instrumentelor de bază
- Depanator care călătorește în timp
- Resurse de învățare și exemple
- Bibliotecile de bază și bibliotecile comunitare
Cod simplu
- Acesta este un comentariu pe o singură linie
{- Acesta este un comentariu pe mai multe linii.
Poate cuprinde mai multe linii.
-}
{- Comentariile pe mai multe linii pot fi {- imbricate -} -}
- Aici definim o valoare numită „salutări”. Tipul este dedus ca fiind Șir.
salutări =
"Salut Lume!"
- Este mai bine să adăugați adnotări de tip la declarațiile de nivel superior.
salut : String
salut =
"Buna."
- Funcțiile sunt declarate în același mod, cu argumente după numele funcției.
adăugați x y =
x + y
- Din nou, este mai bine să adăugați adnotări de tip.
ipotenuză : Float -> Float -> Float
hipotenuză a b =
sqrt ( a ^ 2 + b ^ 2 )
- Expresiile `if` sunt utilizate pentru a ramifica pe baza valorilor
Valoare absolută : Int -> Int
valoare Număr absolut =
if number < 0 then - number else number
- Înregistrările sunt utilizate pentru a păstra valori în câmpuri denumite
carte : { title : String , autor : String , pagini : Int }
carte =
{ title = "Steppenwolf"
, autor = "Hesse"
, pagini = 237
}
- Putem crea tipuri complet noi folosind cuvântul cheie `type`.
- Următoarea valoare reprezintă un arbore binar.
tastați Arborele a
= Gol
| Nodul a ( Arborele a ) ( Arborele a )
- Puteți inspecta aceste tipuri folosind expresii `case`.
adâncime : Ax a -> Int
adâncimea arborelui =
case de copaci din
Gol -> 0
Nodul valorii stânga dreapta ->
1 + max ( adâncimea stângă ) ( adâncimea dreaptă )
Notă
- ^ https://github.com/evancz/Elm/blob/master/LICENSE
- ^ Pagina principală Elm , la elm-lang.org .
- ^ Elm: FRP concurent pentru GUI funcționale
- ^ Elm's Online Editor , la elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 21 mai 2017) .
- ^ Elm se alătură Prezi , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 24 mai 2015) .
- ^ Noi aventuri pentru Elm
- ^ Cod sursă al compilatorului Elm
- ^ Anunț Elm REPL , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 31 mai 2015) .
- ^ Anunț Elm Package Manager , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
- ^ Elm's Time-Traveling Debugger , la debug.elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 3 mai 2017) .
- ^ Platforma Elm
- ^ Elm Public Libraries Arhivat 11 februarie 2015 la Internet Archive .
- ^ Sintaxa ulmului , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
- ^ Despre Elm Arhivat 30 august 2017 la Internet Archive . Elm caracteristici
- ^ Elm Standard Libraries
- ^ Modelează Problema , pe Elm . Adus la 4 mai 2016 (Arhivat din original la 9 mai 2016) .
- ^ Porturi , la elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 13 martie 2016) .
- ^ documentație elm-html
- ^ Blazing Fast Html , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
- ^ Tipuri superioare Nu sunt exprimabile? # 396 , la github.com/elm-lang/elm-compiler . Adus la 6 martie 2015 .
linkuri externe
- ( RO ) Site oficial , pe elm-lang.org .
- Depozit sursă Elm , la github.com .