ECMAScript

linguaggio di programmazione

ECMAScript (o ES) è la specifica tecnica di un linguaggio di scripting, standardizzata e mantenuta da ECMA International nell'ECMA-262 ed ISO/IEC 16262. Le implementazioni più conosciute di questo linguaggio (spesso definite come dialetti) sono JavaScript, JScript e ActionScript che sono entrati largamente in uso, inizialmente, come linguaggi lato client nello sviluppo web.

StoriaModifica

Le specifiche definite da ECMAScript sono delle specifiche standardizzate di un linguaggio sviluppato da Brendan Eich di Netscape. Inizialmente era chiamato "Mocha", più tardi LiveScript e solo in ultimo JavaScript.[1] Nel dicembre del 1995, la Sun Microsystems insieme a Netscape annunciarono JavaScript attraverso un comunicato stampa.[2] Nel marzo del 1996, Netscape Navigator 2.0 veniva rilasciato diventando il primo browser a supportare JavaScript.

Grazie all'enorme successo di JavaScript come linguaggio client-side, Microsoft sviluppò una versione differente ma compatibile del linguaggio chiamandolo JScript per evitare problemi di copyright. JScript implementava nuovi metodi per il calcolo della data per risolvere in parte i problemi dovuti all'anno 2000 che affliggevano JavaScript in quanto la classe Date era basata sull'omonima classe di Java.[3] JScript fu incluso quindi in Internet Explorer 3.0, rilasciato nell'Agosto del 1996.

Netscape consegnò JavaScript ad Ecma International per il lavoro di standardizzazione e per fissare le specifiche. Così iniziò ECMA-262 nel novembre del 1996.[4] Questa prima edizione fu adottata dall'Ecma General Assembly nel giugno del 1997 e diverse edizioni della standardizzazione sono state pubblicate da allora. Il nome "ECMAScript" fu un compromesso tra le organizzazioni coinvolte nella standardizzazione del linguaggio, specialmente Netscape e Microsoft le cui dispute dominavano la scena durante i primi tempi in cui questi standard nascevano. Eich difatti commentò che "ECMAScript è sempre stato un nome contrattato ma mai voluto che suonava molto come una malattia della pelle."[5]

Mentre sia JavaScript che JScript mirano ad essere compatibili con le specifiche ECMAScript, provvedono a fornire allo stesso tempo funzioni aggiuntive non descritte dallo standard ECMA.[6]

VersioniModifica

Sono state pubblicate finora 10 edizione dell'ECMA-262. Dal 2015 la pubblicazione avviene con una cadenza annuale, per questo le edizioni hanno nel nome anche il riferimento all'anno di rilascio.

Edizione Data di pubblicazione Nome Cambiamenti rispetto all'edizione precedente Redattore
1 Giugno 1997 Prima edizione Guy L. Steele, Jr.
2 Giugno 1998 Cambi editoriali per mantenere le specifiche concordanti con l'ISO/IEC 16262 Mike Cowlishaw
3 Dicembre 1999 Aggiunte le espressioni regolari, miglior gestione delle stringhe, nuovi comandi di controllo, gestione del try/catch, formattazione per output numerici ed altri miglioramenti. Mike Cowlishaw
4 Abbandonato La quarta edizione è stata abbandonata per delle diversità di idee a riguardo della complessità del linguaggio. Molte delle feature che furono proposte per la quarta versione sono state del tutto scartate mentre altre sono state riproposte nella versione 6.
5 Dicembre 2009 Aggiunge lo "strict mode" inteso a provvedere un più completo controllo di errori ed a scoraggiare gli sviluppatori ad incappare in errori. Chiarifica molte ambiguità introdotte nella terza versione. Aggiunge anche alcune feature come i getters ed i setters, la libreria per il supporto a JSON e la reflection sulle proprietà degli oggetti.[7] Pratap Lakshman, Allen Wirfs-Brock
5.1 Giugno 2011 Questa edizione è stata creata per allineare la precedente allo standard internazionale ISO/IEC 16262:2011. Pratap Lakshman, Allen Wirfs-Brock
6 Giugno 2015[8] ECMAScript 2015 (ES2015) La sesta edizione, conosciuta come ECMAScript 2015[9] ma anche come "Harmony", apporta modifiche sintattiche significative che aprono la porta ad applicazioni più complesse, includendo classi e moduli definendoli semanticamente come lo "strict mode" in ECMAScript 5. Altre nuove features sono diversi iteratori, for/of loop, Python-style generators e generator expression, arrow functions, binary data, typed arrays, collections (maps, sets e weak maps), promises, miglioramenti delle funzioni matematiche, reflection e proxies (metaprogrammazione per virtual objects). Allen Wirfs-Brock
7 Giugno 2016 ECMAScript 2016 (ES2016) La settima edizione, nota anche con il nome di ECMAScript 2016, è di fatto un assestamento dei cambiamenti introdotti nella precedente edizione. Introduce comunque due novità: l'operatore esponente (**) e Array.prototype.includes. Brian Terlson
8 Giugno 2017 ECMAScript 2017 (ES2017) vedi Ottava Edizione - ECMAScript 2017 Brian Terlson
9 Giugno 2018 ECMAScript 2018 (ES2018) vedi Nona Edizione - ECMAScript 2018 Brian Terlson
10 Giugno 2019 ECMAScript 2019 (ES2019) vedi Decima Edizione - ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband

Nel giugno 2004, Ecma International pubblicò lo standard ECMA-357, definendo un'estensione di ECMAScript, conosciuta come ECMAScript per XML (E4X). Ecma definì anche un "Compact Profile" per ECMAScript (conosciuto come ES-CP o ECMA 327) ideato per dispositivi dalle risorse limitate, che venne ritirato nel 2015.[10]

Quarta Edizione (abbandonata)Modifica

La quarta edizione proposta di ECMA-262 (ECMAScript 4 o ES4) sarebbe stata la prima major update di ECMAScript dalla terza edizione pubblicata nel 1999. L'uscita delle specifiche (insieme alle referenze per l'implementazione) era inizialmente prevista per ottobre 2009 ed infatti un'introduzione al linguaggio fu rilasciata dal gruppo di lavoro il 23 ottobre 2007.[11]

Ad agosto 2008, fu presa la decisione di ridimensionare la quarta edizione di ECMAScript e accorparla al progetto ECMAScript Harmony. Le novità in discussione per Harmony erano:

L'intento di queste caratteristiche era in parte quello di facilitare lo sviluppo di software complessi con grandi gruppi di lavoro alle spalle e di permettere di eliminare alcune caratteristiche dinamiche del linguaggio per migliorare le prestazioni. Per esempio, Tamarin (la macchina virtuale per ActionScript sviluppata e rilasciata open source da Adobe) è dotata di compilazione JIT (just-in-time).

Oltre all'introduzione di nuove features, nella quarta edizione fu proposto di correggere diversi bug dell'edizione precedente[12][13]. Queste correzioni trovarono quindi posto nella quinta edizione

I lavori per quest'edizione iniziarono dopo aver completato le specifiche dell'edizione Compact Profile e continuarono approssimativamente per 18 mesi in cui i progressi erano lenti nel coniugare le idee di Netscape su JavaScript 2 con l'implementazione pratica di JScript di Microsoft. Ci furono anche diversi dibattiti avvenuti pubblicamente su dei blog tra Eich, che sarebbe diventato più tardi il CTO della Mozilla Foundation e Chris Wilson dipendente Microsoft, responsabile per l'architettura di Internet Explorer. Wilson asseriva che i cambiamenti proposti per il nuovo standard che non erano completamente retrocompatibili con le versioni precedenti del linguaggio avrebbero "rotto il web"[14] e che chi si era opposto era stato messo in secondo piano[15]. Eich rispose dando del bugiardo al suo detrattore e lo sfidò le critiche chiedendo pubblicamente di dimostrargli specifici esempi di incompatibilità[16].

Quinta EdizioneModifica

Yahoo, Microsoft, Google e altri dissidenti della quarta edizione di ECMAScript formarono il loro "sottocomitato" per progettare un update di ECMAScript 3 un po' meno ambizioso, chiamandolo provvisoriamente ECMAScript 3.1. Questa edizione si sarebbe concentrata sulla sicurezza e sugli aggiornamenti delle librerie con un punto di riguardo sulla compatibilità.

