اکما اسکریپت
| پارادایم برنامهنویسی | چندالگویی: بر پایه پیشنمونه، تابعی، دستوری |
|---|---|
| طراحی شده توسط | برندان آیک، اکما اینترنشنال |
| ظهوریافته در | ۱۹۹۷ |
| کمزور، پویا | |
| وبگاه | |
| پیادهسازیهای بزرگ | |
| جاوااسکریپت, SpiderMonkey, V8, اکشناسکریپت, جیاسکریپت, QtScript, InScript, Google Apps Script، Google Apps Script | |
| متأثر از | |
| سلف, HyperTalk, AWK, C, کافیاسکریپت, پرل, پایتون, جاوا, اسکیم | |
![]() | |
| پسوند(های) نام پرونده | .es |
|---|---|
| نوع رسانهٔ اینترنتی | application/ecmascript |
| توسعهدهنده | سان مایکروسیستمز، اکما اینترنشنال |
| ارائهٔ اولیه | ژوئن ۱۹۹۷ |
| آخرین نسخه | ویرایش ۱۹ (ژوئن ۲۰۲۴) |
| گونه | زبان اجرانامهنویسی |
| وبگاه | |
اکما اسکریپت (به انگلیسی: ECMAScript) با کوتهنوشت ES[۱] مشخصات یک زبان اسکریپتی است که توسط اکما اینترنشنال در ECMA-262 و ISO/IEC 16262 استاندارد شدهاست. اکما اسکریپت برای استانداردسازی جاوا اسکریپت ایجاد شدهاست تا بتواند پیادهسازی چندگانه مستقل را تقویت کند. از زمان انتشار اولین استاندارد، جاوا اسکریپت به عنوان معروفترین پیادهسازی اکما اسکریپت، باقی مانده است. دیگر پیادهسازی های شناخته شده شامل جیاسکریپت و اکشناسکریپت میشوند.[۲]
اکما اسکریپت بهطور معمول برای اسکریپ نویسی سمت کلاینت در وب جهان گستر و بهطور فزایندهای برای نوشتن برنامههای سرور و سرویسهایی که از نود جیاس استفاده میکنند، استفاده میشود.
تاریخ
[ویرایش]مشخصات اکما یک ویژگی استاندارد شده از یک زبان اسکریپتی است که توسط برندان آیک از نت اسکیپ طراحی شدهاست. در ابتدا موچا، بعداً لایو اسکریپت، و در نهایت جاوا اسکریپت نامگذاری شد.[۳] در دسامبر ۱۹۹۵ سان مایکروسیستمز و نت اسکیپ جاوا اسکریپت را در مطبوعات اعلام کردند.[۴] اولین نسخه اکما-۲۶۲ توسط مجمع عمومی اکما در ژوئن ۱۹۹۷ تصویب شد. چندین نسخه استاندارد زبان از آن زمان منتشر شدهاست. نام «اکما اسکریپت» بین سازمانهای مربوط به استانداردسازی زبان با سازش انتخاب شد، به خصوص نت اسکیپ و مایکروسافت، که اختلافات آنها در جلسات اولیه استانداردها جلسات را تحت سلطه خود درمیآورد. آیک اظهار داشت که «اکما اسکریپت همیشه یک نام تجاری نامناسب است که به نظر میرسد مانند یک بیماری پوستی است.»[۵]
در حالی که هر دوی جاوا اسکریپت و جی اسکریپت با اکما اسکریپت سازگار هستند، آنها همچنین ویژگیهای اضافی را که در مشخصات اکما مشخص نشدهاند، ارائه میدهند.[۶]
با وجود اینکه جاوااسکریپت در ابتدا بهعنوان یک زبان اسکریپتنویسی ساده برای افزودن تعاملات کوچک به صفحات وب طراحی شده بود، اما بهمرور زمان مسیر تکامل آن به سمتی رفت که از ماهیت اولیه خود فاصله گرفت و به یک زبان برنامهنویسی چندمنظوره و قدرتمند برای توسعه نرمافزارهای پیچیده تحت وب تبدیل شد. نام جاوااسکریپت که در زمان معرفی، برای بهرهبردن از محبوبیت زبان جاوا انتخاب شده بود، باعث بروز سوءتفاهمهایی درباره ماهیت این زبان شد؛ در حالی که جاوااسکریپت از لحاظ مفهومی و ساختاری تفاوتهای بسیاری با جاوا دارد و تنها شباهت ظاهری گرامری میان آنها وجود دارد.[۷]
جدول زیر لیست نسخههای استاندارد ES را به همراه سال انتشار و تعدادی از مهمترین ویژگیهای هر نسخه ارائه میدهد.[۸]
| نسخه | سال انتشار | توضیح | |
|---|---|---|---|
| ES1 | 1997 | اولین ویرایش استاندارد ES که شامل ویژگیهای اساسی و ابتدایی مورد نیاز برای یک زبان اسکریپتنویسی تفسیری (interpreted) بود. | |
| ES2, ES3 | 1998, 1999 | این دو نسخه به فاصلهی کمتر از یک سال معرفی شدند و با برخی تغییرات ویرایشی و نیز مواردی مثل عبارات منظم یا regular expressions و ساختار try/cath برای مدیریت خطاها همراه بودند. | |
| ES5 | 2009 | در این نسخه تغییراتی اساسی را شاهد بودیم و مواردی مانند پشتیبانی از فرمت json و متدهایی برای کار با آرایهها و رشتههای متنی از جمله مهترین امکانات اضافه شده به این ویرایش بودند. | |
| ES6 | 2015 | این نسخه با ویژگیهای اساسی مانند سینتکس کلاس و ماژول همراه بود که جاوااسکریپت را از یک زبان اسکریپتنویسی به یک زبان برنامهنویسی چندمنظوره و مناسب برای مهندسی نرمافزار در مقیاس وسیع تبدیل کرد. | |
| ES2016 | 2016 | در این ویرایش، تغییرات کوچکی مانند معرفی یک عملگر جدید (**) برای انجام محاسبات توانی در ریاضیات و چند متد جدید برای کار با دادهها به زبان اضافه شدند. | |
| ES2017 | 2017 | چند متد جدید برای کار با اشیاء و رشتههای متنی و نیز توابع async مهمترین قابلیتهای ارائهشده در این ویرایش بودند. | |
| ES2018 | 2018 | در این ویرایش نیز بهبودها و اصلاحاتی برای کار با عبارات منظم ارائه شد. | |
| ES2019 | 2019 | در این نسخه، متدهای جدیدی برای کار با آرایهها و اشیاء و تبدیل آنها به یکدیگر و نیز بهبودهایی در ساختار try-cath و تعدادی ویژگی دیگر به زبان اضافه شدند. | |
| ES2020 | 2020 | در این نسخه امکان کار با اعداد صحیح خیلی بزرگ و نیز بهبودهایی در import و export ماژولها مانند امکان import کردن ماژول به صورت دینامیک (یعنی همان کاری که webpack یا babel انجام میدهند) به زبان افزوده شده است. | |
| ES2021 | 2021 | در این نسخه نیز تعدادی ویژگی پیشرفته برای کار با promise و finalizer به همراه مواردی مانند امکان استفاده از کاراکتر underscore به عنوان جداکنندهی ارقام و امکان ترکیب عملگرهای منطقی با عملگر تخصیص معرفی شدند. | |
| ES2022 | 2022 | در این نسخه ویژگیهایی مانند امکان تعریف فیلدها و متدهای private، امکان تعریف اعضای استاتیک و بهبودهایی در ارتباط با برنامهنویسی موازی معرفی شد. | |
| ES2023 | 2023 | در این نسخه تعدادی قابلیت و متد جدید که بیشتر آنها به آرایهها و شیء Promise مربوط هستند، معرفی شد. | |
| ES2024 | 2024 | در این نسخه تعدادی قابلیت جدید مانند امکان استفاده از 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[۱۶] | ES6[۱۷] | ES7 (2016)[۱۸] | جدیدتر (2017 +)[۱۸][۱۹] | ||
| مانکی اسپایدر | فایرفاکس ۹۴ | ۱۰۰٪ | ۹۸٪ | ۱۰۰٪ | ۱۰۰٪ |
| کروم وی ۸ | اپرا ۸۰، گوگل کروم ۹۵، مایکروسافت اج ۹۵ | ۱۰۰٪ | ۹۸٪ | ۱۰۰٪ | ۱۰۰٪ |
| جاوا اسکریپت کور (Nitro) | سافاری ۱۵ | ۱۰۰٪ | ۹۹٪ | ۱۰۰٪ | ۹۰٪ |
جستارهای وابسته
[ویرایش]منابع
[ویرایش]- ↑ Stefanov, Stoyan (2010). JavaScript Patterns. O'Reilly Media, Inc. p. 5. ISBN 978-1-4493-9694-7. Retrieved 2016-01-12.
The core JavaScript programming language [...] is based on the ECMAScript standard, or ES for short.
- ↑ "A Short History of JavaScript". W3C. Archived from the original on 25 November 2017. Retrieved 31 March 2017.
- ↑ Krill, Paul (2008-06-23). "JavaScript creator ponders past, future". InfoWorld. Retrieved 2013-10-31.
- ↑ "Industry Leaders to Advance Standardization of Netscape's JavaScript at Standards Body Meeting". Netscape. November 15, 1996. Archived from the original on 1998-12-03. Retrieved 2013-10-31.
- ↑ "Will there be a suggested file suffix for es4?". Mail.mozilla.org. 2006-10-03. Archived from the original on 21 June 2020. Retrieved 2013-10-31.
- ↑ "JScript VS JavaScript". About.com. 2015-11-25. Archived from the original on 26 November 2015. Retrieved 21 June 2019.
- ↑ «معرفی جاوااسکریپت». learnclasico.com. دریافتشده در ۲۰۲۵-۰۵-۳۱.
- ↑ «معرفی جاوااسکریپت». learnclasico.com. دریافتشده در ۲۰۲۵-۰۵-۳۱.
- ↑ «معرفی جاوااسکریپت». learnclasico.com. دریافتشده در ۲۰۲۵-۰۵-۳۱.
- ↑ «معرفی جاوااسکریپت». learnclasico.com. دریافتشده در ۲۰۲۵-۰۵-۳۱.
- ↑ "About". ECMAScript. Archived from the original on 2012-08-02. Retrieved 2009-12-17.
- ↑ "Arrow Functions: Fat and Concise Syntax in JavaScript". SitePoint (به انگلیسی). 2018-04-09. Retrieved 2018-11-21.
- ↑ "Syntactic Sugar and JavaScript Diabetes". freeCodeCamp.org (به انگلیسی). 2018-02-07. Retrieved 2024-10-08.
- ↑ "Using ES2015 today". Wisdom Geek. 2016-05-12. Retrieved 2018-08-29.
- ↑ ES5 is the baseline for this test suite. The conformance rate for other editions reflects support for new features only, not a comprehensive score.
- ↑ "ECMAScript 5 compatibility table". kangax.github.io (به انگلیسی). Archived from the original on 19 November 2018. Retrieved 2018-11-08.
- ↑ "ECMAScript 6 compatibility table". kangax.github.io (به انگلیسی). Archived from the original on 17 November 2018. Retrieved 2018-11-08.
- ↑ ۱۸٫۰ ۱۸٫۱ "ECMAScript 2016+ compatibility table". kangax.github.io (به انگلیسی). Archived from the original on 24 November 2018. Retrieved 2018-11-08.
- ↑ Composite score that includes new features from ES7 through next edition drafts
پیوند به بیرون
[ویرایش]ایزو استاندارد
[ویرایش]استانداردهای اکما
[ویرایش]- استانداردهای ئیسیامای
- استانداردهای رایانه
- زبانهای اسکریپتنویسی
- زبانهای برنامهنویسی بر پایه پیشنمونه
- زبانهای برنامهنویسی خانواده سی
- زبانهای برنامهنویسی دارای استاندارد ایزو
- زبانهای برنامهنویسی ماشینی پویا
- زبانهای برنامهنویسی مبتنی بر شیء
- معرفیشدههای مرتبط با رایانه در ۱۹۹۷ (میلادی)
- کامپایلرهای کد منبع به کد منبع
