ECMAScript
ECMAScript (o ES) è un linguaggio di programmazione standardizzato e mantenuto 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 client-side nel web development.
Storia
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]
Versioni
Ci sono otto edizioni dell'ECMA-262 pubblicate. La pubblicazione avviene, negli ultimi anni, con una cadenza annuale per cui le edizioni hanno, nel nome, anche il riferimento dell'anno.
Edizione | Data di pubblicazione | Cambiamenti rispetto all'edizione precedente | Editore |
---|---|---|---|
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 stringe, 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 e a scoraggiare i 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 (ES2015) | Giugno 2015[8] | 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 (ES2016) | Giugno 2016 | 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 (ES2017) | Giugno 2017 | L'ottova 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 promises, observable streams, SIMD, migliore metaprogrammazione con le classi, overload degli operatori e molto altro. |
Nel giugno 2004, Ecma International pubblicò ECMA-357 come standard 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, ritirato nel 2015.[10]
Quarta Edizione (abbandonata)
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:
- Classi
- Un sistema di modularizzazione
- Annotazione di tipi opzionale e tipizzazione statica, probabilmente usando un sistema di tipi strutturale
- Generatori e iteratori
- Destructuring assignment
- Tipi di dati algebrici
L'intento di queste features era in parte quello di poter essere dinamici nel migliorare le performance del linguaggio a discapito di alcune abilità del linguaggio stesso. Per esempio, Tamarin (la macchina virtuale per ActionScript sviluppata e rilasciata open source da Adobe) è dotata di compilazione JIT (just-in-time). Chiaramente oltre che l'introduzione di nuove features, nella quarta edizione ci fu la proposta di fixare diversi bug dell'edizione precedente.[12][13]
I lavori per quest'edizione iniziarono dopo aver completato le specifiche dell'edizione Compact Profile e continuarono approssimativamente per 18 mesi dove i passi avanti fatti erano molto pochi ed erano principalmente incentrati sul bilanciare quella che era la teoria di 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.
Quinta Edizione
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 6 (ES6) fu concluso nel giugno del 2015.[14][15] La Sesta edizione implementa significanti cambiamenti sintattici per scrivere applicazioni più complesse, incluse le classi e i moduli definendoli semanticamente come si farebbe in ECMAScript in strict mode. Altre novità comprendono gli iteratori, il nuovo ciclo for/of, generatori in stile Python e generator expressions, arrow functions, dati binari, vettori tipizzati, collezioni (mappe, set e weak maps), promises, numeri e migliorie matematiche, reflection, e proxies (metaprogrammazione per oggetti virtuali e wrappers).[16][17] La lista completa è piuttosto lunga.[18]
Il supporto da parte dei browser di ES6 rimane ancora incompleto per il momento.[19]
Implementazione
ECMAScript è supportato in molte applicazioni, soprattutto browser web, dove è implementato da JavaScript o, nel caso di Internet Explorer, JScript. Le implementazioni, la maggior parte delle volte, introducono delle estensioni del linguaggio o della libreria standard e delle relative API come quelle per gestire il Document Object Model (DOM) specificate dal World Wide Web Consortium (W3C). Ciò significa che le applicazioni scritte per una determinata implementazione possono risultare incompatibili con altre, a meno che non sono propriamente scritte per utilizzare soltanto una sottocategoria di funzionalità e di API.
Implementazioni | Applicazioni | Edizione ECMAScript |
---|---|---|
SpiderMonkey | Firefox, the Gecko layout engine, Adobe Acrobat[20] | ECMA-262, edizione 5.1, e caratteristiche dalla 6 e dalla imminente 7[21] |
V8 | Google Chrome, Node.js, Opera | ECMA-262, edizione 5.1, e caratteristiche dalla 6[22][23] |
JavaScriptCore (Nitro) | WebKit, Safari, Qt 5 | ECMA-262, edizione 5.1, e caratteristiche dalla 6[24] |
JScript 9.0 | Internet Explorer, the Trident layout engine | ECMA-262, edizione 5.1 |
Nashorn | Java | ECMA-262, edizione 5.1[25] |
Rhino | Java Platform, Standard Edition | ECMA-262, edizione 3 |
Carakan (deprecated) | Opera 12 | ECMA-262, edizione 5[26][27] |
RemObjects Script for .NET | ECMA-262, edizione 5 | |
KJS | KHTML | ECMA-262, edizione 5.1[28] e caratteristiche dalla 6[29] |
Ejscript | Appweb Web Server, Samba 4 | ECMA-262, edizione 3[30] |
JScript .NET | Microsoft .NET Framework | ECMA-262, edizione 3[31] |
ActionScript | Adobe Flash, Adobe Flex, Adobe AIR | ECMA-262, edizione 4[32][33] |
Adobe ExtendScript | Adobe Creative Suite products: InDesign, Illustrator, Photoshop, | ECMA-262, edizione 3 [senza fonte] |
DMDScript | ECMA-262 | |
CriScript | ECMA-262, edizione 3 | |
InScript | iCab | ECMA-262, edizione 3 |
Max/MSP engine | Max/MSP | ECMA-262, edizione 3 |
Galio engine | Galio | ECMA-262, edizione 3 |
QtScript (deprecated) | KDE SC 4 | ECMA-262, edizione 3 |
Caja | ECMA-262, edizione 3 | |
Chakra | Microsoft Edge | ECMA-262, edizione 5.1, e caratteristiche dalla 6[34] |
- ^ Paul Krill, JavaScript creator ponders past, future | Developer World, su infoworld.com, InfoWorld, 23 giugno 2008. URL consultato il 31 ottobre 2013.
- ^ Press Release, su wp.netscape.com, Web.archive.org. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 16 settembre 2007).
- ^ Brendan's Roadmap Updates: Popularity, su weblogs.mozillazine.org (archiviato dall'url originale il 17 maggio 2008).
- ^ Press Release, su cgi.netscape.com, Web.archive.org. URL consultato il 31 ottobre 2013 (archiviato dall'url originale il 3 dicembre 1998).
- ^ Will there be a suggested file suffix for es4?, su mail.mozilla.org, 3 ottobre 2006. URL consultato il 31 ottobre 2013.
- ^ JScript VS JavaScript, su javascript.about.com, About.com, 25 novembre 2015.
- ^ Changes to JavaScript, Part 1: EcmaScript 5, su youtube.com, YouTube, 18 maggio 2009. URL consultato il 31 ottobre 2013.
- ^ http://www.infoworld.com/article/2937716/javascript/its-official-ecmascript-6-is-approved.html
- ^ http://www.ecma-international.org/ecma-262/6.0/
- ^ 2015-03-24 Meeting Notes. ESDiscuss. Also see Ecma withdrawn Standards. ECMA.
- ^ Proposed ECMAScript 4th Edition – Language Overview (PDF), su ecmascript.org, 23 ottobre 2007.
- ^ John Resig, John Resig – Bug Fixes in JavaScript 2, su ejohn.org. URL consultato il 31 ottobre 2013.
- ^ Compatibility Between ES3 and Proposed ES4 (PDF), su ecmascript.org. URL consultato il 31 ottobre 2013.
- ^ [1]. EMCAScript. Retrieved on 2015-06-19.
- ^ Standard ECMA - 262 6th Edition / June 2015, ECMAScript ® 2015 Language Specification
- ^ http://www.wintellect.com/devcenter/nstieglitz/5-great-features-in-es6-harmony
- ^ https://www.smashingmagazine.com/2015/10/es6-whats-new-next-version-javascript/
- ^ http://es6-features.org/#Constants
- ^ https://kangax.github.io/compat-table/es6/
- ^ Adobe Acrobat 9.0 uses the SpiderMonkey 1.7 engine: JavaScript for Acrobat API Reference
- ^ SpiderMonkey already supports a wide range of upcoming features: ECMAScript 6 support in Mozilla and ECMAScript 7 support in Mozilla
- ^ V8, the JavaScript engine created by Google and used in Chrome, implements ECMAScript as specified in ECMA-262, 5th edition: V8 JavaScript Engine.
- ^ Chrome also implements non-ECMAScript-standard extensions to the language that are present in WebKit, in order to maintain compatibility with JavaScriptCore : V8 JavaScript Engine issue tracker.
- ^ ECMAScript 6 Enhancements
- ^ Full ECMAScript 5.1 support in Opera 11.51+[2].
- ^ Full ECMAScript 5.1 support in Opera 11.51+[3].
- ^ Opera's implementation includes some JavaScript and JScript extensions: ECMAScript support in Opera Presto 2.3
- ^ bUscher » Blog Archive » kjs finally under 1000 fails!, su buschinski.de.
- ^ Commits marked with ES6 are implementations of ES6 features: http://quickgit.kde.org/?p=kjs.git&a=shortlog
- ^ This implementation asserts to support some extensions proposed in drafts of ECMAScript edition 4 (and now ECMAScript Harmony): Ejscript Overview.
- ^ Microsoft asserts that JScript 8.0 supports "almost all of the features of the ECMAScript Edition 3 Language Specification", but does not list the unsupported features.
- ^ Completely conforming implementation of the ECMAScript fourth edition draft specification: ActionScript
- ^ In addition to supporting ECMA-262 edition 3, ActionScript 3 also included support for extensions proposed in drafts of ECMAScript edition 4: The Kiwi Project: AS3 language 101 for C/C++ coders.
- ^ Microsoft states that Edge "supports most ES2015 features," supporting 81% of the specification as of May 2015 and 67% as of September 2015. [4][5]
Vedi altro
- ActionScript
- Comparison of layout engines (ECMAScript)
- Dart (linguaggio di programmazione)
- Document Object Model (DOM)
- ECMAScript for XML (E4X)
- JavaScript
- JScript
- List of ECMAScript engines
- Qt Meta (or Modeling) Language (QML)
- Server-side JavaScript
- TypeScript
Collegamenti esterni
- (EN) Sito ufficiale - ECMAScript, su ecmascript.org.