اکما اسکریپت

اکما اسکریپت  با کوته‌نوشت **ES** مشخصات یک زبان اسکریپتی است که توسط اکما اینترنشنال در **ECMA-262** و ISO/IEC 16262 استاندارد شده‌است. اکما اسکریپت برای استانداردسازی جاوا اسکریپت ایجاد شده‌است تا بتواند پیاده‌سازی چندگانه مستقل را تقویت کند. از زمان انتشار اولین استاندارد، جاوا اسکریپت به عنوان معروف‌ترین پیاده‌سازی اکما اسکریپت، باقی مانده است. دیگر پیاده‌سازی های شناخته شده شامل جی‌اسکریپت و اکشن‌اسکریپت می‌شوند. 

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

## تاریخ
مشخصات اکما یک ویژگی استاندارد شده از یک زبان اسکریپتی است که توسط برندان آیک از نت اسکیپ طراحی شده‌است. در ابتدا موچا، بعداً لایو اسکریپت، و در نهایت جاوا اسکریپت نامگذاری شد. در دسامبر ۱۹۹۵ سان مایکروسیستمز و نت اسکیپ جاوا اسکریپت را در مطبوعات اعلام کردند. اولین نسخه اکما-۲۶۲ توسط مجمع عمومی اکما در ژوئن ۱۹۹۷ تصویب شد. چندین نسخه استاندارد زبان از آن زمان منتشر شده‌است. نام «اکما اسکریپت» بین سازمان‌های مربوط به استانداردسازی زبان با سازش انتخاب شد، به خصوص نت اسکیپ و مایکروسافت، که اختلافات آنها در جلسات اولیه استانداردها جلسات را تحت سلطه خود درمی‌آورد. آیک اظهار داشت که «اکما اسکریپت همیشه یک نام تجاری نامناسب است که به نظر می‌رسد مانند یک بیماری پوستی است.»

در حالی که هر دوی جاوا اسکریپت و جی اسکریپت با اکما اسکریپت سازگار هستند، آنها همچنین ویژگی‌های اضافی را که در مشخصات اکما مشخص نشده‌اند، ارائه می‌دهند.

با وجود اینکه جاوااسکریپت در ابتدا به‌عنوان یک زبان اسکریپت‌نویسی ساده برای افزودن تعاملات کوچک به صفحات وب طراحی شده بود، اما به‌مرور زمان مسیر تکامل آن به سمتی رفت که از ماهیت اولیه خود فاصله گرفت و به یک زبان برنامه‌نویسی چندمنظوره و قدرتمند برای توسعه نرم‌افزارهای پیچیده تحت وب تبدیل شد. نام جاوااسکریپت که در زمان معرفی، برای بهره‌بردن از محبوبیت زبان جاوا انتخاب شده بود، باعث بروز سوءتفاهم‌هایی درباره ماهیت این زبان شد؛ در حالی که جاوااسکریپت از لحاظ مفهومی و ساختاری تفاوت‌های بسیاری با جاوا دارد و تنها شباهت ظاهری گرامری میان آن‌ها وجود دارد.

**جدول زیر لیست نسخه‌های استاندارد ES را به همراه سال انتشار و تعدادی از مهمترین ویژگی‌های هر نسخه ارائه می‌دهد.**

JavaScript تنها یکی از پیاده‌سازی‌های استاندارد ECMAScript است. پیاده‌سازی‌های دیگری نیز مانند JScript از مایکروسافت و ActionScript از Adobe وجود داشته‌اند. طبق قوانین استانداردسازی، هر پیاده‌سازی باید تمام قابلیت‌های تعریف‌شده در ES را پیاده‌سازی کند، ولی می‌تواند قابلیت‌های اضافی نیز ارائه دهد. همین موضوع در سال‌های نخستین باعث اختلافاتی بین مرورگرها شد که به «دوران جنگ اول مرورگرها» شهرت دارد

از نسخهٔ ES5 به بعد، امکان استفاده از «حالت سخت‌گیرانه» یا **Strict Mode** برای محدودسازی ویژگی‌های قدیمی و غیراستاندارد فراهم شد. این امکان به توسعه‌دهندگان کمک می‌کند تا از نوشتن کدهای ناسازگار با نسخه‌های جدید خودداری کنند. استفاده از `'use strict'` در ابتدای اسکریپت یا درون بلوک‌های خاص، باعث فعال‌شدن این حالت می‌شود. برخی از ساختارهای ES6 مانند کلاس‌ها نیز به‌صورت ضمنی در strict mode اجرا می‌شوند. 

### تاریخچه نسخه‌ها

## امکانات
زبان اکما اسکریپت شامل ویژگی‌های ساختاری، پویا، برنامه‌نویسی تابعی و مبتنی بر پیش نمونه است.

### سینتکس مختصر
ES6 با خود امکان استفاده از یک حالت جدید از تعریف توابع، به نام «توابع فلش» را آورده‌است. در ES5 یک تابع به صورت زیر تعریف می‌شود: 
```javascript
var readWikiArticle = function(content) {
  // مقاله را بخوان
};
```
 درحالی‌که در ES6، با استفاده از دستور جدید تابع فلش می‌توان آن را به صورت زیر نوشت: 
