ECMAScript

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

ECMAScript (sau ES ) este specificația tehnică a unui limbaj de script , standardizat și întreținut de ECMA International în ECMA-262 și ISO / IEC 16262. Cele mai cunoscute implementări ale acestui limbaj (adesea denumite dialecte) sunt JavaScript , JScript și ActionScript care a fost utilizat pe scară largă inițial ca limbaje de partea clientului în dezvoltarea web .

Istorie

Specificațiile definite de ECMAScript sunt specificații standardizate ale unui limbaj dezvoltat de Brendan Eich de la Netscape . Inițial a fost numit „Mocha”, mai târziu LiveScript și numai în cele din urmă JavaScript. [1] În decembrie 1995, Sun Microsystems împreună cu Netscape au anunțat JavaScript într-un comunicat de presă. [2] În martie 1996, Netscape Navigator 2.0 a fost lansat, fiind primul browser care acceptă JavaScript.

Datorită succesului enorm al JavaScript-ului ca limbaj client, Microsoft a dezvoltat o versiune diferită, dar compatibilă a limbajului, numindu-l JScript, pentru a evita problemele legate de drepturile de autor. JScript a implementat noi metode pentru calcularea datei pentru a rezolva parțial problemele din anul 2000 care au afectat JavaScript, deoarece clasa Date se bazează pe clasa Java cu același nume. [3] JScript a fost apoi inclus în Internet Explorer 3.0 , lansat în august 1996.

Netscape a livrat JavaScript către Ecma International pentru lucrări de standardizare și pentru a remedia specificațiile. Astfel a început ECMA-262 în noiembrie 1996. [4] Această primă ediție a fost adoptată de Adunarea Generală a Ecma în iunie 1997 și mai multe ediții ale standardizării au fost publicate de atunci. Numele „ECMAScript” a fost un compromis între organizațiile implicate în standardizarea lingvistică, în special Netscape și Microsoft ale căror dispute au dominat scena în primele zile ale acestor standarde. De fapt, Eich a comentat că „ECMAScript a fost întotdeauna un nume contractat, dar niciodată intenționat, care suna foarte mult ca o boală a pielii”. [5]

În timp ce atât JavaScript cât și JScript își propun să fie compatibile cu specificațiile ECMAScript, acestea oferă funcții suplimentare nedescrise în același timp de standardul ECMA. [6]

Versiuni

Până acum au fost publicate 10 ediții ale ECMA-262. Din 2015, publicația are loc anual, din acest motiv edițiile au și în denumire referința la anul lansării.

Ediție Data publicării Nume Modificări față de ediția anterioară Editor
1 Iunie 1997 Prima editie Guy L. Steele, Jr.
2 Iunie 1998 Modificări editoriale pentru a menține specificațiile în concordanță cu ISO / IEC 16262 Mike Cowlishaw
3 Decembrie 1999 S-au adăugat expresii regulate , îmbunătățirea gestionării șirurilor, noi comenzi de control, gestionarea try / catch, formatarea pentru ieșirile numerice și alte îmbunătățiri. Mike Cowlishaw
4 Abandonat A patra ediție a fost abandonată din cauza diversității de idei referitoare la complexitatea limbajului. Multe dintre caracteristicile propuse pentru a patra versiune au fost complet eliminate, în timp ce altele au fost reînviate în versiunea 6.
5 Decembrie 2009 Adaugă „modul strict” destinat să ofere o verificare mai completă a erorilor și să descurajeze dezvoltatorii să nu aibă erori. Clarifică multe ambiguități introduse în a treia versiune. De asemenea, adaugă câteva caracteristici precum getters și setere, biblioteca pentru suport JSON și reflectarea asupra proprietăților obiectului. [7] Pratap Lakshman , Allen Wirfs-Brock
5.1 Iunie 2011 Această ediție a fost creată pentru a o alinia pe cea anterioară cu standardul internațional ISO / IEC 16262: 2011. Pratap Lakshman, Allen Wirfs-Brock
6 Iunie 2015 [8] ECMAScript 2015 (ES2015) A șasea ediție, cunoscută sub numele de ECMAScript 2015 [9], dar și sub denumirea de „Harmony”, aduce modificări sintactice semnificative care deschid ușa către aplicații mai complexe, inclusiv clase și module care le definesc semantic ca „modul strict” în ECMAScript 5. Alte noutăți caracteristicile sunt iteratori diferiți, pentru / de buclă, generatoare și expresie în stil Python, funcții săgeată, date binare, tablouri tipizate, colecții (hărți, seturi și hărți slabe), promisiuni, îmbunătățiri ale funcțiilor matematice, reflecție și proxy (metaprogramare pentru obiecte virtuale). Allen Wirfs-Brock
7 Iunie 2016 ECMAScript 2016 (ES2016) A șaptea ediție, cunoscută și sub numele de ECMAScript 2016, este de fapt o ajustare a modificărilor introduse în ediția anterioară. Cu toate acestea, introduce două caracteristici noi: operatorul exponent (**) și Array.prototype.includes. Brian Terlson
8 Iunie 2017 ECMAScript 2017 (ES2017) vezi Ediția a opta - ECMAScript 2017 Brian Terlson
9 Iunie 2018 ECMAScript 2018 (ES2018) vezi Ediția a IX-a - ECMAScript 2018 Brian Terlson
10 Iunie 2019 ECMAScript 2019 (ES2019) vezi Ediția a X-a - ECMAScript 2019 Brian Terlson, Bradley Farias, Jordan Harband
11 Iunie 2020 ECMAScript 2020 (ES2020) vezi Ediția a 11-a - ECMAScript 2020 Jordan Harband, Kevin Smith

