ECMAScript: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Creata pagina su ECMAScript |
||
Riga 1:
'''ECMAScript''' (o '''ES''') è un linguaggio di programmazione standardizzato e mantenuto da [[ECMA International|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.<ref>{{cite web|last = Krill|first = Paul|url = http://www.infoworld.com/article/2653798/application-development/javascript-creator-ponders-past--future.html|title = JavaScript creator ponders past, future | Developer World|publisher = InfoWorld|date = 2008-06-23|accessdate = 2013-10-31}}</ref> Nel Dicembre del 1995, la [[Sun Microsystems]] insieme a Nescape annunciarono JavaScript attraverso un comunicato stampa.<ref>{{cite web|url = http://wp.netscape.com/newsref/pr/newsrelease67.html|archiveurl = http://web.archive.org/web/20070916144913/http://wp.netscape.com/newsref/pr/newsrelease67.html|archivedate = 2007-09-16|title = Press Release|publisher = Web.archive.org|date =|accessdate = 2013-10-31}}</ref> Nel Marzo del 1996, [[Netscape Navigator|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.<ref>{{cite web|url = http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html|archiveurl = //wayback.archive.org/web/20080517011912/http://weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html|archivedate = 17 May 2008|title = Brendan's Roadmap Updates: Popularity<!-- Bot generated title -->|work = weblogs.mozillazine.org}}</ref> JScript fu incluso quindi in [[Internet Explorer 3|Internet Explorer 3.0]], rilasciato nell'Agosto del 1996.
Netscape consegnò JavaScript ad [[ECMA International|Ecma International]] per il lavoro di standardizzazione e per fissare le specifiche. Così iniziò ECMA-262 nel Novembre del 1996.<ref>{{cite web|url = http://cgi.netscape.com/newsref/pr/newsrelease289.html|archiveurl = http://web.archive.org/web/19981203070212/http://cgi.netscape.com/newsref/pr/newsrelease289.html|archivedate = 1998-12-03|title = Press Release|publisher = Web.archive.org|date =|accessdate = 2013-10-31}}</ref> 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." <ref>{{cite web|url = https://mail.mozilla.org/pipermail/es4-discuss/2006-October/000133.html|title = Will there be a suggested file suffix for es4?|publisher = Mail.mozilla.org|date = 2006-10-03|accessdate = 2013-10-31}}</ref>
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. <ref>{{cite web|url = http://javascript.about.com/od/reference/a/jscript.htm|title = JScript VS JavaScript|publisher = About.com|date = 2015-11-25}}</ref>
=== Versioni ===
Ci sono sei edizioni dell'ECMA-262 pubblicate. Il lavoro sulla versione 6 dello standard, con il nome in codice di "Harmony", è stato finalmente concluso nel Giugno del 2015. <ref name="auto">[http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf]. EMCAScript. Retrieved on 2015-06-19.</ref>
{| class="wikitable"
!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 [[Espressione regolare|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.<ref>{{cite web|url = http://www.youtube.com/watch?v=Kq4FpMe6cRs|title = Changes to JavaScript, Part 1: EcmaScript 5|publisher = YouTube|date = 2009-05-18|accessdate = 2013-10-31}}</ref>
|[[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<ref>http://www.infoworld.com/article/2937716/javascript/its-official-ecmascript-6-is-approved.html</ref>
|La sesta edizione, conosciuta come ECMAScript 2015,<ref>http://www.ecma-international.org/ecma-262/6.0/</ref> apporta modifiche sintattiche significanti 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
|Ancora in lavorazione
|The Seventh Edition is in a very early stage of development, but is intended to continue the themes of language reform, code isolation, control of effects and library/tool enabling from ES6. New features proposed include concurrency and atomics, zero-copy binary data transfer, more number and math enhancements, syntactic integration with promises, observable streams, [[SIMD]] types, better metaprogramming with classes, class and instance properties, operator overloading, value types (first-class primitive-like objects), records and tuples, and traits.<ref>{{cite web|url = http://wiki.ecmascript.org/doku.php?id=strawman:strawman|title = strawman:strawman [ES Wiki]|publisher = Wiki.ecmascript.org|date = 2013-09-18|accessdate = 2013-10-31}}</ref><ref>{{cite web|title = tc39/ecma262|url = https://github.com/tc39/ecma262|website = TC39|publisher = GitHub|accessdate = 27 December 2015}}</ref>
|
|}
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. <ref name="ES-CP-withdrawn">[https://esdiscuss.org/notes/2015-03-24 2015-03-24 Meeting Notes]. ESDiscuss. Also see [http://www.ecma-international.org/publications/standards/Standardwithdrawn.htm Ecma withdrawn Standards]. ECMA.</ref>
=== 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 '99. 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 nel 23 Ottobre del 2007. <ref>{{Cite web|url = http://www.ecmascript.org/es4/spec/overview.pdf|title = Proposed ECMAScript 4th Edition – Language Overview|date = 23 October 2007|accessdate =|website = ecmascript.org|publisher =|last =|first =}}</ref>
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:
* [[Class (computer programming)|Classi]]
* [[Modular programming|Un sistema di modularizzazione]]
* Optional type annotations and [[static typing]], probably using a [[structural type system]]
* [[Generator (computer programming)|Generators]] e iterators
* 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 ([[Compilatore just-in-time|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. <ref>{{cite web|author = John Resig|url = http://ejohn.org/blog/bug-fixes-in-javascript-2/|title = John Resig – Bug Fixes in JavaScript 2|publisher = Ejohn.org|date =|accessdate = 2013-10-31}}</ref><ref>{{cite web|url = http://www.ecmascript.org/es4/spec/incompatibilities.pdf|title = Compatibility Between ES3 and Proposed ES4|publisher = Ecmascript.org|accessdate = 2013-10-31}}</ref>
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.<ref name="auto" /><ref>[http://www.ecma-international.org/ecma-262/6.0/ECMA-262.pdf Standard ECMA - 262 6th Edition / June 2015, ECMAScript ® 2015 Language Specification]</ref> 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 iterators ed il nuovo for/of loop, [[Python (programming language)|Python]]-style generators and generator expressions, arrow functions, binary data, typed arrays, collections (maps, sets e weak maps), promises, number e math enhancements, reflection, e proxies (metaprogramming for virtual objects e wrappers).<ref>http://www.wintellect.com/devcenter/nstieglitz/5-great-features-in-es6-harmony</ref><ref>https://www.smashingmagazine.com/2015/10/es6-whats-new-next-version-javascript/</ref> La lista completa è piuttosto lunga.<ref>http://es6-features.org/#Constants</ref>
Il supporto da parte dei browser di ES6 rimane ancora incompleto per il momento.<ref>https://kangax.github.io/compat-table/es6/</ref>
== 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|Document Object Model (DOM)]] specificate dal [[World Wide Web Consortium|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.
{| class="wikitable"
!Implementazioni
!Applicazioni
!Edizione ECMAScript
|-
|[[SpiderMonkey (JavaScript engine)|SpiderMonkey]]
|[[Firefox]], the [[Gecko (layout engine)|Gecko]] [[layout engine]], [[Adobe Acrobat]]<ref group="d">Adobe Acrobat 9.0 uses the SpiderMonkey 1.7 engine: [http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=JS_API_AcroJS.88.1.html JavaScript for Acrobat API Reference]</ref>
|ECMA-262, edizione 5.1, e caratteristiche dalla 6 e dalla imminente 7<ref group="d">[[SpiderMonkey (JavaScript engine)|SpiderMonkey]] already supports a wide range of upcoming features: [https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla ECMAScript 6 support in Mozilla] and [https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_7_support_in_Mozilla ECMAScript 7 support in Mozilla]</ref>
|-
|[[V8 (JavaScript engine)|V8]]
|[[Google Chrome]], [[Node.js]], [[Opera (web browser)|Opera]]
|ECMA-262, edizione 5.1, e caratteristiche dalla 6<ref group="d">V8, the JavaScript engine created by [[Google]] and used in Chrome, implements ECMAScript as specified in ECMA-262, 5th edition: [https://code.google.com/p/v8/ V8 JavaScript Engine].</ref><ref group="d">Chrome also implements non-ECMAScript-standard extensions to the language that are present in WebKit, in order to maintain compatibility with [[JavaScriptCore]] : [https://code.google.com/p/v8/issues/detail?id=890&can=1&q=Javascript%201.8&colspec=ID%20Type%20Status%20Priority%20Owner%20Summary%20HW%20OS%20Area%20Stars V8 JavaScript Engine issue tracker].</ref>
|-
|[[JavaScriptCore]] (Nitro)
|[[WebKit]], [[Safari (web browser)|Safari]], [[Qt (software)|Qt 5]]
|ECMA-262, edizione 5.1, e caratteristiche dalla 6<ref group="d">[https://developer.apple.com/library/safari/releasenotes/General/WhatsNewInSafari/Articles/Safari_9.html#//apple_ref/doc/uid/TP40014305-CH9-SW27 ECMAScript 6 Enhancements]</ref>
|-
|[[JScript]] 9.0
|[[Internet Explorer]], the [[Trident (layout engine)|Trident]] layout engine
|ECMA-262, edizione 5.1
|-
|[[Nashorn (JavaScript engine)|Nashorn]]
|[[Java (software platform)|Java]]
|ECMA-262, edizione 5.1<ref group="d">Full ECMAScript 5.1 support in Opera 11.51+[https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions].</ref>
|-
|[[Rhino (JavaScript engine)|Rhino]]
|[[Java Platform, Standard Edition]]
|ECMA-262, edizione 3
|-
|Carakan <small>(deprecated)</small>
|[[Opera (web browser)|Opera 12]]
|ECMA-262, edizione 5<ref group="d">Full ECMAScript 5.1 support in Opera 11.51+[http://my.opera.com/desktopteam/blog/2011/09/13/es5].</ref><ref group="d">Opera's implementation includes some JavaScript and JScript extensions: [http://www.opera.com/docs/specs/presto23/ecmascript/ ECMAScript support in Opera Presto 2.3]</ref>
|-
|[[RemObjects Script]] for .NET
|
|ECMA-262, edizione 5
|-
|[[KJS (software)|KJS]]
|[[KHTML]]
|ECMA-262, edizione 5.1<ref group="d">{{cite web|url = http://buschinski.de/2013/01/kjs-finally-under-1000-fails/|title = bUscher » Blog Archive » kjs finally under 1000 fails!|work = buschinski.de}}</ref> e caratteristiche dalla 6<ref group="d">Commits marked with ES6 are implementations of ES6 features: http://quickgit.kde.org/?p=kjs.git&a=shortlog</ref>
|-
|Ejscript
|Appweb Web Server, [[Samba (software)|Samba]] 4
|ECMA-262, edizione 3<ref group="d">This implementation asserts to support some extensions proposed in drafts of ECMAScript edition 4 (and now ECMAScript Harmony): [http://www.ejscript.org/products/ejs/overview.html Ejscript Overview].</ref>
|-
|[[JScript .NET]]
|Microsoft [[.NET Framework]]
|ECMA-262, edizione 3<ref group="d">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.</ref>
|-
|[[ActionScript]]
|[[Adobe Flash]], [[Adobe Flex]], [[Adobe AIR]]
|ECMA-262, edizione 4<ref group="d">Completely conforming implementation of the ECMAScript fourth edition draft specification: [[ActionScript]]</ref><ref group="d">In addition to supporting ECMA-262 edition 3, ActionScript 3 also included support for extensions proposed in drafts of ECMAScript edition 4: [http://blogs.adobe.com/kiwi/2006/05/as3_language_101_for_cc_coders.html The Kiwi Project: AS3 language 101 for C/C++ coders].</ref>
|-
|[[Adobe ExtendScript]]
|[[Adobe Creative Suite]] products: <!-- This list sorted into two tiers, roughly analogous to comprehensiveness of scripting support. -->[[Adobe InDesign|InDesign]], [[Adobe Illustrator|Illustrator]], [[Adobe Photoshop|Photoshop]],
[[Adobe Bridge|Bridge]], [[Adobe After Effects|After Effects]], [[Adobe Premiere Pro|Premiere Pro]]
|ECMA-262, edizione 3 {{Citation needed|date = May 2012}}
|-
|DMDScript
|
|ECMA-262
|-
|[[CriScript]]
|
|ECMA-262, edizione 3
|-
|[[InScript (JavaScript engine)|InScript]]
|[[iCab]]
|ECMA-262, edizione 3
|-
|[[Max/MSP]] engine
|[[Max/MSP]]
|ECMA-262, edizione 3
|-
|[[Galio]] engine
|[[Galio]]
|ECMA-262, edizione 3
|-
|[[QtScript]] <small>(deprecated)</small>
|[[KDE SC 4]]
|ECMA-262, edizione 3
|-
|[[Caja project|Caja]]
|
|ECMA-262, edizione 3<ref group="d">Caja emulates strict mode as specified in the ECMAScript edition 5 draft.</ref>
|-
|[[Chakra (JavaScript engine)|Chakra]]
|[[Microsoft Edge]]
|ECMA-262, edizione 5.1, e caratteristiche dalla 6<ref group="d">Microsoft states that Edge "supports most ES2015 features," supporting 81% of the specification as of May 2015 and 67% as of September 2015. [http://blogs.windows.com/msedgedev/2015/05/12/javascript-moves-forward-in-microsoft-edge-with-ecmascript-6-and-beyond/][https://kangax.github.io/compat-table/es6/]</ref>
|-
|}
{{Reflist|group = "d"}}
== Vedi altro ==
* [[ActionScript]]
* [[Comparison of layout engines (ECMAScript)]]
* [[Dart (programming language)|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]]
== Referenze ==
{{Reflist|colwidth = 30em}}
|