Dopo il dibattito sopra descritto, entrambi i team di ES 3.1 ed ES 4 si accordarono con un compromesso: si sarebbe lavorato sulle due edizioni in parallelo e con i due team coordinati per essere sicuri che ES 3.1 sarebbe rimasto strettamente un sottoinsieme di ES 4 (sia nella semantica che nella sintassi).

Sesta Edizione - ECMAScript 2015Modifica

La sesta edizione, conosciuta inizialmente come ECMAScript (ES6) ma rinominata successivamente ECMAScript 2015 fu pronta nel 2015. Questa edizione portò importanti ampliamenti alla sintassi, pensati per rendere più agevole la scrittura di applicazioni complesse, tra cui le nuove dichiarazioni delle classi (class Foo { ... }) e i moduli attraverso le istruzioni import e export. Alcune altre novità sintattiche furono il nuovo iteratore for ... of, le funzioni a freccia (() => {...}), i generatori in stile Python, Le parole chiave let per dichiarare le variabili con visibilità locale e const dichiarare le costanti, dati binari, array tipizzati, nuove collections (maps, sets e WeakMap), promises, miglioramenti a numeri e matematica, reflection, proxy e template string.[17][18]

Settima Edizione - ECMAScript 2016Modifica

La settima edizione, ufficialmente ECMAScript 2016, fu rilasciata nel Giugno del 2016[19]. Le maggiori novità includono il block-scoping per variabili e funzioni, gli assegnamenti destrutturati delle variabili, proper tail calls, operatore esponente (**) e le keyword await, async per la programmazione asincrona. [19][20]

Ottava Edizione - ECMAScript 2017Modifica

L'ottava edizione, nota ufficialmente con il nome di ECMAScript 2017, è stata completata e pubblicata nel Giugno del 2017. Le nuove funzionalità proposte includono concurrency ed atomics, zero copy binary transfer, altri miglioramenti nell'ambito matematico, integrazione sintattica con le promise, observable streams, SIMD, migliore metaprogrammazione con le classi, overload degli operatori e molto altro.

Nona Edizione - ECMAScript 2018Modifica

La nona edizione, nota come ECMAScript 2018 è stata pubblicata nel giugno del 2018. Vengono introdotte le iterazioni asincrone (for await(i of var)), le Promise ora hanno i metodi then(), catch() (se vanno in errore) e finally(), la spread syntax per i parametri delle funzioni (function pippo(foo, ...bar)). Corpose novità riguardano l'uso delle regular expression[21].

Decima Edizione - ECMAScript 2019Modifica

La decima edizione, chiamata ECMAScript 2019 è stata rilasciata nel giugno 2019. Le maggiori novità riguardano i metodi Array.flatMap()[22] e Object.fromEntries()[23][24].

ConformitàModifica

Nel 2010, ECMA International iniziò lo sviluppo un test per verificare la conformità allo standard ECMA 262 ECMAScript. Chiamato Test262 viene utilizzato per capire quanto le varie implementazioni di JavaScript siano conformi alle specifiche. Il test contiene migliaia di verifiche individuali, una per ogni requisito dei vari standard. Lo sviluppo di Test262 è affidato all'ECMA Technical Committee 39 (TC39). Google e Microsoft hanno contribuito in modo importante allo sviluppo: entrambe hanno sviluppato migliaia dei test eseguiti dalla suite. Test262 consiste in 38014 test. Il dato è aggiornato a Gennaio 2020.[25]. Le tabelle sottostanti mostrano la conformità degli engine JavaScript nelle applicazioni più diffuse.

Browser webModifica

Engine Browser Conformità
ES5[26] ES6[27] 2016+[28][29]
V8 Microsoft Edge 80 100% 98% 100%
SpiderMonkey Firefox 73 100% 98% 82%
V8 Google Chrome 80, Opera 67 100% 98% 100%
JavaScriptCore (Nitro) Safari 13 99% 99% 80%

Implementazioni lato serverModifica