În iunie 2004, Ecma International a publicat standardul ECMA-357, definind o extensie a ECMAScript, cunoscută sub numele de ECMAScript pentru XML (E4X). Ecma a definit, de asemenea, un „profil compact” pentru ECMAScript (cunoscut sub numele de ES-CP sau ECMA 327) conceput pentru dispozitive cu resurse limitate, care a fost retras în 2015. [10]

Ediția a patra (abandonată)

A patra ediție propusă a ECMA-262 (ECMAScript 4 sau ES4) ar fi prima actualizare majoră a ECMAScript de la a treia ediție publicată în 1999. Eliberarea specificațiilor (împreună cu referințele pentru implementare) a fost inițial programată pentru octombrie 2009 și, de fapt, o introducere în limbă a fost lansată de grupul de lucru la 23 octombrie 2007. [11]

În august 2008, s-a luat decizia de reducere a celei de-a patra ediții a ECMAScript și combinarea acesteia cu proiectul ECMAScript Harmony. Știrile în discuție pentru Harmony au fost:

Intenția acestor caracteristici a fost în parte de a facilita dezvoltarea unui software complex cu grupuri mari de lucru în spate și de a permite eliminarea unor caracteristici dinamice ale limbajului pentru a îmbunătăți performanța. De exemplu, Tamarin (mașina virtuală ActionScript dezvoltată și lansată open source de Adobe) vine cu o compilație just-in-time (JIT).

Pe lângă introducerea de noi funcții, în ediția a patra s-a propus remedierea mai multor erori ale ediției anterioare [12] [13] . Prin urmare, aceste corecții și-au găsit locul în ediția a cincea

Lucrările la această ediție au început după finalizarea specificației ediției Compact Profile și au continuat timp de aproximativ 18 luni, în care progresul a fost lent în combinarea ideilor JavaScript 2 de la Netscape cu implementarea practică Microsoft a JScript. Au existat, de asemenea, mai multe dezbateri care au avut loc public pe bloguri între Eich, care va deveni ulterior CTO al Fundației Mozilla, și angajatul Microsoft Chris Wilson, responsabil cu arhitectura Internet Explorer. Wilson a susținut că modificările propuse la noul standard care nu erau complet compatibile înapoi cu versiunile anterioare ale limbajului ar „rupe rețeaua” [14] și că cei care s-au opus au fost marginalizați [15] . Eich a răspuns numindu-l pe detractorul său mincinos și a contestat criticile cerând public să demonstreze exemple specifice de incompatibilitate [16] .

Ediția a cincea

Yahoo , Microsoft , Google și alți disidenți ai celei de-a patra ediții a ECMAScript și-au format „subcomitetul” pentru a proiecta o actualizare puțin mai ambițioasă a ECMAScript 3, numindu-l provizoriu ECMAScript 3.1. Această ediție se va concentra pe actualizări de securitate și bibliotecă, cu accent pe compatibilitate.

După discuția descrisă mai sus, ambele echipe ES 3.1 și ES 4 au convenit asupra unui compromis: vor lucra la cele două ediții în paralel și cu cele două echipe coordonate pentru a fi siguri că ES 3.1 va rămâne strict un subset al ES 4 (în atât semantică, cât și sintaxă).

Ediția a șasea - ECMAScript 2015

