اکما اسکریپت

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

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

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

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

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

جدول زیر لیست نسخه‌های استاندارد ES را به همراه سال انتشار و تعدادی از مهمترین ویژگی‌های هر نسخه ارائه می‌دهد.
+نسخهسال انتشارتوضیحES11997اولین ویرایش استاندارد ES که شامل ویژگی‌های اساسی و ابتدایی مورد نیاز برای یک زبان اسکریپت‌نویسی تفسیری (interpreted) بود.ES2, ES31998, 1999این دو نسخه به فاصله‌ی کمتر از یک سال معرفی شدند و با برخی تغییرات ویرایشی و نیز مواردی مثل عبارات منظم یا regular expressions و ساختار try/cath برای مدیریت خطاها همراه بودند.ES52009در این نسخه تغییراتی اساسی را شاهد بودیم و مواردی مانند پشتیبانی از فرمت json و متدهایی برای کار با آرایه‌ها و رشته‌های متنی از جمله مهترین امکانات اضافه شده به این ویرایش بودند.ES62015این نسخه با ویژگی‌های اساسی مانند سینتکس کلاس و ماژول همراه بود که جاوااسکریپت را از یک زبان اسکریپت‌نویسی به یک زبان برنامه‌نویسی چندمنظوره و مناسب برای مهندسی نرم‌افزار در مقیاس وسیع تبدیل کرد.ES20162016در این ویرایش، تغییرات کوچکی مانند معرفی یک عملگر جدید (**) برای انجام محاسبات توانی در ریاضیات و چند متد جدید برای کار با داده‌ها به زبان اضافه شدند.ES20172017چند متد جدید برای کار با اشیاء و رشته‌های متنی و نیز توابع async مهمترین قابلیت‌های ارائه‌شده در این ویرایش بودند.ES20182018در این ویرایش نیز بهبودها و اصلاحاتی برای کار با عبارات منظم ارائه شد.ES20192019در این نسخه، متدهای جدیدی برای کار با آرایه‌ها و اشیاء و تبدیل آنها به یکدیگر و نیز بهبودهایی در ساختار try-cath و تعدادی ویژگی دیگر به زبان اضافه شدند.ES20202020در این نسخه امکان کار با اعداد صحیح خیلی بزرگ و نیز بهبودهایی در import و export ماژول‌ها مانند امکان import کردن ماژول به صورت دینامیک (یعنی همان کاری که webpack یا babel انجام می‌دهند) به زبان افزوده شده است.ES20212021در این نسخه نیز تعدادی ویژگی پیشرفته برای کار با promise و finalizer به همراه مواردی مانند امکان استفاده از کاراکتر underscore به عنوان جداکننده‌ی ارقام و امکان ترکیب عملگرهای منطقی با عملگر تخصیص معرفی شدند.ES20222022در این نسخه ویژگی‌هایی مانند امکان تعریف فیلدها و متدهای private، امکان تعریف اعضای استاتیک و بهبودهایی در ارتباط با برنامه‌نویسی موازی معرفی شد.ES20232023در این نسخه تعدادی قابلیت و متد جدید که بیشتر آنها به آرایه‌ها و شیء Promise مربوط هستند، معرفی شد.ES20242024در این نسخه تعدادی قابلیت جدید مانند امکان استفاده از WeakRef و FinalizationRegistry برای مدیریت حافظه معرفی شد.
JavaScript تنها یکی از پیاده‌سازی‌های استاندارد ECMAScript است. پیاده‌سازی‌های دیگری نیز مانند JScript از مایکروسافت و ActionScript از Adobe وجود داشته‌اند. طبق قوانین استانداردسازی، هر پیاده‌سازی باید تمام قابلیت‌های تعریف‌شده در ES را پیاده‌سازی کند، ولی می‌تواند قابلیت‌های اضافی نیز ارائه دهد. همین موضوع در سال‌های نخستین باعث اختلافاتی بین مرورگرها شد که به «دوران جنگ اول مرورگرها» شهرت دارد

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

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

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

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

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

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

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

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

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

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

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

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

مشخصات اکما اسکریپت از طریق ES7 در مرورگرهای وب اصلی به خوبی پشتیبانی می‌شوند. جدول زیر نشان دهنده نرخ سازگاری نسخه‌های فعلی نرم‌افزارهای مرورگرهای وب با توجه به آخرین نسخه‌های اخیر اکما اسکریپت است.
 موتور اسکریپت برنامه‌های مرجع سازگاریES5 is the baseline for this test suite. The conformance rate for other editions reflects support for new features only, not a comprehensive score. ES5 ES6 ES7 (2016) جدیدتر (2017 +)Composite score that includes new features from ES7 through next edition drafts مانکی اسپایدر فایرفاکس ۹۴ ۱۰۰٪ ۹۸٪ ۱۰۰٪ ۱۰۰٪ کروم وی ۸ اپرا ۸۰، گوگل کروم ۹۵، مایکروسافت اج ۹۵ ۱۰۰٪ ۹۸٪ ۱۰۰٪ ۱۰۰٪ جاوا اسکریپت کور (Nitro) سافاری ۱۵ ۱۰۰٪ ۹۹٪ ۱۰۰٪ ۹۰٪

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

 منابع 

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


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

 استانداردهای اکما 
 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) (ژوئن ۲۰۰۴)

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