ECMAScript

**ECMAScript** (; **ES**) ստանդարտ է սկրիպտային լեզուների համար, ներառյալ JavaScript, JScript և ActionScript: Այն առավել հայտնի է որպես JavaScript ստանդարտ, որը նախատեսված է տարբեր վեբ բրաուզերների միջև վեբ էջերի փոխգործունակությունն ապահովելու համար։ Այն ստանդարտացված է Ecma International-ի կողմից  ECMA-262 փաստաթղթում։

ECMAScript-ը սովորաբար օգտագործվում է Համաշխարհային ցանցում (WWW) հաճախորդի կողմից սկրիպտավորման համար, և այն ավելի ու ավելի է օգտագործվում սերվերի կողմի հավելվածների և ծառայությունների համար, որոնք օգտագործում են գործարկման ժամանակի միջավայրեր՝ Node.js deno և bun:

## ECMAScript, ECMA-262, JavaScript
**ECMA-262**-ը կամ *ECMAScript* լեզվի հստակեցումը սահմանում է *ECMAScript* լեզուն կամ պարզապես **ECMAScript**-ը։ ECMA-262-ը սահմանում է միայն լեզվի շարահյուսությունը և հիմնական հավելվածի ծրագրավորման միջերեսի (API) իմաստաբանությունը, ինչպիսիք են , ,  և , մինչդեռ JavaScript-ի վավեր իրականացումներն ավելացնում են իրենց սեփական գործառույթները, ինչպիսիք են մուտքային/ելքային և ֆայլային համակարգի մշակումը։

## Պատմություն
ECMAScript հստակեցումը սկրիպտային լեզվի ստանդարտացված ճշգրտում է, որը մշակվել է Netscape-ից Բրենդան Էյխի կողմից; սկզբում կոչվում էր *Mocha*, ապա *LiveScript* և վերջում *JavaScript*: 1995 թվականի դեկտեմբերին Sun Microsystems-ը և Netscape-ը հայտարարեցին JavaScript-ը մամուլի հաղորդագրության մեջ։ 1996 թվականի նոյեմբերին Netscape-ը հայտարարեց Ecma International ստանդարտների կազմակերպության հանդիպման մասին՝ JavaScript-ի ստանդարտացումը առաջ մղելու համար։ ECMA-262-ի առաջին հրատարակությունն ընդունվել է Ecma-ի Գլխավոր ասամբլեայի կողմից 1997 թվականի հունիսին։ Այդ ժամանակվանից ի վեր հրատարակվել են լեզվի ստանդարտի մի քանի հրատարակություններ։ «ECMAScript» անվանումը փոխզիջում էր լեզվի ստանդարտացման մեջ ներգրավված կազմակերպությունների, հատկապես Netscape-ի և Microsoft-ի միջև, որոնց վեճերը գերակշռում էին ստանդարտների վաղ նիստերում։ Էյխը մեկնաբանեց, որ «ECMAScript-ը միշտ անցանկալի ապրանքային անուն էր, որը հնչում է որպես մաշկային հիվանդություն»։ ECMAScript-ը ֆորմալացվել է գործառնական իմաստաբանության միջոցով՝ աշխատելով Սթենֆորդի համալսարանում և Լոնդոնի Կայսերական քոլեջի Հաշվիչների բաժնում՝ անվտանգության վերլուծության և ստանդարտացման համար։ «ECMA»-ն մինչև 1994 թվականը եղել է «Եվրոպական համակարգչային արտադրողների ասոցիացիա»։

## Հատկություններ

ECMAScript լեզուն ներառում է *կառուցվածքային*, *դինամիկ*, *ֆունկցիոնալ* և *նախատիպի վրա հիմնված* առանձնահատկություններ։

### Հրամայական և կառուցվածքային
ECMAScript JavaScript -ն աջակցում է C ոճի կառուցվածքային ծրագրավորում։ Նախկինում JavaScript-ն աջակցում էր միայն ֆունկցիաների շրջանակի սահմանումը՝ օգտագործելով  `var` հիմնաբառը, սակայն ECMAScript 2015-ն ավելացրեց  `let` և `const`t հիմնաբառերը՝ թույլ տալով JavaScript-ին աջակցել և՛ բլոկի շրջանակը, և՛ գործառույթների շրջանակը։ JavaScript-ն աջակցում է ստորակետի ավտոմատ տեղադրմանը, ինչը նշանակում է, որ ստորակետերը, որոնք սովորաբար ավարտում են C-ով հայտարարությունը, կարող են բաց թողնել JavaScript-ում։