A șasea ediție, cunoscută inițial sub numele de ECMAScript (ES6), dar ulterior redenumită ECMAScript 2015, a fost gata în 2015. Această ediție a adus extensii importante sintaxei, concepute pentru a facilita scrierea aplicațiilor complexe, inclusiv a declarațiilor de clasă noi ( class Foo { ... } ) și module prin export import și export . Unele alte noutăți sintactice au fost cele noi for ... of iterator, funcții săgeată ( () => {...} ), generatoare în stil Python , let cuvintele cheie să declare variabile cu vizibilitate locală și const să declare constante, date binare, tastate matrici, noi colecții (hărți, seturi și WeakMap), promisiuni , îmbunătățiri ale numerelor și matematicii, reflecție , proxy și șir de șabloane . [17] [18]

Ediția a șaptea - ECMAScript 2016

A șaptea ediție, oficial ECMAScript 2016, a fost lansată în iunie 2016 [19] . Inovațiile majore includ blocarea scopurilor pentru variabile și funcții, alocări nestructurate ale variabilelor, apeluri corespunzătoare, operatorul exponent ( ** ) și cuvintele cheie await , async pentru programarea asincronă. [19] [20]

Ediția a opta - ECMAScript 2017

A opta ediție, cunoscută oficial sub numele de ECMAScript 2017, a fost finalizată și publicată în iunie 2017. Noile caracteristici propuse includ concurență și atomică, transfer binar de copiere zero, alte îmbunătățiri în matematică, integrare sintactică cu promisiunile., Fluxuri observabile, SIMD, mai bine metaprogramare cu clase, supraîncărcări ale operatorului și multe altele.

Ediția a IX-a - ECMAScript 2018

A noua ediție, cunoscută sub numele de ECMAScript 2018 a fost lansată în iunie 2018. Sunt introduse iterații asincrone ( for await(i of var) ), promisiunile au acum metode ( then() , catch() (dacă nu reușesc) și în finally() , sintaxa răspândirii pentru parametrii funcției ( function pippo(foo, ...bar) ). Noutățile masive se referă la utilizarea expresiilor regulate [21] .

Ediția a zecea - ECMAScript 2019

A zecea ediție, numită ECMAScript 2019, a fost lansată în iunie 2019. Array.flatMap() majore Array.flatMap() referă la metodele Array.flatMap() [22] și Object.fromEntries() [23] [24] .

Ediția a XI-a - ECMAScript 2020

A unsprezecea ediție, sau ECMAScript 2020, a fost publicată în iunie 2020. În plus față de noile funcții, această versiune introduce un tip primitiv BigInt pentru numere întregi de dimensiuni arbitrare, operatorul de coalescență nul și global this obiect.

BigInts sunt create cu constructorul BigInt sau cu sintaxa 10n , unde „n” este plasat după literalul numărului. BigInts permit reprezentarea și manipularea numerelor întregi dincolo de Number.MAX_SAFE_INTEGER , în timp ce tipurile de numere sunt reprezentate de o valoare IEEE 754 cu precizie dublă pe 64 de biți. Funcțiile încorporate în Math nu sunt compatibile cu BigInts; de exemplu, exponențierea BigInts trebuie făcută cu operatorul ** în loc de Math.pow .

operatorul de coalescență nul, ?? , returnează operandul drept atunci când operandul stâng este null sau undefined . Acest lucru este în contrast cu operatorul || , care ar returna "string" pentru toate valorile „fals”, cum ar fi cele reprezentate mai jos.

 nedefinit ?? „șir” // -> „șir”
nul ?? „șir” // „șir”
fals ?? „șir” // -> fals
NaN ?? „șir” // -> NaN

Concatenarea opțională face posibilă accesarea proprietăților imbricate ale unui obiect fără a avea un control ȘI la fiecare nivel.

Un exemplu este const zipcode = person?.address?.zipcode . Dacă oricare dintre proprietăți nu este prezentă, zipcode va fi undefined .

Conformitate

În 2010, ECMA International a început să dezvolte un test pentru a verifica conformitatea cu standardul ECMA 262 ECMAScript. Numit Test262 este folosit pentru a înțelege cât de bine se conformează diversele implementări JavaScript cu specificația. Testul conține mii de teste individuale, unul pentru fiecare cerință a diferitelor standarde. Dezvoltarea Test262 este încredințată Comitetului Tehnic ECMA 39 (TC39). Google și Microsoft au contribuit semnificativ la dezvoltare: ambele au dezvoltat mii de teste efectuate de suită. Test262 constă din 38 014 test. Datele sunt actualizate până în ianuarie 2020. [25] . Tabelele de mai jos arată conformitatea motoarelor JavaScript în aplicațiile populare.

browser web

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

Implementări pe partea de server

Motor Server Conformitate
ES5 [26] ES6 [27] 2016+ [28] [29]
V8 Node.js 13.2 100% 98% nouăzeci și doi%

Notă

  1. ^ Paul Krill, creatorul JavaScript meditează trecutul, viitorul | Developer World , pe infoworld.com , InfoWorld, 23 iunie 2008. Adus la 31 octombrie 2013 .
  2. ^ Comunicat de presă , la wp.netscape.com , Web.archive.org. Adus la 31 octombrie 2013 (arhivat din original la 16 septembrie 2007) .
  3. ^ Actualizări foaie de parcurs Brendan: Popularitate , la weblogs.mozillazine.org (arhivat din original la 17 mai 2008) .
  4. ^ Comunicat de presă , la cgi.netscape.com , Web.archive.org. Adus la 31 octombrie 2013 (arhivat din original la 3 decembrie 1998) .
  5. ^ Va exista un sufix de fișier sugerat pentru es4? , pe mail.mozilla.org . Adus la 31 octombrie 2013 (arhivat din original la 21 iunie 2020) .
  6. ^ JScript VS JavaScript , la javascript.about.com , About.com, 25 noiembrie 2015.
  7. ^ Modificări la JavaScript, Partea 1: EcmaScript 5 , youtube.com , YouTube, 18 mai 2009. Accesat la 31 octombrie 2013 .
  8. ^ Este oficial: ECMAScript 6 este aprobat | InfoWorld
  9. ^ ECMAScript 2015 Specificații lingvistice - ECMA-262 Ediția a 6-a
  10. ^ 24.03.2015 Note de întâlnire . Discutați ES. A se vedea, de asemenea, Standardele retrase Ecma . ECMA.
  11. ^ Ediția a patra ECMAScript propusă - Prezentare lingvistică ( PDF ), pe ecmascript.org , 23 octombrie 2007 (arhivat din original la 13 iulie 2010) .
  12. ^ John Resig, John Resig - Corecții de erori în JavaScript 2 , la ejohn.org . Adus la 31 octombrie 2013 .
  13. ^ Compatibilitatea între ES3 și ES4 propus ( PDF ), pe ecmascript.org . Adus la 31 octombrie 2013 (arhivat din original la 24 iulie 2014) .
  14. ^ ECMAScript 3 and Beyond - IEBlog - Site Home - MSDN Blogs , at blogs.msdn.com . Adus la 31 octombrie 2013 .
  15. ^ Ce cred despre ES4. - Albatros! - Pagina principală a site-ului - Bloguri MSDN , la blogs.msdn.com . Adus la 31 octombrie 2013 .
  16. ^ Scrisoare deschisă către Chris Wilson , pe brendaneich.com , Brendan Eich, 31 octombrie 2007. Accesat la 31 octombrie 2013 (arhivat din original la 16 septembrie 2011) .
  17. ^ (EN) 5 Great Features in EcmaScript 6 (ES6 Harmony) - Wintellect in Wintellect, 24 martie 2014. Accesat la 19 martie 2018 (depus de „Original url 22 iulie 2017).
  18. ^ ( EN ) ECMAScript 6 (ES6): Noutăți în următoarea versiune de JavaScript , în Smashing Magazine , 28 octombrie 2015. Accesat pe 19 martie 2018 .
  19. ^ a b ECMAScript 2016 Specificări lingvistice , pe ecma-international.org , Ecma International , iunie 2016.
  20. ^ Michael Saboff, ECMAScript 6 Proper Tail Calls în WebKit , pe WebKit , 23 mai 2016. Accesat la 11 aprilie 2019 .
  21. ^ Ce este nou în ES2018 - SitePoint
  22. ^ Model funcțional: flatMap
  23. ^ Propunere ES: `Object.fromEntries ()`
  24. ^ Specificații de limbă ECMAScript® 2019
  25. ^ tc39 / test262 , pe GitHub , 24 ianuarie 2020. Adus pe 29 ianuarie 2020 .
  26. ^ A b (EN) Tabelul de compatibilitate ECMAScript 5 , pe kangax.github.io. Adus la 8 noiembrie 2018 .
  27. ^ A b (EN) Tabelul de compatibilitate ECMAScript 6 , pe kangax.github.io. Adus la 8 noiembrie 2018 .
  28. ^ A b (EN) Tabel de compatibilitate ECMAScript 2016+ , pe kangax.github.io. Adus la 8 noiembrie 2018 .
  29. ^ a b Scor care include toate testele de conformitate de la ES2016 la ES2019

Vezi mai mult

linkuri externe

Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica