تاریخچه نسخه‌های اکما اسکریپت

اکما اسکریپت یک استاندارد برای زبان جاوااسکریپت است که توسط اکما اینترنشنال توسعه یافته است. از سال ۲۰۱۵ به این سو نسخه های اصلی در ماه های ژوئن منتشر می شوند. اکما اسکریپت ۲۰۲۲، که آخرین نسخه است، در ژوئن ۲۰۲۲ منتشر شد.

## نسخه‌ها
تا به حال ۹ نسخه از ECMA-262 منتشر شده‌است. کار بر روی نسخه ۹ استاندارد در ماه ژوئن ۲۰۱۸ نهایی شد.

در ژوئن 2004 Ecma International استاندارد ECMA-357 را منتشر کرد، که در آن یک اکستنشن برای اکما اسکریپت، به نام اکما اسکریپت برای XML (یا E4X) تعریف شده‌است. اکما همچنین یک "Compact Profile" را برای اکما اسکریپت تعریف کرد (شناخته شده به عنوان ESCP یا ECMA 327) که برای دیوایس‌هایی با محدودیت توانایی و امکانات طراحی شده بود، که در سال ۲۰۱۵ حذف شد.

### نسخه ۴ (رها شده)
چهارمین نسخه ECMA-262 (**یا 4  اکما اسکریپت یا ES4**) اولین نسخه بزرگ  اکما اسکریپت از زمان انتشار سوم آن در سال ۱۹۹۹ بود. مشخصات (همراه با اجرای مرجع) برای کامل کردن آن تا اکتبر ۲۰۰۸ مورد هدف قرار گرفت. خلاصه ای از این زبان توسط گروهی که برروی آن کار می‌کردند در ۲۳ اکتبر ۲۰۰۷ منتشر شد.

تا اوت ۲۰۰۸، طرح پیشنهادی  اکما اسکریپت 4 به یک پروژه با نام  اکما اسکریپت Harmony ویرایش یافت. ویژگی‌های مورد بحث برای  اکما اسکریپت Harmony در آن زمان شامل موارد زیر بودند:

* کلاس‌ها
* یک سیستم ماژول
* حاشیه نویسی نوع اختیاری و تایپ استاتیک، احتمالاً با استفاده از یک سیستم نوع ساختاری
* ژنراتورها و تکرار کننده‌ها
* تخصیص مخرب و
* انواع داده جبری.

هدف این ویژگی‌ها تا حدی برای حمایت بهتر از *برنامه‌نویسی در ابعاد بزرگ* و پویایی بعضی از توانایی‌های اسکریپت برای بهبود عملکرد بود. به عنوان مثال، تامارین (ماشین مجازی برای اکشن اسکریپت، توسعه داده شده و متن باز شده توسط ادوب) قابلیت پشتیبانی فقط در زمان تدوین (JIT) را برای کلاس‌های خاصی از اسکریپت داشت.

علاوه بر معرفی ویژگی‌های جدید، پیشنهاد اصلاح کردن بعضی از اشکالات و باگ‌های ES3 در نسخه ۴ داده شد. اینها و دیگر اصلاحات و پشتیبانی از رمزگذاری/رمزگشایی JSON، به  اکما اسکریپت، در مشخصات نسخه ۵ اضافه شد.

پس از آن که مشخصات ES-CP (مشخصات جامع) تکمیل شد کار بر روی نسخه ۴ آغاز گردید و در حدود ۱۸ ماه ادامه یافت که آن پیشرفت‌های آهسته موجب همزمان شدن تئوری جاوا اسکریت ۲ نت اسکیپ با تجربه پیاده‌سازی جی اسکریپت دات نت مایکروسافت شد. پس از مدتی تمرکز کار به سمت استاندارد اکما اسکریپت برای XML (یا E4X) منتقل شد.

این تغییر بدون ایجاد اختلاف نبود. در اواخر سال ۲۰۰۷، یک بحث بین آیک، که بعداً به عنوان CTO بنیاد موزیلا انتخاب شد، و کریس ویلسون، معمار پلتفرم مایکروسافت برای اینترنت اکسپلورر، در تعدادی از وبلاگ‌ها پخش شد.

ویلسون اخطار داد که به دلیل تغییرات پیشنهادی اکما اسکریپت، این زبان در بعضی موارد با نسخه‌های قبلی موجب ناسازگاری خواهد شد، این به روز رسانی منجر به «شکستن وب» و سهامدارانی که با تغییرات مخالفت می‌کنند، «از دیدگاه مخفی» خواهند شد.

آیک با بیان اینکه ویلسون "موارد جعلی را در وبلاگ " تکرار می‌کند، پاسخ خود را آغاز کرد و با این که تلاشی برای سرکوب مخالفان و به چالش کشیدن منتقدان با ارائهٔ نمونه‌هایی خاص از ناسازگاری وجود داشته‌است، مخالفت کرد.

وی اشاره کرد که مایکروسافت سیلورلایت و ادوبی ایر به ترتیب بر روی C # و ActionScript 3 تکیه می‌کنند، که هر دو بزرگتر و پیچیده‌تر از نسخه سوم اکما اسکریپت هستند.

