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

از ویکیپدیا، دانشنامه آزاد
پرش به ناوبری پرش به جستجو

در علوم کامپیوتر ، یک زبان برنامه نویسی سطح بالا است زبان برنامه نویسی با قوی انتزاع از جزئیات این کامپیوتر . برخلاف زبان‌های برنامه‌نویسی سطح پایین ، ممکن است از عناصر زبان طبیعی استفاده کند، استفاده از آن آسان‌تر باشد، یا ممکن است بخش‌های قابل توجهی از سیستم‌های محاسباتی (مثلاً مدیریت حافظه ) را خودکار کند (یا حتی کاملاً پنهان کند ) و فرآیند توسعه یک برنامه را ساده‌تر کند و قابل درک تر از زمانی که از زبان سطح پایین استفاده می کنید. مقدار انتزاع ارائه شده مشخص می کند که یک زبان برنامه نویسی چقدر "سطح بالا" است. [1]

در دهه 1960، زبان های برنامه نویسی سطح بالا که از کامپایلر استفاده می کردند، معمولاً کدهای خودکار نامیده می شدند . [2] نمونه‌هایی از کدهای خودکار COBOL و Fortran هستند . [3]

اولین زبان برنامه نویسی سطح بالا که برای کامپیوتر طراحی شد Plankalkül بود که توسط Konrad Zuse ایجاد شد . [4] با این حال، در زمان او اجرا نشد و مشارکت های اولیه او به دلیل جنگ جهانی دوم ، جدا از تأثیر این زبان بر زبان "Superplan" توسط هاینز روتیشاوزر و همچنین تا حدی الگول ، تا حد زیادی از پیشرفت های دیگر جدا شد . اولین زبان سطح بالا که به طور قابل توجهی گسترده شد ، Fortran بود ، یک توسعه مستقل از ماشین از سیستم‌های Autocode قبلی IBM . الگول خانواده، با الگول 58 تعریف شده در سال 1958 و الگول 60در سال 1960 توسط کمیته‌های دانشمندان کامپیوتر اروپایی و آمریکایی تعریف شد، بازگشت و همچنین توابع تودرتو در محدوده واژگانی معرفی شد . الگول 60 همچنین اولین زبان با تمایز واضح بین پارامترهای مقدار و نام و معنای متناظر آنها بود . [5] الگول همچنین چندین مفهوم برنامه‌نویسی ساخت‌یافته را معرفی کرد ، مانند ساختارهای while-do و if-then-else و نحو آن اولین موردی بود که به شکل رسمی توصیف شد - " Backus-Naur form " (BNF). تقریباً در همان دوره، Cobolرکوردها را معرفی کرد (که ساختارها نیز نامیده می شود) و لیسپ برای اولین بار یک انتزاع کاملاً عمومی لامبدا را در یک زبان برنامه نویسی معرفی کرد.

ویژگی ها

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

جریمه انتزاع

زبان‌های سطح بالا قصد دارند ویژگی‌هایی را ارائه دهند که وظایف رایج را استاندارد می‌کند، اشکال‌زدایی غنی را مجاز می‌سازد، و آگنوستیک معماری را حفظ می‌کند. در حالی که زبان های سطح پایین اغلب کد کارآمدتری را از طریق بهینه سازی برای یک معماری سیستم خاص تولید می کنند. جریمه انتزاعی هزینه ای است که تکنیک های برنامه نویسی سطح بالا به دلیل ناتوانی در بهینه سازی عملکرد یا استفاده از سخت افزار خاص به دلیل عدم استفاده از برخی منابع معماری سطح پایین پرداخت می کنند. برنامه نویسی سطح بالا ویژگی هایی مانند ساختارها و عملیات داده های عمومی تر، تفسیر زمان اجرا و فایل های کد میانی را نشان می دهد. که اغلب منجر به اجرای عملیات بسیار بیشتر از نیاز، مصرف حافظه بیشتر و اندازه برنامه باینری بزرگتر می شود. [6] [7][8] به همین دلیل، کدی که نیاز به اجرای سریع و کارآمد دارد، ممکن است به استفاده از زبان سطح پایین‌تر نیاز داشته باشد، حتی اگر زبان سطح بالاتر کدنویسی را آسان‌تر کند. در بسیاری از موارد، بخش‌های حیاتی یک برنامه عمدتاً در یک زبان سطح بالا می‌توانند به صورت دستی در زبان اسمبلی کدگذاری شوند ، که منجر به یک برنامه بهینه‌سازی شده بسیار سریع‌تر، کارآمدتر یا به سادگی قابل اطمینان‌تر می‌شود.

با این حال، با پیچیدگی روزافزون معماری‌های ریزپردازنده مدرن ، کامپایلرهای خوب طراحی شده برای زبان‌های سطح بالا اغلب کدهایی را تولید می‌کنند که از نظر کارآیی با آنچه اکثر برنامه‌نویسان سطح پایین می‌توانند با دست تولید کنند، قابل مقایسه است و انتزاع بالاتر ممکن است تکنیک‌های قوی‌تری را برای ارائه بهتر فراهم کند. نتایج کلی نسبت به همتایان سطح پایین خود در تنظیمات خاص. [9] زبان های سطح بالا مستقل از یک معماری سیستم محاسباتی خاص طراحی می شوند. این امر اجرای یک برنامه نوشته شده به چنین زبانی را در هر سیستم محاسباتی با پشتیبانی سازگار برای Interpreted یا JIT تسهیل می کند.برنامه زبان های سطح بالا را می توان با پیشرفت طراحان آنها بهبود بخشید. در موارد دیگر، زبان‌های سطح بالا جدید از یک یا چند زبان دیگر با هدف جمع‌آوری محبوب‌ترین ساختارها با ویژگی‌های جدید یا بهبودیافته تکامل می‌یابند. نمونه ای از این Scala است که سازگاری عقب مانده با جاوا را حفظ می کند، به این معنی که برنامه ها و کتابخانه های نوشته شده در جاوا همچنان قابل استفاده خواهند بود حتی اگر یک فروشگاه برنامه نویسی به Scala سوئیچ کند. این انتقال را آسان تر می کند و طول عمر چنین برنامه نویسی سطح بالایی را نامحدود می کند. در مقابل، برنامه‌های سطح پایین به ندرت فراتر از معماری سیستمی که بدون تجدیدنظر اساسی برای آن نوشته شده‌اند، زنده می‌مانند. این "معادل" مهندسی برای "مجازات انتزاعی" است.

معنای نسبی

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

شرایط سطح بالا و سطح پایین ذاتا نسبی هستند. چند دهه پیش، زبان C و زبان‌های مشابه، اغلب «سطح بالا» در نظر گرفته می‌شد، زیرا از مفاهیمی مانند ارزیابی عبارت، توابع بازگشتی پارامتری ، و انواع داده‌ها و ساختارها پشتیبانی می‌کرد، در حالی که زبان اسمبلی «سطح پایین» در نظر گرفته می‌شد. ". امروزه، بسیاری از برنامه نویسان ممکن است از C به عنوان سطح پایین یاد کنند، زیرا فاقد یک سیستم زمان اجرا بزرگ (بدون جمع آوری زباله و غیره)، اساساً فقط از عملیات اسکالر پشتیبانی می کند و آدرس دهی مستقیم حافظه را ارائه می دهد. بنابراین، به راحتی با زبان اسمبلی و سطح ماشین پردازنده ها و میکروکنترلرها ترکیب می شود..

زبان اسمبلی ممکن است خود به عنوان یک نمایش سطح بالاتر (اما اغلب اگر بدون ماکرو استفاده شود باز هم یک به یک ) از کد ماشین در نظر گرفته شود ، زیرا از مفاهیمی مانند ثابت ها و عبارات (محدود)، گاهی اوقات حتی متغیرها، رویه ها و داده ها پشتیبانی می کند. سازه ها . کد ماشین ، به نوبه خود، ذاتا در سطح کمی بالاتر از ریز و یا میکرو عملیات داخلی در بسیاری از پردازنده های استفاده می شود. [10]

حالت های اجرا

سه حالت کلی اجرا برای زبان های سطح بالا مدرن وجود دارد:

تفسیر شد
هنگامی که کد نوشته شده در یک زبان تفسیر می شود ، نحو آن خوانده می شود و سپس به طور مستقیم بدون مرحله کامپایل اجرا می شود. برنامه ای به نام مفسر هر دستور برنامه را می خواند و از جریان برنامه پیروی می کند، سپس تصمیم می گیرد که چه کاری انجام دهد و آن را انجام می دهد. ترکیبی از یک مفسر و یک کامپایلر عبارت را در کد ماشین کامپایل می کند و آن را اجرا می کند. سپس کد ماشین حذف می شود تا اگر خط دوباره اجرا شود، دوباره تفسیر می شود. مفسرها معمولاً ساده‌ترین پیاده‌سازی‌های رفتار یک زبان هستند، در مقایسه با دو نوع دیگر فهرست‌شده در اینجا.
تالیف شد
وقتی کد نوشته شده در یک زبان کامپایل می شود ، نحو آن قبل از اجرا به یک فرم اجرایی تبدیل می شود. دو نوع کامپایل وجود دارد:
تولید کد ماشین
برخی از کامپایلرها کد منبع را مستقیماً در کد ماشین کامپایل می کنند . این حالت اصلی کامپایل است و زبان هایی که به طور مستقیم و به طور کامل به کد بومی ماشین تبدیل می شوند، ممکن است زبان های کامپایل شده واقعی نامیده شوند . به زبان اسمبلی مراجعه کنید .
نمایندگی های میانی
هنگامی که کد نوشته شده در یک زبان در یک نمایش میانی کامپایل می‌شود ، می‌توان آن نمایش را بدون نیاز به خواندن مجدد فایل منبع، برای اجرای بعدی ذخیره کرد. هنگامی که نمایش میانی ذخیره می شود، ممکن است به شکلی مانند بایت کد باشد. سپس نمایش میانی باید تفسیر یا بیشتر برای اجرای آن کامپایل شود. ماشین‌های مجازی که بایت کد را مستقیماً اجرا می‌کنند یا آن را بیشتر به کد ماشین تبدیل می‌کنند، تمایز واضح بین نمایش‌های میانی و زبان‌های واقعاً کامپایل شده را محو کرده‌اند.
منبع به منبع ترجمه یا ترجمه شده است
کد نوشته شده در یک زبان ممکن است به زبان سطح پایین تر ترجمه شود که کامپایلرهای کد بومی برای آن از قبل رایج هستند. جاوا اسکریپت و زبان C اهداف مشترکی برای چنین مترجمانی هستند. به عنوان مثال به CoffeeScript ، Chicken Scheme و Eiffel مراجعه کنید . به طور خاص، کد C و C++ تولید شده را می توان (همانطور که از زبان ایفل هنگام استفاده از EiffelStudio IDE تولید می شود) در فهرست EIFGENs هر پروژه ایفل کامپایل شده مشاهده کرد. در ایفل، فرآیند ترجمه به عنوان ترانکامپایل یا تران کامپایل و کامپایلر ایفل به عنوان کامپایلر یا کامپایلر منبع به منبع نامیده می شود .

توجه داشته باشید که زبان ها زبان های تفسیری یا زبان های کامپایل شده نیستند . در عوض، پیاده سازی رفتار زبان از تفسیر یا کامپایل استفاده می کند. به عنوان مثال، ALGOL 60 و Fortran هر دو تفسیر شده اند (حتی اگر آنها معمولاً کامپایل شده بودند). به طور مشابه، جاوا دشواری تلاش برای اعمال این برچسب‌ها به زبان‌ها را به جای پیاده‌سازی نشان می‌دهد. جاوا در بایت کد کامپایل می شود که سپس توسط تفسیر (در ماشین مجازی جاوا (JVM)) یا کامپایل (معمولاً با یک کامپایلر به موقع مانند HotSpot) اجرا می شود.، دوباره در JVM). علاوه بر این، کامپایل، ترانکامپایل و تفسیر صرفاً به توصیف مصنوع کامپایلر (قابل اجرا باینری یا اسمبلی IL) محدود نمی شود.

معماری کامپیوتر زبان سطح بالا