```javascript
var readWikiArticle = (content) => {
  // مقاله را بخوان
};
```
 توابع فلشی همچنین اتصال متغیر بین توابع را بهبود می‌بخشد.

## ترنسپایل کردن
از اکما اسکریپت ۲۰۱۵ تاکنون، ترنسپایل جاوا اسکریپت بسیار رایج شده‌است. به‌طور تکنیکی، امکانات جدید اکما اسکریپت در ورژن های جدید نوعی سینتکس قندی هستند. 

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

معمولاً ترنسپایل کننده‌ها به نسخه ES3 برای حفظ سازگاری با تمام نسخه‌های مرورگر ترنسپایل می‌کنند.

تنظیمات لازم برای ترنسپایل به یک نسخه خاص می‌تواند بر اساس نیاز پیکربندی شوند. ترنسپایل کردن یک گام برای فرایند ساخت اضافه می‌کند و گاهی برای جلوگیری از استفاده از پولی فیلز (polyfills) نیز می‌تواند استفاده شود. Polyfills اجازه می‌دهد به وسیلهٔ یک فایل جاوا اسکریپتی که ویژگی‌های خاصی را اضافه می‌کند ویژگی‌های اضافی، اضافه شود.

## سازگاری
در سال ۲۰۱۰، Ecma International شروع به ایجاد یک آزمون استاندارد برای اکما اسکریپت Ecma-262 کرد.

Test262 یک مجموعه آزمون سازگاری اکما اسکریپت است که می‌تواند مورد استفاده قرار گیرد تا مقدار نزدیک پیاده‌سازی یک جاوا اسکریپت به مشخصات اکما اسکریپت ۵ را بررسی کند. مجموعه تست شامل هزاران تست اختصاصی است که هر کدام از آنها یک مشخصهٔ خاص از مشخصات اکما اسکریپت را آزمایش می‌کند.

توسعه test262 یک پروژه کمیته ۳۹ فنی اکما (TC39) است. چارچوب تست‌ها و آزمایش‌های اختصاصی توسط اعضای سازمان‌های TC39 ایجاد شده و به اکما برای استفاده در Test262 کمک می‌کنند.

کمک‌های مهمی توسط گوگل (Sputnik testuite) و مایکروسافت که هر دو در بیش از هزاران آزمایش کمک کردند، شکل گرفت شد. مجموعه آزمون Test262 در حال حاضر شامل بیش از ۱۱٬۰۰۰ آزمون است و توسعه آن  فراتر رفته‌است.

مشخصات اکما اسکریپت از طریق ES7 در مرورگرهای وب اصلی به خوبی پشتیبانی می‌شوند. جدول زیر نشان دهنده نرخ سازگاری نسخه‌های فعلی نرم‌افزارهای مرورگرهای وب با توجه به آخرین نسخه‌های اخیر اکما اسکریپت است.

## جستارهای وابسته
* اکما اسکریپت برای اکس‌ام‌ال 
* جاوا اسکریپت
* جی‌اسکریپت
* سیاهه موتور های اکما اسکریپت

## منابع

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

### ایزو استاندارد
* ایزو ۱۶۲۶۲

### استانداردهای اکما
* ECMA-262
** ECMA-262 ECMAScript Language Specification نسخه سوم (دسامبر ۱۹۹۹)
** مشخصات زبان ECMAScript، نسخه ۳ فینال، 24-Mar-۰۰
** ECMA-262 ECMAScript Language Specification ویرایش پنجم (دسامبر ۲۰۰۹)
** ECMA-262 ECMAScript Language Specification 5.1 (ژوئن ۲۰۱۱)
* ECMA-290 ECMAScript Components Specification (ژوئن ۱۹۹۹)
* ECMA-327 ECMAScript 3rd Compact Profile (ژوئن ۲۰۰۱)
* ECMA-357 ECMAScript برای مشخصات XML (E4X) (ژوئن ۲۰۰۴)

رده:استانداردهای ئی‌سی‌ام‌ای
رده:استانداردهای رایانه
رده:زبان‌های اسکریپت‌نویسی
رده:زبان‌های برنامه‌نویسی بر پایه پیش‌نمونه
رده:زبان‌های برنامه‌نویسی خانواده سی
رده:زبان‌های برنامه‌نویسی دارای استاندارد ایزو
رده:زبان‌های برنامه‌نویسی ماشینی پویا
رده:زبان‌های برنامه‌نویسی مبتنی بر شیء
رده:صفحات با ترجمه بازبینی‌نشده
رده:معرفی‌شده‌های مرتبط با رایانه در ۱۹۹۷ (میلادی)
رده:مقاله‌ها با نحو منسوخ‌شده تصویر
رده:ویکی‌سازی رباتیک
رده:کامپایلرهای کد منبع به کد منبع