این کلمهها، کلمات کلیدی هستن که وقتی شروع کردم جاوااسکریپت یاد بگیرم (اولین زبان برنامهنویسیه که دارم یاد میگیرم)، خیلی به چشمم خورد. اولش خیلی بهش توجه نمیکردم ولی الان دیگ گفتم برم ببینم اینا چیان چون دیگ داشتن میرفتن تو اعصابم....
قبلش بگم که من فقط طوری مینویسم که خودم متوجه شدم و مطمئنا تعاریف کامل نیستند. از وبسایت زیر هم بیشتریاش رو برداشتم
ECMA International
یه سازمانیه که در حوزه تکنولوژی، استاندارد تعریف میکنه. از سال 1961 شروع به کار کردند و تا الان طیف گستردهای از استانداردها رو به طور سراسری ایجاد کردند.
اکما-262 نام یکی از استانداردهاییه که توسط اکما منتشر شده که شامل مشخصات کلی و همه منظوره زبان اسکریپتی است.
ECMAScript
اکمااسکریپت درواقع قوانین، جزئیات و دستورالعملهایی رو تعریف میکنه که زبانهای اسکریپتی باید از اونا پیروی کنن تا با اکمااسکریپت سازگار باشند.
پ.ن: راستش نتونستم بفهمم فرق اکما-262 و اکمااسکریپت دقیقا چیه!
A Scripting Language
A programming language designed specifically for acting on an existing entity or system
برای داشتن ایده کلی از زبانهای اسکریپتی، دستورهایی مثل "راه رفتن"، "دویدن" و یا "پریدن" رو در نظر بگیرید. این افعال اگر کسی نباشه که انجامشون بده، معنی خاصی نمیدن یعنی باید یه نفر یا یه حیوانی یا یک شخصیت کارتونی وجود داشته باشه تا این افعال رو انجام بده. زبان اسکریپتی هم در واقع شبیه همین افعال هستن که با وجود یه موجودیت یا سیستم خارجی دیگر معنی پیدا میکنه.
زبانهای اسکریپتی، نوعی از زبانهای برنامهنویسی هستند که حاوی دستو ارالعمل / command های پشت سر هماند که هنگام اجرا پشت سر هم به ترتیب(خطبهخط)، تفسیر (interpret) میشوند.
JavaScript
جاوا اسکریپت، یک زبان برنامهنویسی از نوع اسکریپتی هست که مطابق استانداردهای اکمااسکریپت عمل میکنه. اگر شما ECMAScript بخونی، یاد میگیری چه طوری یه زبان اسکریپتی تولید کنی، و با خوندن داکیومنت جاوااسکریپت، یاد میگیری چه طوری از زبان اسکریپتی،استفاده کنی.
a JavaScript Engine
فایرفاکس، کروم و یا بیشتر browser های معروف میتونن کدهای جاوااسکریپت رو اجرا کنن چون موتورهای جاوااسکریپت دارن. درواقع این موتور، یه برنامه است که کدهای جاوااسکریپت رو میفهمه و اجراشون میکنه. چندتا موتورهای متفاوت وجود داره که مختص به یک یا چند browser هست. به طور مثال v8 موتور کروم، spiderMonkey برای فایرفاکس و chakra برای اینترنت اکسپلورر.
رابطه موتورهای جاوااسکریپت نسبت به browser دقیقا شبیه فهم یک زبان توسط یک فرد هست. تو مثال " راه رفتن" هم، browser دقیقا همون کسی هست که قراره بفهمه که راه رفتن و یا پریدن چه معنی میدن که مطابقش یه جرکتی بزنه.
Difference in browser performance
هرکسی میتونه متوجه بشه معنی "پریدن" رو ولی سرعت واکنششون بهش میتونه متفاوت بشه چونکه سرعت فهم و پردازش اون دستور متفاوته. دقیقا همین تفاوت در فهم و پردازش کدهای جاوااسکریپت بین موتورها وجود داره.
Differences in browser support
همانطور که بین ما فارسی زبانها در فهم زبان فارسی، تفاوتهایی هست، بین browserها هم همین تفاوت وجود داره. با این که همه موتورها، جاوااسکریپت رو میفهمن اما یک سری از موتورها قابلیت فهم , پردازش بیشتری نسبت به بقیه دارند.
همانطور که گفته شد، اکمااسکریپت درواقع حاوی یه سری قوانین و دستورالعملهاییه که تعریف میکنه یه زبان اسکریپتی میتونه چه شکلی باشه. انتشار ورژن جدید از اکمااسکریپت معنیش این نیست که الان همه موتورهای جاواسکریپتی الزاما همه ویژگی جدید رو دارند. اپدیتشدن موتورهای جاوااسکریپت بر طبق اخرین نسخه منتشر شده از اکمااسکریپت، کاملا وابسته به تیم یا سازمان توسعهدهنده اون موتور جیاس هست.
به خاطر همین هم هست که معمولا توسعه دهندهها بیشتر این مدلی سوال میپرسن: "این browser کدوم ورژن از اکما اسکریپت رو پشتیبانی میکنه؟" یا " کدوم از ویژگیهای اکمااسکریپت رو این browser پشتیبانی میکنه؟"
این جدول میتونه جواب خوبی برای این سوالها باشه.
A JavaScript runtime
درواقع، محیطیه که کدهای جیاس توش اجرا میشه و توسط موتورهای جیاس تفسیر میشه. این محیط همون موجودیتی هست که تو تعریف زبان اسکرپتی ازش صحبت شد. کد اول به موتور جیاس داده میشه، دقیقا لحظهای که فهمید باید چه حرکتی بزنه، تو این محیط خروجی کدها رو نشون میده .
اپلیکیشن ها خودشون رو در دسترس میذارن تا توسط جیاس دستکاری بشن. از سمت کلاینت، این محیط browser هست که میاد نقش host object رو بازی میکنه. درواقع window و html document دقیقا همون host objectیی هستند که دقیقا جیاس اومده که اونا رو دستکاری کنه.
تا حالا با window و یا document که host objects هستند کار کردین؟ اینها در واقع بخشی از هسته جیاس مسحوب نمیشن(به خاطر همینم بهش میگن host object وگرنه بهش میگفتن native object). اینها در واقع web API هستند، ابجکتهایی که توسط browser ایجاد شدهاند (ابجکتهایی که تو ECMAScript تعریف نشده اند)، که قراره بستری برای میزبانی جیاس محسوب بشن.
در سمت سرور، محیط runtime جیاس node.js هست. ابجکتهای میزبان سمت سرور مثل فایل سیستم، پردازشگرها و درخواستها، همه توسط node.js فراهم میشوند.
نکته جالب: محیط runtime متفاوت، میتونن موتور جیاس مشابه داشته باشند. مثلا v8 موتور جیاس یی هست که هم در سمت کلاینت یعنی توسط browser کروم استفاده میشه و هم سمت سرور توسط node.js.
ECMAScript 6
6مین ورژن از ECMA-262 هست و تغییرات گستردهای در این نسخه ایجاد شده و باعث توسعه و تحولات زیادی شده.
تو این نسخه، اکمااسکریپت اسمش رو از ES6 به ES2015 تغییر داده تا به سال انتشار این استاندارد، اشاره کنه. یکی از دلایل عوض کردن این اسم اینه که کاربر قبلش میتونست اشتباه بگیره و فکر کنه چون ES6 اسمشه پس سال 2016 هم منتشر شده.
Babel
یه مبدله که کدهای ES6 رو به ES5 تبدیل میکنه.
توسعه دندگان میتونن از ویژگیهایی جدید که با ES6 منتشر شده، استفاده کنند، ولی باید در نظر بگیرند که کدهاشون باید با browser سازگار باشند. درنتیجه از Babel استفاده میشه تا هماهنگیهای لازم رو در جهت معادل سازی ES6 به ES5 انجام بده.
Chicken or the egg
نکته گیجکننده ماجرا تو این داستان اینه که اول جاوااسکرپیت سال 1996 ایجاد شد و بعدش سال 1997 طبق استانداردهای ECMA بینالمللی درآمد و نتیجهاش ایجاد استاندارد ECMAScript شد. و همین که، ازونجایی که جاوااسکریپت مطابق به مشخصات ECMAScript هست، جاوااسکریپت یه مثال پیادهسازیشده از ECMAScript محسوب شده.
به خاطر همین هم هست که میافتیم تو این لوپ که: اکمااسکریپت برمبنای جاوااسکریپته و جاوااسکریپت هم بر مبنای اکمااسکریپته.
دقیقا شبیه این داستانه که میگن ادمها به مرور زمان، تبدیل میشن به والد خودشون.
پ.ن 1: تو یه سری جاها من به جای نوشتن جاوااسکریپت، نوشتم "جیاس". و این که خیلی سعی کردم خودمونی بنویسم، شرمنده!
پ.ن 2: میدونم پر ایراده، چه نگارشی چه فنی. به مرور زمان سعی میکنم دقیقترش کنم. صرفا جهت توجیه ایرادات، این اولین بارمه که من دارم ترجمه فارسی میکنم و اگر یه جاهایی گنگ نوشتم، دلیلش میتونه همین باشه.
پ.ن 3: این مطلب رو من تاجایی صحبت کردم که فهمیدم و یا فکر کردم که فهمیدم.
خیلی ممنون