### نسخه ۵
یاهو، مایکروسافت، گوگل و دیگر مخالفان نسخه چهارم، کمیته فرعی را برای طراحی یک به روز رسانی کمتر جاه طلبانهٔ اکما اسکریپت ۳ تشکیل دادند که به‌طور آزمایشی  اکما اسکریپت 3.1 نامگذاری شد. این نسخه بر روی امنیت و به روز رسانی کتابخانه‌ها تمرکز دارد و تأکید زیادی نیز بر سازگاری دارد.

پس اتفاق ذکر شده و بحث و اختلاف عموم، تیم  اکما اسکریپت 3.1 و  اکما اسکریپت 4 با سازش موافقت کردند:

"دو نسخه به طور موازی با هماهنگی بین تیم‌ها کار خواهند کرد تا اطمینان حاصل شود که  اکما اسکریپت 3.1 همچنان یک زیرمجموعه اصلی از  اکما اسکریپت 4 در مفهوم و سینتکس زبان، خواهد ماند. "

با این حال، فلسفه‌های مختلف در هر تیم منجر به شکست‌های مکرر در قانون زیرمجموعه شدن نسخه‌های قدیمی در نسخه‌های جدیدتر شد، و شکی ایجاد کرد که آیا مخالفان اکما اسکریپت ۴ در آینده از این نسخه حمایت خواهند کرد و آن را ارائه خواهند داد یا نه.

پس از گذشت بیش از یک سال از اختلاف نظر در مورد آینده اکما اسکریپت در کمیته ۳۹ فنی اکما، این دو تیم در ماه ژوئیه ۲۰۰۸ به توافق جدید دست یافتند: برندان آیک اعلام کرد که اکما TC39 بر روی پروژه اکما اسکریپت ۳٫۱ (که بعدها به اکما اسکریپت نسخه ۵ تغییر یافت) با همکاری کامل تمام گروه‌ها و فروشندگان که حداقل دو پیاده‌سازی متقابل را تا اوایل سال ۲۰۰۹ هدف قرار می‌دهند با تمرکز کار خواهند کرد.

در آوریل ۲۰۰۹، اکما TC39 طرح «نهایی» نسخه پنجم را منتشر کرد و اعلام کرد که تست‌های پیاده‌سازی‌های متقابل از این خبر می‌دهند که تا اواسط ماه ژوئیه کامل خواهند شد.

در ۳ دسامبر ۲۰۰۹، نسخه پنجم، اکما-۲۶۲ منتشر شد.

### نسخه ۶ - اکما اسکریپت ۲۰۱۵
نسخه ششم، که ابتدا اکما اسکریپت ۶ (**ES6**) شناخته شد و بعداً به اکما اسکریپت ۲۰۱۵ تغییر نام یافت، در ژوئن ۲۰۱۵ نهایی شد. این به روز رسانی دستورالعمل‌های جدیدی را برای نوشتن برنامه‌های پیچیده اضافه می‌کند، از جمله تعریف کلاس‌ها (
```javascript
class Foo { }
```
) و ماژول‌های ES6 مانند 
```javascript
import * as moduleName from "...";
export const Foo
```
، اما آنها را به صورت معنایی در شرایطی همانند حالت سختگیر  اکما اسکریپت 5 تعریف می‌کند.

دیگر ویژگی‌های جدید شامل تکرارکننده‌ها و حلقه‌های `for`/`of`، ایجاد کننده سبک پایتونی، اصطلاح تابع فلش چاق (“fat” arrow functions (`=>`)) 
```javascript
() => {...}
```
، کلمه کلیدی`let` برای متغییرهای محلی، کلمه کلیدی `const` برای متغییرهای ثابت، داده‌های باینری، آرایه‌های تایپ شده، مجموعه‌های جدید (مپ‌ها، مجموعه‌ها و ویک مپ)، پرامیس‌ها (promises) 
```javascript
var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});
promise1.then(function(value) {
  console.log(value);
  // expected output: "foo"
});
console.log(promise1);
// expected output: [object Promise]

// output :
//> [object Promise]
//> "foo"
```
 ، تکمیل امکانات اعداد و ریاضیات، انعکاس، پروکسی‌ها و رشته‌های تمپلت 
```javascript
var bar = 1;
var tStr = `foo ${bar}`;
// tStr : "foo 1"
```
 می‌باشد.

به عنوان اولین مشخصه "هارمونی اکما اسکریپت"، آن را به عنوان "هارمونی ES6 " نیز می‌شناسند.

### نسخه ۷ - اکما اسکریپت ۲۰۱۶
نسخه هفتم، که به‌طور رسمی اکما اسکریپت ۷ شناخته می‌شود، در ژوئن ۲۰۱۶ نهایی شد.

ویژگی‌های استاندارد اصلی عبارتند از بلوک دامنه برای متغیرها و توابع، الگوهای تخریب (برای متغیرها)، صدا زدن توابع دنباله وار، اپراتور توانی `**` برای اعداد، کلمات کلیدی`await` و`async` برای برنامه‌نویسی به صورت غیر همزمان.

