آشنایی با زبان های برنامه نویسی سطح پایین و سطح بالا


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

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

به جای روشن یا خاموش کردن این سوییچ ها به صورت دستی، زبان ماشین یا همان صفر و یک این امکان را به شما می‌دهد تا با 0 و 1 که 0 به معنی خاموش و 1 به معنی روشن است، این سوییچ ها را خاموش و روشن کنید.

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

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

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

اگرچه که زبان اسمبلی به مراتب از زبان ماشین -یا همان صفر و یک- راحت‌تر است، اما به هر حال برای ساخت نرم افزارهای بزرگ و پیچیده زبانی دشوار برای برنامه نویسان محسوب می شود. در گذشته، بسیاری از نرم‌افزارها با استفاده از این زبان نوشته می‌شد اما به مرور که برنامه‌ها پیچیده‌تر شدند، ثابت شد که زبان اسمبلی زبان اثربخشی برای کدنویسی نیست!

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

نوشتن یک برنامه به زبان ماشین -حتی اگر آن برنامه خیلی هم ساده باشد- کار نسبتاً دشواری است. بسیاری از برنامه نویسان از زبان اسمبلی در جاهایی که نیاز به سرعت و اثربخشی بالا دارند استفاده می‌کنند اما توجه داشته باشیم که برنامه‌های نوشته شده با استفاده از زبان اسمبلی به مراتب کندتر از برنامه‌های نوشته شده با زبان ماشین هستند چرا که برای اجرا، برنامه‌های نوشته شده با زبان اسمبلی ابتدا می بایست به زبان ماشین تفسیر شوند که معمولاً این کار توسط برنامه‌هایی تحت عنوان Assembler انجام می شود که این اسمبلر کارش این است که یک برنامه‌ای که با استفاده از زبان اسمبلی نوشته شده باشد را گرفته و آن را تبدیل به زبان ماشین یا همان صفر و یک کند.

توجه داشته باشیم که هر پردازنده ای صرفاً زبان اسمبلی خاص خود را می فهمد. بنابراین یک پردازنده ی Intel Core 2 زبان اسمبلی پردازنده PowerPC را نمی‌فهمند و بالعکس. به هر حال برخی پردازنده ها هم هستند که با سایر پردازنده ها تعامل خوبی دارند مثل پردازنده های AMD که مثلاً با پردازنده های اینتل سازگار می باشند.

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

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

هدف اصلی طراحی زبان‌های High-level یا همان سطح بالا این بوده است تا فرایند برنامه نویسی راحت‌تر گردد. بنابراین به جای این که به سیستم دستور دهیم تا عدد 2 را در رجیستر ذخیره سازد، سپس عدد 3 را به آن اضافه کند و در نهایت خروجی آن را بگیرد، زبان‌های برنامه نویسی سطح بالا این امکان را در اختیار برنامه نویس قرار می‌دهند تا به سیستم هر دستوری که می‌خواهند بدهند و اصلا کاری به این که سیستم قرار است به چه شکل آن دستور یا دستورات را عملی سازد نداشته باشند.

زبان‌های برنامه نویسی سطح بالا همچون فورتران،‌ بیسیک، کوبول و پاسکال منجر به این شدند تا برنامه نویسان وارد جزئیات برنامه نویسی و نحوه ی کار پردازنده نشوند اما این دور بودن از جزئیات کار منجر به این می‌شد تا در برخی جاها دست برنامه نویسان آن طور که باید و شاید باز نباشد بنابراین برای آن که فصل مشترکی مابین زبان‌های سطح بالا و زبان اسمبلی -که یک زبان سطح پایین است- ایجاد شود، زبانی تحت عنوان زبان برنامه نویسی C ابداع شد.

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

زبان برنامه نویسی C این امکان را به برنامه نویسان می‌دهد تا پردازنده را همچون زبان اسمبلی کنترل کنند اما در عین حال برنامه‌هایی بنویسند که برای انسان‌ها قابل فهم و قابل خواندن و نوشتن باشند. بسیاری از برنامه‌های کاربردی که امروزه می‌بینیم مثل سیستم عامل های ویندوز، لینوکس، مکینتاش و ... با استفاده از این زبان نوشته شده‌اند و زبان C یک زبان مادر در دنیای برنامه نویسی محسوب می شود.

با این تفاسیر، دیگر نیازی به توضیح نیست که چرا بسیاری از برنامه‌های کاربردی دنیا با استفاده از زبان برنامه نویسی سی نوشته می‌شوند (در واقع این زبان هم خوبی‌های زبان اسمبلی در سرعت را داشته و هم خوانایی زبان‌های سطح بالا را برای ویرایش و توسعه ی نرم‌افزار توسط سایر برنامه نویسان را دارا است.)

نکته
در پاسخ به این سؤال که سریع‌ترین زبان برای صحبت کردن با سی پی یو آیا زبان ماشین، زبان اسمبلی، زبان‌های سطح بالا یا زبان سی است، بایستی گفت که مسلماً زبان ماشین -یا همان صفر و یک- سریع‌ترین زبان برنامه نویسی دنیا است چرا که سیستم‌ها فقط و فقط زبان ماشین را می‌فهمند و به نوعی می‌شود گفت که زبان ماشین، زبان مادری آن‌ها است!

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

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محسن
محسن
بعد از زبان های سطح بالا فکر می کنم visual programming language می تونن قرار بگیرن که با استفاده از گرافیک و جلوه های بصری میشه برنامه نویسی کرد
برای مثل میشه به زبان برنامه نویسی Scratch و محیط کدنویسی vvvv اشاره کرد، برای آشنایی

https://sokanacademy.com/courses/scratch/آموزش-برنامه‌نویسی-به-کودکان


اطلاعات بیشتر در مورد vvvv:
vvvv یک محیط برنامه نویسی ترکیبی از متن و موارد تصویری هست که هدف اصلیش آسون کردن پروسه ساختن نمونه های اولیه از یک محصول (اپلیکیشن، وب سایت و... ) در آسونترین حالت ممکن هست،
این کار با جلوه ها و آیتم های گرافیکی، موشن گرافیک های real-time و ویدیوها و فایل های صوتی هست که می تونید در پروژه تون ازش استفاده کنید
استفاده از vvvv برای اهداف غیرتجاری رایگان هست ولی برای پروژه های تجاری باید لاینسنس مربوطه تهیه بشه
برای اطلاعات بیشتر می تونید سایت رسمی vvvv رو ببینید
https://vvvv.org/

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

https://sokanacademy.com/forum/3121/با-دوره-ی-آموزشی-زبان-برنامه-نویسی-vvvv-تو-ایران-جایی-برگزار-نمیشه-؟#post-6363
Insight
Insight
در کنار زبان‌های برنامه‌نویسی سطح‌ بالا و سطح پایین، میشه نوع دیگری از زبان‌ ‌‌ها رو هم در این بین در نظر گرفت تحت عنوان زبان‌های برنامه‌نویسی سطح میانی یا Middle-Level Programming Language. این نوع از زبان‌‌ها دارای ویژگی‌هایی از زبان‌‌‌های سطح پایین و ویژگی‌هایی از زبان‌های سطح بالا هستن.
به عنوان مثال، معمولا زبان برنامه‌نویسی سی‌پلاس‌پلاس رو یک زبان سطح میانی در نظر میگیرن. چون علاوه بر نزدیکی که به سخت‌افزار داره و سرعت انجام عملیات، مفاهیم برنامه‌نویسی شی‌گرا رو هم در درون خودش قرار داده.
کاربر میهمان
کاربر میهمان
بسیار عالی و آموزنده بود، مخصوصا قسمت فصل مشترک سطوح بالا و پایین 👍👍
fighter
fighter
در خط 5:یک به یکی تبدیل شود با تشکر
کاربر میهمان
کاربر میهمان
عالی، روان و قابل فهم
مرسی از سکان آکادمی
Computer
Computer
عالیه که با زبان ساده آموزش می دین :)
Majid Pour.
Majid Pour.
اینکه به زبانی ساده توضیح میدین بسیار عالی
اما کاش از تصویر و فلوچارت هم برای شیوه برقراری ارتباط اجزای مختلف استفاده می کردید
ممنون
کاربر میهمان
کاربر میهمان
مگه کدهای زبان های برنامه نویسی مثل c++ توسط کامپایلر به زبان ماشین یا همون صفر و یک تبدیل نمیشن؟ پس چرا این زبان های برنامه نویسی کند هستن؟ یا مثلا همون اسمبلی نسبت به زبان ماشین
Vahid 95
Vahid 95
هنوز مبتدی هستم ولی درسته گفته کنده اما ب نسبت زبان سطح بالا چون بلاخره یه برنامه واسط میاد کد ها رو ب زبان باینری یا همون زبان ماشین تبدیل کنه
منتهی فک نمیکنم اونقد کند باشه که میگین
مثلا سرعت پردازش پایتون نسبت ب فرترن پایین تره ولی دلیل نمیشه گفت کنده پس استفاده نشه!یه چیزه نسبی هستش

در پاسخ به

Saeed
Saeed
این آقا که دوره زبون برنامه اسمبلی رو بصورت رایگان در لینک زیر آموزش میده میگه اسمبلی زبون خیلی سختی نیست و میشه براحتی یاد گرفتش:
https://www.youtube.com/playlist?list=PL4C2714CB525C3CD7
Saeed
Saeed
با زبون اسمبلی میشه برنامه ها رو مهندسی معکوس کرد. یکی از راههای کرک نرم افزار ها هم از همین روشه.
رضا بختیاری
رضا بختیاری
يعني بايد حتما زبان C ياد بگيريم ؟؟؟؟!!!!
محسن
محسن
بسیار عالی
یک نکته که بایستی مد نظر برنامه نویس ها باشد این هست که حجم فایل خروجی در برنامه نویسی سطج پایین به مراتب پایین تر از برنامه نویسی در سطح بالا هست .
لازم به ذکر است ویروسهایی که عملکرد خاص دارن به زبان سطح پایین نگارش شده اند .
CIna Deuxshiri
CIna Deuxshiri
البته در جاهایی به زبان سی و سی پلاس پلاس، زبان های سطح میانی می گویند. چون هم قابلیت زبان های سطح بالا رو دارند و هم سطح پایین. درضمن بد نیست بدونید که معادل فارسی رجیستر، ثبات (SABBAT) هست.