اکما اسکریپت
اکما اسکریپت (ECMAScript یا ES) مشخصات یک زبان اسکریپتی است که توسط Ecma International در ECMA-262 و ISO / IEC 16262 استاندارد شده‌است. اکما اسکریپت برای استانداردسازی جاوا اسکریپت ایجاد شده‌است تا بتواند پیاده‌سازی چندگانه مستقل را تقویت کند. از زمان انتشار اولین استاندارد، جاوا اسکریپت به عنوان معروف‌ترین پیاده‌سازی ECMAScript باقی مانده است، همراه با دیگر پیاده‌سازی‌های شناخته شده مانند JScript و ActionScript. ECMAScript به‌طور معمول برای در وب جهان گستر و به‌طور فزاینده‌ای برای نوشتن برنامه‌های سرور و سرویس‌هایی که از نود. جی اس استفاده می‌کنند، استفاده می‌شود.
مشخصات اکما یک ویژگی استاندارد شده از یک زبان اسکریپتی است که توسط برندان آیک از نت اسکیپ طراحی شده‌است. در ابتدا موچا، بعداً لایو اسکریپت، و در نهایت جاوا اسکریپت نامگذاری شد. در دسامبر ۱۹۹۵ سان مایکروسیستمز و نت اسکیپ جاوا اسکریپت را در مطبوعات اعلام کردند. اولین نسخه اکما-۲۶۲ توسط مجمع عمومی اکما در ژوئن ۱۹۹۷ تصویب شد. چندین نسخه استاندارد زبان از آن زمان منتشر شده‌است. نام «اکما اسکریپت» بین سازمان‌های مربوط به استانداردسازی زبان با سازش انتخاب شد، به خصوص نت اسکیپ و مایکروسافت، که اختلافات آنها در جلسات اولیه استانداردها جلسات را تحت سلطه خود درمی‌آورد. آیک اظهار داشت که «اکما اسکریپت همیشه یک نام تجاری نامناسب است که به نظر می‌رسد مانند یک بیماری پوستی است.»
در حالی که هر دوی جاوا اسکریپت و جی اسکریپت با اکما اسکریپت سازگار هستند، آنها همچنین ویژگی‌های اضافی را که در مشخصات اکما مشخص نشده‌اند، ارائه می‌دهند.
تا به حال نه نسخه از ECMA-262 منتشر شده‌است. کار بر روی نسخه ۹ استاندارد در ماه ژوئن ۲۰۱۸ نهایی شد.
در ژوئن 2004 Ecma International استاندارد ECMA-357 را منتشر کرد، که در آن یک اکستنشن برای اکما اسکریپت، به نام (یا E4X) تعریف شده‌است. اکما همچنین یک "Compact Profile" را برای اکما اسکریپت تعریف کرد (شناخته شده به عنوان ESCP یا ECMA 327) که برای دیوایس‌هایی با محدودیت توانایی و امکانات طراحی شده بود، که در سال ۲۰۱۵ حذف شد.
چهارمین نسخه ECMA-262 (یا 4 ECMAScript یا ES4) اولین نسخه بزرگ ECMAScript از زمان انتشار سوم آن در سال ۱۹۹۹ بود. مشخصات (همراه با اجرای مرجع) برای کامل کردن آن تا اکتبر ۲۰۰۸ مورد هدف قرار گرفت. خلاصه ای از این زبان توسط گروهی که برروی آن کار می‌کردند در ۲۳ اکتبر ۲۰۰۷ منتشر شد.
تا اوت ۲۰۰۸، طرح پیشنهادی ECMAScript 4 به یک پروژه با نام ECMAScript Harmony ویرایش یافت. ویژگی‌های مورد بحث برای ECMAScript Harmony در آن زمان شامل موارد زیر بودند:
هدف این ویژگی‌ها تا حدی برای حمایت بهتر از "برنامه‌نویسی در ابعاد بزرگ" و پویایی بعضی از توانایی‌های اسکریپت برای بهبود عملکرد بود. به عنوان مثال، تامارین (ماشین مجازی برای اکشن اسکریپت، توسعه داده شده و متن باز شده توسط ادوب) قابلیت پشتیبانی فقط در زمان تدوین (JIT) را برای کلاس‌های خاصی از اسکریپت داشت.
علاوه بر معرفی ویژگی‌های جدید، پیشنهاد اصلاح کردن بعضی از اشکالات و باگ‌های ES3 در نسخه ۴ داده شد. اینها و دیگر اصلاحات و پشتیبانی از رمزگذاری/رمزگشایی JSON، به ECMAScript، در مشخصات نسخه ۵ اضافه شد.
پس از آن که مشخصات ES-CP (مشخصات جامع) تکمیل شد کار بر روی نسخه ۴ آغاز گردید و در حدود ۱۸ ماه ادامه یافت که آن پیشرفت‌های آهسته موجب همزمان شدن تئوری جاوا اسکریت ۲ نت اسکیپ با تجربه پیاده‌سازی جی اسکریپت دات نت مایکروسافت شد. پس از مدتی تمرکز کار به سمت استاندارد (یا E4X) منتقل شد.
این تغییر بدون ایجاد اختلاف نبود. در اواخر سال ۲۰۰۷، یک بحث بین آیک، که بعداً به عنوان CTO بنیاد موزیلا انتخاب شد، و کریس ویلسون، معمار پلتفرم مایکروسافت برای اینترنت اکسپلورر، در تعدادی از وبلاگ‌ها پخش شد.
ویلسون اخطار داد که به دلیل تغییرات پیشنهادی اکما اسکریپت، این زبان در بعضی موارد با نسخه‌های قبلی موجب ناسازگاری خواهد شد، این به روز رسانی منجر به «شکستن وب» و سهامدارانی که با تغییرات مخالفت می‌کنند، «از دیدگاه مخفی» خواهند شد.
آیک با بیان اینکه ویلسون "موارد جعلی را در وبلاگ " تکرار می‌کند، پاسخ خود را آغاز کرد و با این که تلاشی برای سرکوب مخالفان و به چالش کشیدن منتقدان با ارائهٔ نمونه‌هایی خاص از ناسازگاری وجود داشته‌است، مخالفت کرد.
وی اشاره کرد که مایکروسافت سیلورلایت و ادوبی ایر به ترتیب بر روی C # و ActionScript 3 تکیه می‌کنند، که هر دو بزرگتر و پیچیده‌تر از نسخه سوم اکما اسکریپت هستند.
یاهو، مایکروسافت، گوگل و دیگر مخالفان نسخه چهارم، کمیته فرعی را برای طراحی یک به روز رسانی کمتر جاه طلبانهٔ اکما اسکریپت ۳ تشکیل دادند که به‌طور آزمایشی ECMAScript 3.1 نامگذاری شد. این نسخه بر روی امنیت و به روز رسانی کتابخانه‌ها تمرکز دارد و تأکید زیادی نیز بر سازگاری دارد.
پس اتفاق ذکر شده و بحث و اختلاف عموم، تیم ECMAScript 3.1 و ECMAScript 4 با سازش موافقت کردند:
"دو نسخه به طور موازی با هماهنگی بین تیم‌ها کار خواهند کرد تا اطمینان حاصل شود که ECMAScript 3.1 همچنان یک زیرمجموعه اصلی از ECMAScript 4 در مفهوم و سینتکس زبان، خواهد ماند. "
با این حال، فلسفه‌های مختلف در هر تیم منجر به شکست‌های مکرر در قانون زیرمجموعه شدن نسخه‌های قدیمی در نسخه‌های جدیدتر شد، و شکی ایجاد کرد که آیا مخالفان اکما اسکریپت ۴ در آینده از این نسخه حمایت خواهند کرد و آن را ارائه خواهند داد یا نه.
پس از گذشت بیش از یک سال از اختلاف نظر در مورد آینده اکما اسکریپت در کمیته ۳۹ فنی اکما، این دو تیم در ماه ژوئیه ۲۰۰۸ به توافق جدید دست یافتند: برندان آیک اعلام کرد که اکما TC39 بر روی پروژه اکما اسکریپت ۳٫۱ (که بعدها به اکما اسکریپت نسخه ۵ تغییر یافت) با همکاری کامل تمام گروه‌ها و فروشندگان که حداقل دو پیاده‌سازی متقابل را تا اوایل سال ۲۰۰۹ هدف قرار می‌دهند با تمرکز کار خواهند کرد.
در آوریل ۲۰۰۹، اکما TC39 طرح «نهایی» نسخه پنجم را منتشر کرد و اعلام کرد که تست‌های پیاده‌سازی‌های متقابل از این خبر می‌دهند که تا اواسط ماه ژوئیه کامل خواهند شد.
در ۳ دسامبر ۲۰۰۹، نسخه پنجم، اکما-۲۶۲ منتشر شد.
نسخه ششم، که ابتدا اکما اسکریپت ۶ (ES6) شناخته شد و بعداً به اکما اسکریپت ۲۰۱۵ تغییر نام یافت، در ژوئن ۲۰۱۵ نهایی شد. این به روز رسانی دستورالعمل‌های جدیدی را برای نوشتن برنامه‌های پیچیده اضافه می‌کند، از جمله تعریف کلاس‌ها (class Foo { } ) و ماژول‌های ES6 مانند import * as moduleName from "..."; export const Foo، اما آنها را به صورت معنایی در شرایطی همانند حالت سختگیر ECMAScript 5 تعریف می‌کند.
دیگر ویژگی‌های جدید شامل تکرارکننده‌ها و حلقه‌های codice_1/codice_2، ایجاد کننده سبک پایتونی، اصطلاح تابع فلش چاق (“fat” arrow functions (codice_3)) () => {...} ، کلمه کلیدیcodice_4 برای متغییرهای محلی، کلمه کلیدی codice_5 برای متغییرهای ثابت، داده‌های باینری، آرایه‌های تایپ شده، مجموعه‌های جدید (مپ‌ها، مجموعه‌ها و ویک مپ)، پرامیس‌ها ()  var promise1 = new Promise(function(resolve, reject) { promise1.then(function(value) { console.log(promise1); // expected output: [object Promise]
// output : //> [object Promise] //> "foo" var bar = 1; var tStr = `foo ${bar}`; // tStr : "foo 1"
به عنوان اولین مشخصه "هارمونی اکما اسکریپت"، آن را به عنوان "هارمونی ES6 " نیز می‌شناسند.
نسخه هفتم، که به‌طور رسمی اکما اسکریپت ۷ شناخته می‌شود، در ژوئن ۲۰۱۶ نهایی شد.
ویژگی‌های استاندارد اصلی عبارتند از بلوک دامنه برای متغیرها و توابع، الگوهای تخریب (برای متغیرها)، صدا زدن توابع دنباله وار، اپراتور توانی codice_6 برای اعداد، کلمات کلیدیcodice_7 وcodice_8 برای برنامه‌نویسی به صورت غیر همزمان.
نسخه هشتم، که به‌طور رسمی اکما اسکریپت ۲۰۱۷ شناخته می‌شود، در ژوئن ۲۰۱۷ نهایی شد. شامل ساختارهای codice_9 که با استفاده از تولیدکننده‌ها و پرامیس‌ها کار می‌کنند، می‌باشد. اکما اسکریپت ۲۰۱۷ (ES2017)، نسخه هشتم، شامل ویژگی‌هایی برای همزمان سازی و برگردانندگی (صدا زدن توابع (call back))، ادغام سینتکس با پرامیس‌ها (async / waiting) می‌باشد.
نسخه ۹، که به‌طور رسمی اکما اسکریپت ۲۰۱۸ شناخته می‌شود، در ژوئن ۲۰۱۸ نهایی شد.
ویژگی‌های جدید شامل اپراتور rest/spread برای متغیرها (علامت سه نقطه: codice_10)، تکرار غیر همزمان، متد نهایی (codice_11) برای پرامیس‌ها و اضافه کردن امکانات جدید به RegExp می‌باشد.
نسخه ۱۰، که به‌طور رسمی اکما اسکرپت ۲۰۱۹ شناخته می‌شود، در ژوئن ۲۰۱۹ نهایی شد.
نسخه ۱۱، که به‌طور رسمی اکما اسکرپت ۲۰۲۰ شناخته می‌شود، در ژوئن ۲۰۲۰نهایی شد.
ای اس دات نکست نام پویایی است که به هر آنچه که نسخه بعدی در زمان نوشتن است، اشاره دارد. (در واقع امکانات نسخه‌های بعدی اکما اسکریپت)
ویژگی‌های ای اس دات نکست به‌طور صحیح "پیشنهاد نامیده می‌شوند"، زیرا، با این تعریف، مشخصات و امکانات آن هنوز مشخص و نهایی نشده‌است.
زبان اکما اسکریپت شامل ویژگی‌های ساختاری، پویا، برنامه‌نویسی تابعی و مبتنی بر پیش نمونه است.
ES6 با خود امکان استفاده از یک حالت جدید از تعریف توابع، به نام «توابع فلش» را آورده‌است. در ES5 یک تابع به صورت زیر تعریف می‌شود:  var readWikiArticle = function(content) { var readWikiArticle = (content) => {
از اکما اسکریپت ۲۰۱۵ تاکنون، ترنسپایل جاوا اسکریپت بسیار رایج شده‌است.
ترنسپایل یک تلفیق متن به متن است که در آن نسخه‌های جدیدتر جاوااسکریپت در کد اصلی کاربر مورد استفاده قرار می‌گیرند و ترنسپایل کننده آنها را بازنویسی می‌کند تا با مشخصات فعلی سازگاری داشته باشند.
معمولاً ترنسپایل کننده‌ها به نسخه ES3 برای حفظ سازگاری با تمام نسخه‌های مرورگر ترنسپایل می‌کنند.
تنظیمات لازم برای ترنسپایل به یک نسخه خاص می‌تواند بر اساس نیاز پیکربندی شوند. ترنسپایل کردن یک گام برای فرایند ساخت اضافه می‌کند و گاهی اوقات برای جلوگیری از استفاده از پولی فیلز () نیز می‌تواند استفاده شود. Polyfills اجازه می‌دهد به وسیلهٔ یک فایل جاوا اسکریپتی که ویژگی‌های خاصی را اضافه می‌کند ویژگی‌های اضافی، اضافه شود.
در سال ۲۰۱۰، Ecma International شروع به ایجاد یک آزمون استاندارد برای اکما اسکریپت Ecma-262 کرد.
Test262 یک مجموعه آزمون سازگاری اکما اسکریپت است که می‌تواند مورد استفاده قرار گیرد تا مقدار نزدیک پیاده‌سازی یک جاوا اسکریپت به مشخصات اکما اسکریپت ۵ را بررسی کند. مجموعه تست شامل هزاران تست اختصاصی است که هر کدام از آنها یک مشخصهٔ خاص از مشخصات اکما اسکریپت را آزمایش می‌کند.
توسعه test262 یک پروژه کمیته ۳۹ فنی اکما (TC39) است. چارچوب تست‌ها و آزمایش‌های اختصاصی توسط اعضای سازمان‌های TC39 ایجاد شده و به اکما برای استفاده در Test262 کمک می‌کنند.
کمک‌های مهمی توسط گوگل (Sputnik testuite) و مایکروسافت که هر دو در بیش از هزاران آزمایش کمک کردند، شکل گرفت شد. مجموعه آزمون Test262 در حال حاضر شامل بیش از ۱۱٬۰۰۰ آزمون است و توسعه آن فراتر رفته‌است.
مشخصات اکما اسکریپت از طریق ES7 در مرورگرهای وب اصلی به خوبی پشتیبانی می‌شوند. جدول زیر نشان دهنده نرخ سازگاری نسخه‌های فعلی نرم‌افزارهای مرورگرهای وب با توجه به آخرین نسخه‌های اخیر اکما اسکرپیت است.