| }}   '''Elm''' è un [[linguaggio di programmazione]] ___domain-specific per creare dichiaratamente [[GUI|interfacce-utente grafiche]] basate su [[browser web]]. Elm è puramente [[funzionale]], ed è sviluppato dando priorità all'[[usabilità]], alle prestazioni, e alla [[Robustezza (informatica)|robustezza]]. Sostiene di evitare praticamente qualunque eccezione in fase di esecuzione <ref>{{Cita web|url=httphttps://elm-lang.org/|titolo=Elm home page}}</ref>, grazie alle verifiche statiche del compilatore Elm.   == Storia ==   Elm è stato progettato inizialmente da Evan Czaplicki come progetto di tesi nel 2012.<ref>[httphttps://elm-lang.org/assets/papers/concurrent-frp.pdf Elm: Concurrent FRP for Functional GUIs]</ref> I primo rilascio di Elm era accompagnato da molti esempi e da un editor online che rendeva facile provare il linguaggio in un browser Web.<ref>{{Cita web |url=httphttps://elm-lang.org/try# |titolo=Elm's Online Editor |accesso=4 gennaio 2017 |urlarchivio=https://web.archive.org/web/20170521144831/http://elm-lang.org/try# |dataarchivio=21 maggio 2017 |urlmorto=sì }}</ref> Evan Czaplicki è entrato a far parte di [[Prezi]] nel 2013 per lavorare su Elm,<ref>[httphttps://elm-lang.org/blog/announce/Elm-and-Prezi.elm Elm joins Prezi]</ref> e nel 2016 si è spostato in [[NoRedInk]] come ingegnere Open Source, dando inoltre vita alla Elm Software Foundation.<ref>[httphttps://elm-lang.org/blog/new-adventures-for-elm New Adventures for Elm]</ref>   L'implementazione iniziale del compilatore Elm genera codice HTML, CSS, e JavaScript.<ref>[https://github.com/elm-lang/Elm Elm compiler source code]</ref> L'insieme di strumenti di base si è continuato a espandere, e adesso comprende un [[interprete interattivo]],<ref>[httphttps://elm-lang.org/blog/announce/Repl.elm Elm REPL announcement]</ref> un gestore di pacchetti,<ref>[httphttps://elm-lang.org/blog/announce/PackageManager.elm Elm Package Manager announcement]</ref> un debugger che consente viaggi nel tempo,<ref>{{Cita web |url=http://debug.elm-lang.org/# |titolo=Elm's Time-Traveling Debugger |accesso=4 gennaio 2017 |urlarchivio=https://web.archive.org/web/20170503192633/http://debug.elm-lang.org/# |dataarchivio=3 maggio 2017 |urlmorto=sì }}</ref> e degli installatori per Mac e Windows.<ref>[https://github.com/elm-lang/elm-platform Elm Platform]</ref> Inoltre, Elm ha un ecosistema di librerie create dalla comunità di utenti.<ref>[httphttps://package.elm-lang.org/packages/ Elm Public Libraries] {{webarchive|url=https://web.archive.org/web/20150211183935/http://package.elm-lang.org/packages/ |data=11 febbraio 2015 }}</ref>   == Caratteristiche ==   Elm ha un insieme piccolo ma espressivo di costrutti linguistici, tra cui espressioni `if`, espressioni `let`, espressioni `case`, funzioni anonime, e interpolazioni di lista.<ref name="syntax">[httphttps://elm-lang.org/learn/Syntax.elm The Syntax of Elm]</ref><ref>[httphttps://elm-lang.org/About.elm About Elm] {{Webarchive|url=https://web.archive.org/web/20170830200520/http://elm-lang.org/About.elm# |date=30 agosto 2017 }} Elm features</ref> Le caratteristiche chiave comprendono l'immutabilità, la tipizzazione statica, e l'interoperabilità con HTML, CSS, e JavaScript.   === Immutabilità ===   Tutti i valori in Elm sono immutabili, cioè nessun valore può essere modificato dopo che è stato creato. Elm usa strutture dati persistenti per implementare le sue librerie <code>Array</code>, <code>Dict</code>, e <code>Set</code>.<ref>[httphttps://package.elm-lang.org/packages/elm-lang/core/latest/ Elm Standard Libraries]</ref>   === Tipizzazione statica === * tipi primitivi come interi e stringhe * strutture dati di base come liste, ennuple, e record estendibili * tipi personalizzati, chiamati `unioni taggate` che consentono di costruire tipi interamente nuovi <ref>{{Cita web|titolo=Model The Problem|url=httphttps://elm-lang.org/guide/model-the-problem|sito=Elm|accesso=4 maggio 2016|cid=tagged-unions}}</ref>   Elm supporta anche la completa inferenza di tipo, così che il compilatore possa verificare che un programma sia type-safe anche senza annotazioni di tipo. === Interoperabilità con HTML, CSS, e JavaScript ===   Elm usa un'astrazione chiamata "porte" per comunicare con [[JavaScript]].<ref>{{Cita web |url=httphttps://elm-lang.org/learn/Ports.elm |titolo=Ports |accesso=4 gennaio 2017 |urlarchivio=https://web.archive.org/web/20160313045712/http://elm-lang.org/learn/ports.elm |dataarchivio=13 marzo 2016 |urlmorto=sì }}</ref> Consente ai valori di fluire dentro e fuori da programmi Elm, rendendo possibile comunicare fra Elm e JavaScript.   Elm ha una libreria chiamata "elm-html", che i programmatori possono usare per specificare codice HTML e CSS dall'interno di Elm.<ref>[httphttps://package.elm-lang.org/packages/evancz/elm-html/latest/ elm-html documentation]</ref> Usa un approccio al [[DOM virtuale]] per rendere efficienti gli aggiornamenti.<ref>[httphttps://elm-lang.org/blog/Blazing-Fast-Html.elm Blazing Fast Html]</ref>   == Limitazioni == * [https://github.com/elm-lang/elm-platform Piattaforma Elm] per installare localmente gli strumenti di base * [https://web.archive.org/web/20170503192633/http://debug.elm-lang.org/ Debugger che viaggia nel tempo] * [httphttps://elm-lang.org/Learn.elm Risorse di apprendimento] e [httphttps://elm-lang.org/Examples.elm esempi] * [httphttps://package.elm-lang.org/packages/elm-lang/core/latest/ Librerie di base] e [https://web.archive.org/web/20150211183935/http://package.elm-lang.org/packages/ librerie della comunità]   == Codice di esempio == |