### نسخه ۸ - اکما اسکریپت ۲۰۱۷
نسخه هشتم، که به‌طور رسمی اکما اسکریپت ۲۰۱۷ شناخته می‌شود، در ژوئن ۲۰۱۷ نهایی شد. شامل ساختارهای `async/await` که با استفاده از تولیدکننده‌ها و پرامیس‌ها کار می‌کنند، می‌باشد. اکما اسکریپت ۲۰۱۷ (ES2017)، نسخه هشتم، شامل ویژگی‌هایی برای همزمان سازی و برگردانندگی (صدا زدن توابع (call back))، ادغام سینتکس با پرامیس‌ها (async / waiting) می‌باشد.

### نسخه ۹ - اکما اسکریپت ۲۰۱۸
نسخه ۹، که به‌طور رسمی اکما اسکریپت ۲۰۱۸ شناخته می‌شود، در ژوئن ۲۰۱۸ نهایی شد.

ویژگی‌های جدید شامل اپراتور rest/spread برای متغیرها (علامت سه نقطه: `'''foo'''`)، تکرار غیر همزمان، متد نهایی (`finally`) برای پرامیس‌ها و اضافه کردن امکانات جدید به RegExp می‌باشد.

### نسخه ۱۰ - اکما اسکریپت ۲۰۱۹
نسخه ۱۰، که به‌طور رسمی اکما اسکریپت ۲۰۱۹ شناخته می‌شود، در ژوئن ۲۰۱۹ نهایی شد.

### نسخه ۱۱ - اکما اسکریپت ۲۰۲۰
نسخه ۱۱، که به‌طور رسمی اکما اسکریپت ۲۰۲۰ شناخته می‌شود، در ژوئن ۲۰۲۰نهایی شد.

### نسخه ۱۲ - اکما اسکریپت ۲۰۲۱
نسخه ۱۲، که به‌طور رسمی اکما اسکریپت ۲۰۲۱ شناخته می‌شود، در ژوئن ۲۰۲۱ منتشر شد. این نسخه متد replaceAll را برای رشته ها معرفی می کند.

### نسخه ۱۳ - اکما اسکریپت ۲۰۲۲
نسخه ۱۳، که به‌طور رسمی اکما اسکریپت ۲۰۲۲ شناخته می‌شود، در ژوئن ۲۰۲۲ منتشر شد. این نسخه await سطح بالا را معرفی می‌کند و اجازه می‌دهد کلمه کلیدی در سطح بالای ماژول‌ها استفاده شود.

### ES.Next
ای اس دات نکست نام پویایی است که به هر آنچه که نسخه بعدی در زمان نوشتن است، اشاره دارد. (در واقع امکانات نسخه‌های بعدی اکما اسکریپت)

ویژگی‌های ای اس دات نکست به‌طور صحیح *پیشنهاد نامیده می‌شوند*، زیرا، با این تعریف، مشخصات و امکانات آن هنوز مشخص و نهایی نشده‌است.

## منابع

## پیوند های بیرونی

### استاندارد های ایزو

* ISO/IEC 22275:2018

### استاندارد های اکما اسکریپت

* مشخصات زبان اکما اسکریپت 
** نسخه 3، دسامبر 1999 :PDF
** نسخه 3 نهایی، مارچ 2000:PDF
** نسخه 4 (بازبینی): PDF
** نسخه 4 (متن نهایی): HTML, PDF
** نسخه 5، دسامبر 2009: PDF
** نسخه 5.1 ژوتن 2011: HTML, PDF
** نسخه 6 ژوتن ۲۰۱۵ (خصوصیات زبان اکما اسکریپت ۲۰۱۵): HTML, PDF
** نسخه 7 ژوتن ۲۰۱۶ (خصوصیات زبان اکما اسکریپت ۲۰۱۶): HTML, PDF
** نسخه 8 ژوتن ۲۰۱۷ (خصوصیات زبان اکما اسکریپت ۲۰۱۷): HTML, PDF
** نسخه 9 ژوتن ۲۰۱۸ (خصوصیات زبان اکما اسکریپت ۲۰۱۸): HTML,PDF
** نسخه 10 ژوتن ۲۰۱۹ (خصوصیات زبان اکما اسکریپت ۲۰۱۹): HTML,PDF
** نسخه 11 ژوتن ۲۰۲۰ (خصوصیات زبان اکما اسکریپت ۲۰۲۰): HTML,PDF
** نسخه 12 ژوتن ۲۰۲۱ (خصوصیات زبان اکما اسکریپت ۲۰۲۱): HTML,PDF
** نسخه 13 ژوتن ۲۰۲۲ (خصوصیات زبان اکما اسکریپت ۲۰۲۲): HTML
* ECMA-290  اکما اسکریپت Components Specification (June 1999)
* ECMA-327  اکما اسکریپت 3rd Edition Compact Profile (June 2001)
* ECMA-357  اکما اسکریپت for XML (E4X) Specification (June 2004)