Elm (limbaj de programare)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Ulm
limbaj de programare
Elm logo.svg
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

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ă

  1. ^ https://github.com/evancz/Elm/blob/master/LICENSE
  2. ^ Pagina principală Elm , la elm-lang.org .
  3. ^ Elm: FRP concurent pentru GUI funcționale
  4. ^ Elm's Online Editor , la elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 21 mai 2017) .
  5. ^ Elm se alătură Prezi , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 24 mai 2015) .
  6. ^ Noi aventuri pentru Elm
  7. ^ Cod sursă al compilatorului Elm
  8. ^ Anunț Elm REPL , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 31 mai 2015) .
  9. ^ Anunț Elm Package Manager , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
  10. ^ Elm's Time-Traveling Debugger , la debug.elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 3 mai 2017) .
  11. ^ Platforma Elm
  12. ^ Elm Public Libraries Arhivat 11 februarie 2015 la Internet Archive .
  13. ^ Sintaxa ulmului , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
  14. ^ Despre Elm Arhivat 30 august 2017 la Internet Archive . Elm caracteristici
  15. ^ Elm Standard Libraries
  16. ^ Modelează Problema , pe Elm . Adus la 4 mai 2016 (Arhivat din original la 9 mai 2016) .
  17. ^ Porturi , la elm-lang.org . Adus la 4 ianuarie 2017 (arhivat din original la 13 martie 2016) .
  18. ^ documentație elm-html
  19. ^ Blazing Fast Html , la elm-lang.org . Adus la 1 mai 2019 (arhivat din original la 13 martie 2016) .
  20. ^ Tipuri superioare Nu sunt exprimabile? # 396 , la github.com/elm-lang/elm-compiler . Adus la 6 martie 2015 .

linkuri externe