Мова програмування високого рівня

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Програмування в графічному середовищі розробника

Високорівнева мова програмування — мова програмування, розроблена для швидкого і зручного використання програмістом. Основна риса високорівневих мов — це абстракція, тобто введення смислових конструкцій, які коротко описують такі структури даних і операції над ними, опис яких на машинному коді або низькорівневій мові програмування був би дуже великим, складним для розуміння програмістів і зайняв би багато часу при написанні. Написані програми на мові високого рівня згодом перетворюються в машинний код для виконання безпосередньо операційною системою. В результаті безпосередній код, що виконується на комп'ютері і створений в процесі трансляції переважно містить певні зайві інструкції, тому виконання таких програм дещо повільніше. Швидкість також залежить від способу трансляції. Проте для сучасної обчислювальної техніки цей час не критичний. В разі якщо швидкість все ж критична, або ж потрібно напряму працювати з апаратним забезпеченням, то використовують мови низького рівня (асемблер).

Переваги та історія виникнення

[ред. | ред. код]

Високорівневі мови програмування були розроблені для спрощення створення програм і з метою платформової незалежності суті алгоритмів. Написання програми на машинному коді або на мові низького рівня потребує від програміста доброго знання апаратного забезпечення та операційної системи. При використанні мови високого рівня програмістам здебільшого не потрібно, наприклад, вникати в особливості реалізації того чи іншого процесора комп'ютера. Залежність від платформи перекладається на інструментальні програми — транслятори, які перетворюють текст, написаний на мові високого рівня, в елементарні машинні команди (інструкції). Прикладами трансляторів є компілятори та інтерпретатори. Компілятори перетворюють код в машинний і в результаті виходить виконуваний файл для певної платформи, який згодом уже не потребує ніяких засобів даної мови для запуску програми. Інтерпретатори мови транслюють код при кожному запуску програми при цьому вимагається, щоб на комп'ютері були встановлені відповідні засоби для даної мови програмування. Для кожної мови програмування і для кожної платформи розробляється власний транслятор, який, наприклад, перекладає текст, написаний на Delphi в елементарні команди мікропроцесорів сімейства x86.

Так, високорівневі мови прагнуть не тільки полегшити вирішення складних програмних завдань, але і спростити портування програмного забезпечення. Використання різноманітних трансляторів забезпечує зв'язок програм, написаних за допомогою мов високого рівня, з різними операційними системами, програмованими пристроями та обладнанням, і, в ідеалі, не вимагає модифікації початкового тексту для будь-якої платформи.

Такого роду відірваність високорівневих мов від апаратної реалізації комп'ютера крім безлічі плюсів має і мінуси. Зокрема, вона не дозволяє створювати прості і точні інструкції для використовуваного устаткування. Програми, написані на мовах високого рівня, простіші для розуміння програмістом, але менш ефективні, ніж їхні аналоги, створювані за допомогою низькорівневих мов. Одним з наслідків цього стало додавання підтримки тієї чи іншої мови низького рівня (мова асемблера) в ряд сучасних професійних високорівневих мов програмування.

Мова С++

Прикладами мов високого рівня є C++, C#, Java, JavaScript, Python, PHP, Ruby, Perl, Pascal, Delphi, LISP. Мовам високого рівня властиве вміння працювати з комплексними структурами даних. До більшості з них інтегровано підтримку стрічкових типів, об'єктів, операцій файлового вводу-виводу і т. д..[1]

Першою мовою програмування високого рівня вважається комп'ютерна мова Plankalkül, розроблена німецьким інженером Конрадом Цузе ще в період 1942-1946 років.[2] Однак транслятора для нього не існувало до 2000 року. Першим у світі транслятором мови високого рівня є ПП (Програмуюча Програма), він же ПП-1, успішно випробуваний в 1954 році.

Однією з найперших реалізованих мов програмування високого рівня є Адресна мова програмування (1955 рік), яка вперше в світі використовувала опосередковану адресацію вищих рангів (Pointers — є аналогом). В результаті винаходу опосередкованої адресації в Адресному програмуванні були введені складні типи даних: деревоподібні формати, яким подібні абстрактні типи даних.

Транслятор ПП-2 (1955 рік, 4-й у світі транслятор) вже був оптимізувальним і містив власний завантажувач і зневаджувач, бібліотеку стандартних процедур, а транслятор ПП для ЕОМ Стріла-4 вже містив і компонувальник (linker) з модулів. Однак, широке застосування високорівневих мов почалося з виникненням Фортрана і створенням компілятора для цієї мови (1957).[3]

Переносимість програм

[ред. | ред. код]

Поширена думка, що програми на мовах високого рівня можна написати один раз і потім використовувати на комп'ютері будь-якого типу. Насправді ж це так тільки для тих програм, які мало взаємодіють з операційною системою, наприклад, виконують будь-які обчислення або обробку даних. Більшість же інтерактивних (а тим більше мультимедійних) програм звертаються до системних викликів, які сильно розрізняються залежно від операційної системи. Наприклад, для виведення графіки на екран комп'ютера програми під Microsoft Windows використовують функції Windows API, які відрізняються від використовуваних в системах, що підтримують стандарт POSIX. Найчастіше для цих цілей в них використовується програмний інтерфейс X-сервера.

До теперішнього часу створено цілий ряд програмних бібліотек (наприклад, бібліотека Qt або wxWidgets), що приховують невідповідності системних викликів різних операційних систем від прикладних програм. Однак такі бібліотеки, як правило, не дозволяють повністю використовувати всі можливості конкретних операційних систем.

Режими виконання

[ред. | ред. код]

Існують три основні режими виконання для сучасних мов програмування високого рівня:

Коли написаний на мові код інтерпретується, то його синтаксис читається, а потім виконується безпосередньо, без стадії компіляції. Програма, яка називається інтерпретатором після запуску програми читає кожну інструкцію програми, слідуючи за течією виконання програми, і вирішує, що робити, і робить це. Гібрид інтерпретатора і компілятор компілює інструкцію в машинний код і виконує це; машинний код потім відкидається, щоб бути інтерпретованим заново, якщо лінія виконується знову. Інтерпретатори, як правило, найбільш прості варіанти реалізації поведінки мови, в порівнянні з іншими наведеними тут двома варіантами.

Коли код, написаний на мові, компілюється, його синтаксис перетворюється у виконувану форму перед запуском. Є два типи компіляції:

  • Генерація машинного коду

Деякі компілятори компілюють вихідний код безпосередньо в машинний код. Це справжній режим компіляції, і мови, які безпосередньо і повністю перетворюються на машинний код можна назвати «справді компільованими» мовами. Дивитися мову асемблера.

  • Проміжні представлення

Коли код, написаний на мові, компілюється в проміжне представлення, то таке проміжне представлення може бути оптимізовано або збережено для подальшого виконання без необхідності повторного читання початкового коду. Проміжне представлення може бути збережене, наприклад, у формі байт-коду. При виконанні, проміжне представлення згодом інтерпретується або додатково компілюється. Віртуальні машини далі можуть виконувати його безпосередньо або ж трансформувати його в машинний код. Таким чином межа між мовами з проміжним представленнями і дійсно компільованими мовами програмування є розмитою і нечіткою.

Транс-компіляція

[ред. | ред. код]

Код, написаний на мові високого рівня, може бути перекладений на мову програмування низького рівня, для якої є широкодоступний рідний компілятор коду або на іншу мову високого рівня. Такі перекладачі існують для мов JavaScript і мова програмування C. Як приклад див. також CoffeeScript, Chicken Scheme[en] і Eiffel. Зокрема, згенерований C і C++ код у середовищі EiffelStudio[en] IDE з мови програмування Eiffel, можна подивитись в каталозі EIFGENs будь-якого скомпільованого проекту Eiffel. В Eiffel, процес «Перекладення» називається Транс-компіляція або Транс-скомпільований і компілятор Eiffel як Transcompiler.

Зверніть увагу, що переважно мови програмування не є строго «інтерпретованими» або «компільованими». Конкретна реалізація мови визначає поведінку з кодом. Наприклад, Алгол 60 і Фортран обидва були інтерпретованими. Крім того, наприклад стосовно Java, є певні труднощі при застосуванні цих ярликів до мови, а не до реалізації; Java компілюється в байт-код і байт-код згодом інтерпретується (в JVM) або компілюється на льоту (Just-in-time компіляція).

Розвиток високорівневих мов програмування

[ред. | ред. код]

Популярні в даний час мови програмування високого рівня (як-от Java, C#) та засоби розробки для них постійно розвиваються. У них з'являються нові елементи, нові бібліотеки класів, дещо міняється навіть і сам синтаксис тощо Розробники даних мов ведуть постійну роботу над покращенням швидкодії програм написаних на даних мовах. Популярні мови програмування також мають значну кількість сторонніх бібліотек та фреймворків. Ведуться спроби розробки нових мов програмування, у тому числі на базі існуючих мов програмування(Scala). Вдалі рішення в одній мові швидко підхоплюються розробниками інших мов, тому існуючі високорівневі мови мають значну кількість схожих елементів.

Фреймворки

[ред. | ред. код]

Одною з основних тенденцій є поява і розвиток фреймворків — спеціалізованих інфраструктур програмних рішень для певних мов програмування, які беруть на себе вирішення певної складної задачі і таким чином значно прискорюють розробку складних систем. Наприклад спрощують розробку веб сайту, роботу з базою даних (автоматизують запити до бази даних), спрощують розробку графічного інтерфейсу для програм тощо Це свого роду складні бібліотеки (комплекс програмних бібліотек).

Надвисокорівневі мови програмування

[ред. | ред. код]

Термін надвисокорівневі мови з'явився у зв'язку із спробами розробки мов більш високого рівня абстракції. В 1990-х роках популяризатори та розробники нових мов вживали термін надвисокорівневі мови програмування або ж ультра-високорівневі мови програмування. Це стосувалося мов, що характеризувалися наявністю додаткових структур і об'єктів, орієнтованих на прикладне використання. Прикладні об'єкти, у свою чергу, вимагають мінімального налаштування у вигляді параметрів і моментально готові до використання.[4][5][6] Ультра-високорівневі мови програмування покликані знижувати часові витрати на розробку програмного забезпечення і підвищувати якість кінцевого продукту. По суті аналогічну функціональність мають елементи бібліотек та фреймворків усіх сучасних високорівневих мов програмування (як то Java, C#), тому особливої популярності поділ на високорівневі та надвискорівневі мови не здобув. Інколи під надвискорівневими мовами розуміють декларативні мови.

Високорівнева комп'ютерна архітектура

[ред. | ред. код]

Ведуться спроби розробити комп'ютери, які б могли б безпосередньо виконувати команди високих мов програмування (так звана високорівнева комп'ютерна архітектура)

Примітки

[ред. | ред. код]
  1. How to Hurt the Hackers: "The Scoop on Internet Cheating and How You Can Combat It". Gamasutra.com. 24 липня 2000. Архів оригіналу за 1 жовтня 2017. Процитовано 15 вересня 2009.
  2. Giloi, Wolfgang, K. (1997). «Konrad Zuse's Plankalkül: The First High-Level „non von Neumann“ Programming Language». IEEE Annals of the History of Computing, vol. 19, no. 2, pp. 17–24, April–June, 1997. (abstract)
  3. Лондон, Кейс (1968). 4, Програмування. Вступ до комп'ютерів. 24 Russell Square London WC1: Faber and Faber Limited. с. 186. ISBN 0571085938. Дві мови програмування високого рівня, які можуть бути використані як приклади тут, щоб показати структуру і призначення автокоду є COBOL (Common Business Oriented Language) і FORTRAN.{{cite book}}: Обслуговування CS1: Сторінки із проігнорованими помилками ISBN (посилання)
  4. Сурана П. Мета-компіляція мови абстракцій.. (PDF). — 2006. Архівовано з джерела 17 лютого 2015. Процитовано 2008-03-17.
  5. Кукетаєв. The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java. Архів оригіналу за 11 січня 2009. Процитовано 17 березня 2008.
  6. Chatzigeorgiou; Stephanides (2002). Evaluating Performance and Power Of Object-Oriented Vs. Procedural Programming Languages. У Blieberger; Strohmeier (ред.). Proceedings - 7th International Conference on Reliable Software Technologies - Ada-Europe'2002. Springer. с. 367.

Див. також

[ред. | ред. код]