Ինչպես C ոճի լեզուները, կառավարման հոսքը կատարվում է , ,  / ,  / , և  հայտարարություններով։ Գործառույթները թույլ են մուտքագրված և կարող են ընդունել և վերադարձնել ցանկացած տեսակ։ Փաստարկները չեն տրամադրվել լռելյայնից մինչև չսահմանված։

### Թույլ տպագիր
ECMAScript-ը *թույլ է մուտքագրված*։ Սա նշանակում է, որ որոշ տեսակներ նշանակվում են անուղղակիորեն՝ հիմնվելով կատարված գործողության վրա։ Այնուամենայնիվ, JavaScript-ի կողմից փոփոխականի մի տեսակից մյուսը փոխակերպելու մի քանի տարօրինակություններ կան։ Այս տարօրինակությունները եղել են Wat վերնագրով ելույթի թեմա։

### Դինամիկ
ECMAScript-ը դինամիկ մուտքագրված է։ Այսպիսով, տեսակը կապված է արժեքի հետ, այլ ոչ թե արտահայտության։ ECMAScript-ն աջակցում է օբյեկտների տեսակը փորձարկելու տարբեր եղանակներ, ներառյալ *բադային* *մուտքագրումը*։

### Տրանսպիլյացիա

ES 2015 թվականից ի վեր JavaScript-ի վերափոխումը շատ տարածված է դարձել։ Transpilation-ը աղբյուրից-աղբյուր հավաքածու է, որտեղ օգտագործվում են JavaScript-ի ավելի նոր տարբերակները, և տրանսպիլյատորը վերագրում է աղբյուրի կոդը, որպեսզի այն ապահովվի ավելի հին բրաուզերների կողմից։ Սովորաբար, տրանսպիլյատորները տեղափոխվում են ES3՝ բրաուզերների բոլոր տարբերակների հետ համատեղելիությունը պահպանելու համար։ Որոշակի տարբերակի փոխադրման կարգավորումները կարող են կազմաձևվել ըստ անհրաժեշտության։ Transpiling-ը հավելյալ քայլ է ավելացնում կառուցման գործընթացին և երբեմն արվում է պոլիֆիլմերից խուսափելու համար։ Polyfills-ը նոր հնարավորություններ է ստեղծում հին միջավայրերի համար, որոնք չունեն դրանք։ Polyfill-ները դա անում են թարգմանչի գործարկման ժամանակ, օրինակ՝ օգտագործողի դիտարկիչում կամ սերվերում։ Փոխարենը, transpiling-ը վերագրում է ECMA կոդը ինքնին մշակման կառուցման փուլում, նախքան այն կհասնի թարգմանչին։

## Համապատասխանություն
2010 թվականին Ecma International-ը սկսեց մշակել ստանդարտների թեստ Ecma 262 ECMAScript-ի համար։ Test262-ը ECMAScript-ի համապատասխանության թեստային փաթեթ է, որը կարող է օգտագործվել ստուգելու համար, թե որքանով է JavaScript-ի ներդրումը հետևում ECMAScript-ի ճշգրտմանը։ Թեստային փաթեթը պարունակում է հազարավոր անհատական ​​թեստեր, որոնցից յուրաքանչյուրը ստուգում է ECMAScript-ի որոշ հատուկ պահանջ(ներ)։ Test262-ի մշակումը Ecma տեխնիկական կոմիտեի 39 (TC39) նախագիծն է։ Թեստավորման շրջանակը և անհատական ​​թեստերը տրամադրվում են Ecma-ին TC39-ի անդամ կազմակերպությունների կողմից։

Կարևոր ներդրումներ են կատարել Google-ը (Sputnik թեստային փաթեթ) և Microsoft-ը, որոնք երկուսն էլ հազարավոր թեստեր են կատարել։ Test262 թեստային փաթեթը բաղկացած էր 38014 թեստերից Հունվարի 2020-ի դրությամբ։  ECMAScript-ի բնութագրերը ES7-ի միջոցով լավ աջակցվում են հիմնական վեբ բրաուզերներում։ Ստորև բերված աղյուսակը ցույց է տալիս ծրագրային ապահովման ընթացիկ տարբերակների համապատասխանության մակարդակը ECMAScript-ի ամենավերջին հրատարակությունների նկատմամբ։

## Տես նաև
* ECMAScript for XML (E4X)
* List of ECMAScript engines

## Հղումներ

Կատեգորիա:Ecma standards
Կատեգորիա:Object-based programming languages
Կատեգորիա:Programming languages with an ISO standard
Կատեգորիա:Scripting languages
Կատեգորիա:Source-to-source compilers