از طرف دیگر، این امکان وجود دارد که یک زبان سطح بالا به طور مستقیم توسط یک کامپیوتر پیاده سازی شود - کامپیوتر به طور مستقیم کد HLL را اجرا می کند. این به عنوان معماری کامپیوتر زبان سطح بالا شناخته می شود - معماری کامپیوتر خود به گونه ای طراحی شده است که توسط یک زبان سطح بالا خاص هدف قرار گیرد. سیستم های بزرگ باروز ماشین هدف برای شد الگول 60 ، برای مثال. [11]

همچنین ببینید

یادداشت ها

منابع

  1. ^ HThreads - واژه نامه RD
  2. لندن، کیث (1968). "4، برنامه نویسی". مقدمه ای بر کامپیوتر . 24 راسل میدان لندن WC1: Faber and Faber Limited. پ. 184. شابک 0571085938. زبان های برنامه نویسی سطح بالا اغلب کدهای خودکار و برنامه پردازشگر، کامپایلر نامیده می شوند.CS1 maint: مکان ( پیوند )
  3. لندن، کیث (1968). "4، برنامه نویسی". مقدمه ای بر کامپیوتر . 24 راسل میدان لندن WC1: Faber and Faber Limited. پ. 186. شابک 0571085938. دو زبان برنامه نویسی سطح بالا که می توانند در اینجا به عنوان مثال برای نشان دادن ساختار و هدف کدهای خودکار استفاده شوند عبارتند از COBOL (زبان تجاری متداول) و FORTRAN (ترجمه فرمول).CS1 maint: مکان ( پیوند )
  4. گیلوی، ولفگانگ، ک.  [ د ] (1997). "Konrad Zuse's Plankalkül: اولین زبان برنامه نویسی سطح بالا "non von Neumann". IEEE Annals of the History of Computing، جلد. 19، شماره 2، صفحات 17-24، آوریل تا ژوئن، 1997. (چکیده)
  5. ^ اگرچه فاقد مفهوم پارامترهای مرجع بود ، که در برخی شرایط می تواند مشکل ساز باشد. چند جانشینان، از جمله AlgolW ، Algol68 ، سیمولا ، پاسکال ، مدولاسیون و آدا بنابراین شامل مرجع پارامترهای (مرتبط به خانواده زبان C آدرس به جای اجازه به عنوان ارزش -parameters).
  6. سورنا پی (2006). "فراتنگاری چکیده زبان" (PDF) . بایگانی شده (PDF) از نسخه اصلی در 2015-02-17 . بازیابی شده در 2008-03-17 . استناد به مجله نیاز دارد |journal=( کمک )
  7. ^ کوکتایف. "معیار مجازات انتزاع داده ها (DAP) برای اشیاء کوچک در جاوا" . بایگانی شده از نسخه اصلی در 2009-01-11 . بازیابی شده در 2008-03-17 .
  8. ^ Chatzigeorgiou; استفانیدس (2002). "ارزیابی عملکرد و قدرت زبان های برنامه نویسی شی گرا در مقابل رویه ای". در Blieberger; Strohmeier (ویرایشات). مجموعه مقالات - هفتمین کنفرانس بین المللی فناوری های نرم افزاری قابل اعتماد - Ada-Europe'2002 . اسپرینگر. پ. 367.
  9. ^ مانوئل کارو؛ خوزه اف. مورالس; هنک ال. مولر; G. Puebla; M. Hermenegildo (2006). "زبان های سطح بالا برای دستگاه های کوچک: مطالعه موردی" (PDF) . مجموعه مقالات کنفرانس بین المللی 2006 کامپایلرها، معماری و سنتز برای سیستم های جاسازی شده . ACM.
  10. ^ هاید، رندال. (2010). هنر زبان اسمبلی (ویرایش دوم). سانفرانسیسکو: بدون چاپ نشاسته. شابک 9781593273019. OCLC  635507601 .
  11. ^ چو، Yaohan (1975)، "مفاهیم سطح بالا زبان معماری کامپیوتر"، سطح بالا زبان معماری کامپیوتر ، الزویر، صص 1-14. DOI : 10.1016 / b978-0-12-174150-1.50007-0 ، شابک 9780121741501

پیوندهای خارجی