Engine Server Conformità
ES5[26] ES6[27] 2016+[28][29]
V8 Node.js 13.2 100% 98% 92%

NoteModifica

  1. ^ Paul Krill, JavaScript creator ponders past, future | Developer World, InfoWorld, 23 giugno 2008. URL consultato il 31 ottobre 2013.
  2. ^ Press Release, Web.archive.org. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 16 settembre 2007).
  3. ^ Brendan's Roadmap Updates: Popularity, su weblogs.mozillazine.org (archiviato dall'url originale il 17 maggio 2008).
  4. ^ Press Release, Web.archive.org. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 3 dicembre 1998).
  5. ^ Will there be a suggested file suffix for es4?, Mail.mozilla.org, 3 ottobre 2006. URL consultato il 31 ottobre 2013.
  6. ^ JScript VS JavaScript, About.com, 25 novembre 2015.
  7. ^ Changes to JavaScript, Part 1: EcmaScript 5, YouTube, 18 maggio 2009. URL consultato il 31 ottobre 2013.
  8. ^ It's official: ECMAScript 6 is approved | InfoWorld
  9. ^ ECMAScript 2015 Language Specification – ECMA-262 6th Edition
  10. ^ 2015-03-24 Meeting Notes. ESDiscuss. Also see Ecma withdrawn Standards. ECMA.
  11. ^ Proposed ECMAScript 4th Edition – Language Overview (PDF), su ecmascript.org, 23 ottobre 2007 (archiviato dall'url originale il 13 luglio 2010).
  12. ^ John Resig, John Resig – Bug Fixes in JavaScript 2, Ejohn.org. URL consultato il 31 ottobre 2013.
  13. ^ Compatibility Between ES3 and Proposed ES4 (PDF), Ecmascript.org. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 24 luglio 2014).
  14. ^ ECMAScript 3 and Beyond – IEBlog – Site Home – MSDN Blogs, Blogs.msdn.com, 30 ottobre 2007. URL consultato il 31 ottobre 2013.
  15. ^ What I think about ES4. - Albatross! - Site Home – MSDN Blogs, Blogs.msdn.com, 31 ottobre 2007. URL consultato il 31 ottobre 2013.
  16. ^ Open letter to Chris Wilson, Brendan Eich, 31 ottobre 2007. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 16 settembre 2011).
  17. ^ (EN) 5 Great Features in EcmaScript 6 (ES6 Harmony) - Wintellect, in Wintellect, 24 marzo 2014. URL consultato il 19 marzo 2018 (archiviato dall'url originale il 22 luglio 2017).
  18. ^ (EN) ECMAScript 6 (ES6): What's New In The Next Version Of JavaScript, in Smashing Magazine, 28 ottobre 2015. URL consultato il 19 marzo 2018.
  19. ^ a b ECMAScript 2016 Language Specification, Ecma International, June 2016.
  20. ^ Michael Saboff, ECMAScript 6 Proper Tail Calls in WebKit, su WebKit, 23 maggio 2016. URL consultato l'11 aprile 2019.
  21. ^ What's New in ES2018 — SitePoint
  22. ^ Functional pattern: flatMap
  23. ^ ES proposal: `Object.fromEntries()`
  24. ^ ECMAScript® 2019 Language Specification
  25. ^ tc39/test262, su GitHub, 24 gennaio 2020. URL consultato il 29 gennaio 2020.
  26. ^ a b (EN) ECMAScript 5 compatibility table, su kangax.github.io. URL consultato l'8 novembre 2018.
  27. ^ a b (EN) ECMAScript 6 compatibility table, su kangax.github.io. URL consultato l'8 novembre 2018.
  28. ^ a b (EN) ECMAScript 2016+ compatibility table, su kangax.github.io. URL consultato l'8 novembre 2018.
  29. ^ a b Punteggio che racchiude tutti i test di conformità dalla ES2016 alla ES2019

Vedi altroModifica

Collegamenti esterniModifica

  • (EN) Sito ufficiale - ECMAScript, su ecmascript.org. URL consultato il 1º marzo 2016 (archiviato dall'url originale il 18 maggio 2016).
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica