منظور از زبان‌های اسکریپتی دقیقا چیه؟

زمان تقریبی مطالعه این مقاله: ۳ دقیقه

سلام و درود به میکرولرنی‌های عزیز 😊

گاهی یک سوال در ذهن کسانی که دارند به تازگی برنامه نویسی یاد میگیرن شکل می‌گیره. “زبان‌های اسکریپتی چی هستن؟” این سوال از اون‌جا شکل گرفته که فرد با مفهوم اسکریپت بیگانه هست و نمیتونه خوب درک کنه که دقیقا به چه چیزی داره اشاره می‌کنه. اگه شما هم چنین سوالی در ذهنتون شکل گرفته بهتره با این مقاله هم‌راه بشید تا ببینیم که داستان اسکریپت چیه؟

زبان های اسکریپتی

فکر می کنید بهترین کار برای شناخت زبان های اسکریپتی چیست؟ بهترین راه برای این که بدانیم چرا به آن ها می گویند «اسکریپتی» کدام است؟ بهترین راه این است که ابتدا بدانیم زبان های اسکریپتی اصلا چرا و برای رفع چه نیازی به وجود آمدند. با این کار با خصوصیات اصلی و ذاتی این زبان ها خیلی سریع و جالب آشنا می شویم.

در گذشته برنامه نویسان با استفاده از زبان های برنامه نویسی، چندصد خط تا چند میلیون خط کدنویسی می کردند. سپس برنامه ی نوشته شده را کامپایل کرده و یک فایل اجرایی تولید می کردند (مثلا برای ویندوز یک فایل exe. می ساختند). محصول نهایی هم می شد یک نرم افزار مثل مرورگر اینترنت، ویرایشگر متنی و … . کم کم این نیاز به وجود آمد که توسط برنامه نویسان و حتی گاهی توسط کاربران قابلیت هایی به این برنامه ها اضافه شود.

حالا خود را جای برنامه نویسان یا کاربران بگذارید. می خواهید قابلیتی را از برنامه ی نوشته شده حذف کنید یا به آن اضافه کنید. اگر توسعه دهنده ی آن برنامه خودتان باشید باید این کارها را انجام دهید: از طریق محیطی که در آن برنامه نویسی می کنید به کدها دسترسی پیدا کنید و آن ها را تغییر دهید. سپس باید برنامه ی نوشته شده را دوباره از نو کامپایل کنید. در نهایت فایل اجرایی را ساخته و به هدف خود برسید. تا اینجا مقداری دردسر برای دسترسی به محیط برنامه نویسی و همچنین کامپایل کردن و ساختن دوباره ی برنامه را متحمل شده اید. حالا فرض کنید که کاربر برنامه هستید.  این بار برای رسیدن به هدف خود چه میکنید؟ هیچ، چون دسترسی به هیچ چیز ندارید. پس راه حل برای کمتر کردن این دردسرها چیست؟

شما چه راه‌کاری برای این موضوع دارید؟ شاید با خود فکر میکردید که چقدر خوب میشد اگر برنامه نویس یا کاربر می توانست بدون نیاز به محیط برنامه نویسی به کدها دسترسی پیدا میکرد! مثلا یک فایل متنی وجود داشت که با هر ویرایشگری باز میشد. حتی با !notepad و داخل آن فایل متنی، کدهای برنامه وجود داشت. تازه آن هم نه این کدهای پیچیده بلکه کدهایی ساده و نزدیک به زبان انسان که کاربر راحت یادشان می گرفت. و شاید با خود می گفتید که چقدر خوب بود اگر کدها بعد از تغییر پیدا کردن دیگر نیاز به کامپایل دوباره هم نداشتند و مستقیم اجرا می شدند!

زبان های اسکریپتی دقیقا تمام نیازهای پاراگراف قبل را رفع می کنند. اصلا ایده ی به وجود آمدن زبان های اسکریپتی همین بوده است! به آن فایل متنی «اسکریپت» می گویند و آن زبان ساده و نزدیک به زبان انسان هم «زبان اسکریپتی» یا «زبان اسکریپت نویسی» نام دارد. حالا که به خوبی با مفهوم اسکریپت و زبان های اسکریپتی آشنا شدید، جا دارد بحث را کمی تخصصی تر ادامه دهیم.

منظور از زبان‌های اسکریپتی چیست؟

زبان های اسکریپتی نوعی از زبان های برنامه نویسی هستند که نیاز به مرحله ی کامپایل شدن ندارند بلکه باید تفسیر شوند. به عبارتی زبان های اسکریپت نویسی برای اجرا نیاز به مفسر (interpreter) دارند در حالی که دیگر زبان های برنامه نویسی به کامپایلر نیاز دارند. اگر بخواهیم فرق بین مفسر با کامپایلر را بدانیم، ابتدا باید بدانیم که کامپایلر چیست؟

کامپیوترها کلا زبان های برنامه نویسی را درک نمی کنند و زبان ماشین (تشکیل شده از صفر و یک) را اجرا می کنند. کامپایلر زبان های سطح بالا (مانند Java و #C) را به زبان ماشین تبدیل می کند. اکنون فهمیدیم کامپایلر چه وظیفه ای دارد. حال باید بدانیم که مفسر چه کاری انجام می دهد؟ مفسر هم دقیقا مانند کامپایلر زبان های اسکریپتی را به زبان ماشین تبدیل کرده و اجرا می کند. البته مفسر کل برنامه را یک جا به کد ماشین تبدیل نمی کند بلکه خط به خط این کار را انجام می دهد. به عبارت دیگر، مفسر اسکریپت نوشته شده را را تحویل گرفته و خطوط کد را به ترتیب و یکی پس از دیگری خوانده، کامپایل نموده و سپس اجرا می کند. هنگامی که یک خط کد اجرا شد به سراغ خط بعدی می رود و به همین صورت ادامه می دهد تا به پایان اسکریپت برسد.

تفاوت بین زبان های برنامه نویسی و اسکریپت نویسی

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

سرعت اجرا

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

فایل خروجی

در زبان های برنامه نویسی پس از کامپایل شدن برنامه، در مرحله ی ساختن (build) یک فایل خروجی اجرایی تولید می شود. این فایل عملا یک پکیج فشرده شده شامل کدهای ماشین است. فرمت این فایل خروجی به پلتفرم هدف ربط دارد. مثلا اگر قرار باشد برنامه در سیستم عامل ویندوز اجرا شود فرمت فایل خروجی exe. خواهد بود. (البته در مورد زبان هایی مانند java‌ قضیه کمی متفاوت است که وارد جزییاتش نمی شویم). در مورد زبان‌های اسکریپتی این فایل اجرایی وجود ندارد. تمام خطوط کد درون یک فایل متنی تحت عنوان اسکریپت نوشته می شوند. مثلا درمورد زبان جاوا اسکریپت این فایل دارای فرمت js. است. وقتی یک وب سایت را در مرورگر باز می کنید فایل js. توسط مرورگر دانلود می شود و سپس مفسر موجود در مرورگر آن را تفسیر کرده و اجرا می کند.

نحوه ی اجرا

در زبان های برنامه نویسی فایل اجرایی خروجی برای اجرا شدن نیاز به نرم افزار خاصی ندارد و به طور مستقل اجرا می شود. در زبان های اسکریپت نویسی، اسکریپت برای اجرا شدن نیاز به نرم افزارهای دیگری دارد. مثلا اسکریپت های php برای اجرا نیاز به وب سرور یا مرورگر دارند.

ویژگی های بارز زبان‌های اسکریپتی

  • یادگیری زبان‌های اسکریپتی نسبتاً آسان تر است و مدت زمان کمتری نیاز دارد.
  • کدنویسی و توسعه ی نرم افزار با این زبان ها ساده تر است و زمان کمتری را می طلبد.
  • انتقال و اجرای اسکریپت در سیستم عامل های مختلف به راحتی انجام می شود.
  • تغییر دادن و اصلاح کد راحت تر صورت می گیرد.
  • برای اهداف متن باز (open source) بسیار مناسب است، اگر شما هم مانند من عاشق دنیای متن باز و آزاد باشید، زبان های اسکریپت نویسی را دوست خواهید داشت.

برخی از کاربردهای زبان های اسکریپت نویسی

  • یکی از کاربردهای گسترده زبان‌های اسکریپتی در اپلیکیشن های وب است. این زبان ها هم در سمت سرور و هم در سمت کلاینت کاربرد فراونی دارند. در سمت سرور از زبان های جاوااسکریپت، php ،‌ پایتون ، perl و … استفاده می شود. زبان پرکاربرد سمت کلاینت نیز جاوااسکریپت است.
  • یکی دیگر از کاربردهای این زبان ها در زمینه ی مدیریت سیستم و سرور است. در این زمینه از زبان های shell، perl، پایتون و … استفاده می شود.
  • این زبان ها در نوشتن پلاگین و افزونه برای نرم افزارهای موجود نیز به کار برده می شوند.
  • بازی سازی، مالتی مدیا و استخراج داده از دیتاست ها از دیگر زمینه هایی هستند که زبان های اسکریپت نویسی در آن ها به کار گرفته می شوند.

تعدادی از زبان‌های اسکریپتی

این که آیا یک زبان اسکریپتی است یا خیر، کاملا بستگی به شیوه ی پیاده سازی آن زبان و محیط اجرای کدها در آن زبان دارد. ما می توانیم برای هر زبانی که بخواهیم یک کامپایلر و یا یک مفسر طراحی کنیم. اگر آن زبان از طریق مفسر اجرا شود و فایل اجرایی نیز نداشته باشد اسکریپتی است و اصطلاحاً به آن «مفسری» نیز می گویند. اگر همان زبان از طریق کامپایلر کامپایل شود و یک فایل اجرایی به ما تحویل داده شود، دیگر اسکریپتی نیست و اصطلاحاً به آن زبان «کامپایلری» می گویند.

براساس مطالب بالا نمی توان یک زبان را ذاتاً اسکریپتی یا کامپایلری نامید! پس چرا مثلا می گویند پایتون یک زبان اسکریپتی است؟ بگذارید با زبانی ساده تر پاسخ این سوال را بدهم: برنامه نویسان برای هر زبان برنامه نویسی به معروف ترین روش پیاده سازی اش نگاه می کنند و بر اساس آن قضاوت می کنند. مثلاً زبان ++C عموماً کامپایلر دارد و فایل اجرایی نیز تحویل می دهد، پس اسکریپتی نیست. هرچند می توان برای ++C نیز مفسر نوشت و به صورت اسکریپتی از آن استفاده کرد. ولی چون به طور عمومی ++C کامپایلری است از هر برنامه نویسی که بپرسید «آیا ++C اسکریپتی است؟» پاسخ او «خیر» است. اجازه بدهید که در ادامه با چند مورد از زبان‌های اسکریپتی پرکاربرد به طور مختصر آشنا شویم.

جاوااسکریپت

این زبان را می توان یکی از جزءهای اصلی حوزه ی توسعه ی وب دانست. ابتدا از این زبان برای پویاتر کردن صفحات وب استفاده می شد ولی اکنون بسیار فراتر از گذشته است. این روزها تقریباً تمامی قسمت های فرانت اند بر اساس این زبان نوشته می شود. همچنین از زبان جاوااسکریپت می توان در قسمت بک اند و سمت سرور نیز استفاده کرد. از دیگر کاربردهای این زبان می توان به حوزه های اپلیکیشن موبایل، اپلیکیشن دسکتاپ، توسعه ی بازی و اینترنت اشیاء نیز اشاره کرد.

البته اخیراً در رابطه با اسکریپتی بودن زبان جاوا اسکریپت اختلافاتی وجود دارد. دلیل این اختلاف نظرها نیز وجود موتورهایی مانند V8 است که به همراه مرورگرها ارائه شده اند. نحوه ی اجرای کدهای جاوااسکریپت در این موتورها گاهاً شبیه به زبان های کامپایلری است. ولی هنوز هم در اکثر جاها جاوااسکریپت یک زبان اسکریپتی نامیده می شود و اکثر برنامه نویسان نیز این حرف را قبول دارند. به همین دلیل من نیز آن را در لیست زبان‌های اسکریپتی آورده ام.

پایتون

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

PHP

زبان برنامه نویسیPHP‌  یک زبان بک اند است که در سمت سرور اجرا می شود. هم اکنون حدود ۸۰ درصد از وب سایت های دنیا از زبان PHP استفاده کرده اند. سیستم های مدیریت محتوای معروفی مانند وردپرس، جوملا و دروپال با این زبان نوشته شده اند.

Perl

زبانِ نسبتاً معروف Perl یک زبان اسکریپتی و دارای ویژگی هایی خلاقانه است. در سرورها از این زبان برای کاربردی هایی مثل پردازش متون، گزارش گیری و … استفاده می شود. وبسایت های پر ترافیکی مانند IMDB از زبان Perl نیز استفاده کرده اند.

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

درباره‌ی احسان عبداللهی

احسان عبداللهی
احسان عبداللهی هستم | کارشناسی الکترونیک خوندم و کارشناسی ارشد مخابرات | در سال 94 وب سایت میکرولرن را راه اندازی کردم | سعی کردم هر چیزی را به صورت کاربردی دنبال کنم، برای همین از کارشناسی کار با میکروکنترلرهای AVR و ARM، برنامه نویسی C و طراحی PCB را به صورت تخصصی کار کردم و از کارشناسی ارشد برنامه نویسی پایتون ، Computer vision و deep learning را به صورت تخصصی و کاربردی شروع کردم | الان هم سعی میکنم همیشه خودم را به روز نگه دارم و لذت کار کردن با دنیای برنامه نویسی و امبدد سیستم ها را به دیگران انتقال بدم

۲ نظر

  1. Avatar

    عالی! خوشحالم که بازم فعالیت رو از سر گرفتید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *