Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В информатике , язык программирования высокого уровня является языком программирования с сильной абстракцией из деталей компьютера . В отличие от низкоуровневых языков программирования , он может использовать элементы естественного языка , быть более простым в использовании или может автоматизировать (или даже полностью скрыть) значительные области вычислительных систем (например, управление памятью ), делая процесс разработки программы более простым и понятным. более понятно, чем при использовании языка более низкого уровня. Объем предоставленной абстракции определяет, насколько «высокоуровневым» является язык программирования. [1]

В 1960-х годах языки программирования высокого уровня, использующие компилятор, обычно назывались автокодами . [2] Примерами автокодов являются COBOL и Fortran . [3]

Первым языком программирования высокого уровня, разработанным для компьютеров, был Plankalkül , созданный Конрадом Цузе . [4] Однако он не был реализован в его время, и его первоначальный вклад был в значительной степени изолирован от других разработок из-за Второй мировой войны , помимо влияния языка на язык «Суперплан» Хайнца Рутисхаузера, а также в некоторой степени от Алгола . Первым широко распространенным языком высокого уровня был Fortran , машинно-независимая разработка более ранних систем Autocode от IBM . Алгол , определенный в 1958 и 1960 годах комитетами европейских и американских компьютерных ученых, представилрекурсия, а также вложенные функции в лексической области . Это был также первый язык с четким различием между значением и параметрами имени и их соответствующей семантикой . [5] Алгол также представил несколько концепций структурированного программирования , таких как конструкции while-do и if-then-else, и его синтаксис был первым, который был описан в формальной нотации - « форма Бэкуса – Наура » (BNF). Примерно в то же время Cobol представил записи (также называемые структурами) и Lisp.впервые представил полностью общую лямбда-абстракцию в языке программирования.

Особенности [ править ]

«Язык высокого уровня» относится к более высокому уровню абстракции от машинного языка . Вместо того, чтобы иметь дело с регистрами, адресами памяти и стеками вызовов, языки высокого уровня имеют дело с переменными, массивами, объектами , сложными арифметическими или логическими выражениями, подпрограммами и функциями, циклами, потоками , блокировками и другими абстрактными концепциями информатики с сосредоточиться на удобстве использования, а не на оптимальной эффективности программы. В отличие от низкоуровневых языков ассемблера, в языках высокого уровня мало языковых элементов, если они вообще есть, которые переводятся непосредственно в собственные коды операций машины.. Также могут присутствовать другие функции, такие как процедуры обработки строк, возможности объектно-ориентированного языка и ввод / вывод файлов. В языках программирования высокого уровня следует отметить то, что эти языки позволяют программисту быть отделенным от машины. То есть, в отличие от низкоуровневых языков, таких как ассемблер или машинный язык, высокоуровневое программирование может усиливать инструкции программиста и запускать множество перемещений данных в фоновом режиме без их ведома. Ответственность и полномочия по выполнению инструкций были переданы машине от программиста.

Штраф за абстракцию [ править ]

Языки высокого уровня предназначены для предоставления функций, которые стандартизируют общие задачи, допускают расширенную отладку и поддерживают архитектурный агностицизм; в то время как языки низкого уровня часто создают более эффективный код за счет оптимизации для конкретной системной архитектуры. Штраф за абстракцию - это цена, которую платят высокоуровневые методы программирования за невозможность оптимизировать производительность или использовать определенное оборудование, потому что они не используют преимущества определенных низкоуровневых архитектурных ресурсов. Программирование высокого уровня демонстрирует такие функции, как более общие структуры данных и операции, интерпретация времени выполнения и файлы промежуточного кода; что часто приводит к выполнению гораздо большего количества операций, чем необходимо, более высокому потреблению памяти и большему размеру двоичной программы. [6] [7][8] По этой причине код, который должен выполняться особенно быстро и эффективно, может потребовать использования языка нижнего уровня, даже если язык более высокого уровня упростит кодирование. Во многих случаях критические части программы, в основном на языке высокого уровня, могут быть вручную написаны на языке ассемблера , что приводит к гораздо более быстрой, более эффективной или просто надежно функционирующей оптимизированной программе .

Однако с ростом сложности современных микропроцессорных архитектур хорошо спроектированные компиляторы для языков высокого уровня часто создают код, сравнимый по эффективности с тем, что большинство низкоуровневых программистов могут создать вручную, а более высокая абстракция может позволить использовать более мощные методы, обеспечивающие лучшее общие результаты, чем их аналоги низкого уровня в определенных настройках. [9] Языки высокого уровня разрабатываются независимо от архитектуры конкретной вычислительной системы. Это облегчает выполнение программы, написанной на таком языке, в любой вычислительной системе с совместимой поддержкой интерпретируемого или JIT.программа. Языки высокого уровня можно улучшать по мере того, как их разработчики разрабатывают улучшения. В других случаях новые языки высокого уровня развиваются из одного или нескольких других с целью объединения наиболее популярных конструкций с новыми или улучшенными функциями. Примером этого является Scala, который поддерживает обратную совместимость с Java, что означает, что программы и библиотеки, написанные на Java, будут по-прежнему использоваться, даже если магазин программирования переключится на Scala; это упрощает переход, а срок жизни такого высокоуровневого кода - неопределенным. Напротив, низкоуровневые программы редко выживают за пределами системной архитектуры, для которой они были написаны, без серьезной доработки. Это инженерный «компромисс» для «штрафа за абстракцию».

Относительное значение [ править ]

Примеры языков программирования высокого уровня, активно используемых сегодня, включают Python , Visual Basic , Delphi , Perl , PHP , ECMAScript , Ruby , C # , Java и многие другие.

Термины « высокий уровень» и « низкий уровень» по своей сути относительны. Несколько десятилетий назад язык C и подобные языки чаще всего считались "высокоуровневыми", поскольку они поддерживали такие концепции, как оценка выражений, параметризованные рекурсивные функции, а также типы и структуры данных, в то время как язык ассемблера считался "низкоуровневым". ". Сегодня многие программисты могут называть C низкоуровневым, поскольку в нем отсутствует большая система времени выполнения (без сборки мусора и т. Д.), В основном поддерживаются только скалярные операции и обеспечивается прямая адресация памяти. Поэтому он легко сочетается с языком ассемблера и машинным уровнем процессоров и микроконтроллеров..

Язык ассемблера может сам по себе рассматриваться как более высокий уровень (но часто все еще однозначный, если используется без макросов ) представление машинного кода , поскольку он поддерживает такие концепции, как константы и (ограниченные) выражения, иногда даже переменные, процедуры и данные. конструкции . Машинный код , в свою очередь, по своей сути находится на несколько более высоком уровне, чем микрокод или микрооперации, используемые внутри многих процессоров. [10]

Режимы выполнения [ править ]

Для современных языков высокого уровня существует три основных режима выполнения:

Истолкованный
Когда код, написанный на языке, интерпретируется , его синтаксис читается и затем выполняется напрямую, без этапа компиляции. Программа, называемая интерпретатором, считывает каждый оператор программы, следуя потоку программы, затем решает, что делать, и выполняет это. Гибрид интерпретатора и компилятора скомпилирует оператор в машинный код и выполнит его; затем машинный код отбрасывается, чтобы быть интерпретированным заново, если строка будет выполнена снова. Интерпретаторы обычно являются простейшими реализациями поведения языка по сравнению с двумя другими вариантами, перечисленными здесь.
Скомпилировано
Когда код, написанный на языке, компилируется , его синтаксис перед запуском преобразуется в исполняемую форму. Есть два типа компиляции:
Генерация машинного кода
Некоторые компиляторы компилируют исходный код непосредственно в машинный код . Это исходный режим компиляции, и языки, которые напрямую и полностью преобразуются в машинный код таким образом, могут называться действительно скомпилированными языками. См. Язык ассемблера .
Промежуточные представления
Когда код, написанный на языке, компилируется в промежуточное представление , это представление можно оптимизировать или сохранить для последующего выполнения без необходимости перечитывать исходный файл. Когда промежуточное представление сохраняется, оно может быть в такой форме, как байт-код . Затем промежуточное представление должно быть интерпретировано или дополнительно скомпилировано для его выполнения. Виртуальные машины, которые выполняют байт-код напрямую или преобразуют его в машинный код, стерли когда-то четкое различие между промежуточными представлениями и действительно скомпилированными языками.
Преобразование исходного текста в исходный текст переведено или преобразовано
Код, написанный на каком-либо языке, может быть переведен на язык более низкого уровня, для которого компиляторы нативного кода уже распространены. JavaScript и язык C - общие цели для таких переводчиков. См. Примеры CoffeeScript , Chicken Scheme и Eiffel . В частности, сгенерированный код C и C ++ можно увидеть (как сгенерированный на языке Eiffel при использовании EiffelStudio IDE) в каталоге EIFGENs любого скомпилированного проекта Eiffel. В Eiffel переведенный процесс называется транскомпилированием или транскомпилированием, а компилятор Eiffel - транскомпилятором или компилятором преобразования исходного кода в исходный .

Обратите внимание, что языки не являются строго интерпретируемыми языками или компилируемыми языками. Скорее, реализации языкового поведения используют интерпретацию или компиляцию. Например, были интерпретированы и ALGOL 60, и Fortran (хотя обычно они компилировались). Точно так же Java показывает сложность попытки применить эти ярлыки к языкам, а не к реализациям; Java компилируется в байт-код, который затем выполняется либо путем интерпретации (на виртуальной машине Java (JVM)), либо путем компиляции (обычно с помощью оперативного компилятора, такого как HotSpot)., снова в JVM). Более того, компиляция, транскомпиляция и интерпретация строго не ограничиваются только описанием артефакта компилятора (двоичный исполняемый файл или сборка IL).

Архитектура компьютера на языке высокого уровня [ править ]

В качестве альтернативы, язык высокого уровня может быть напрямую реализован компьютером - компьютер напрямую выполняет код HLL. Это известно как компьютерная архитектура на языке высокого уровня - сама компьютерная архитектура предназначена для использования на конкретном языке высокого уровня. Эти крупные системы Burroughs были целевые машины для АЛГОЛа 60 , например. [11]

См. Также [ править ]

  • Абстракция (информатика)
  • Список поколений языков программирования
  • Языки программирования низкого уровня
  • Ассемблер высокого уровня
  • Языки программирования очень высокого уровня
  • Категориальный список языков программирования

Ссылки [ править ]

  1. ^ HThreads - Глоссарий RD
  2. ^ Лондон, Кейт (1968). «4, Программирование». Введение в компьютеры . 24 Russell Square London WC1: Faber and Faber Limited. п. 184. ISBN 0571085938. Языки программирования «высокого» уровня часто называют автокодами, а программу процессора - компилятором.CS1 maint: location (link)
  3. ^ Лондон, Кейт (1968). «4, Программирование». Введение в компьютеры . 24 Russell Square London WC1: Faber and Faber Limited. п. 186. ISBN. 0571085938. Два языка программирования высокого уровня, которые могут быть использованы здесь в качестве примеров для иллюстрации структуры и назначения автокодов, - это COBOL (Common Business Oriented Language) и FORTRAN (Formular Translation).CS1 maint: location (link)
  4. ^ Giloi, Вольфганг К.  [ де ] (1997). "Планкалкюль Конрада Цузе: первый высокоуровневый" язык программирования не фон Неймана ". IEEE Annals of the History of Computing, vol. 19, нет. 2. С. 17–24, апрель – июнь 1997 г. (аннотация)
  5. ^ Хотя в нем отсутствовало понятие ссылочных параметров , что могло быть проблемой в некоторых ситуациях. Поэтому несколько преемников, включая AlgolW , Algol68 , Simula , Pascal , Modula и Ada, включали ссылочные параметры (родственное семейство языков C вместо этого допускало адреса в качестве параметров-значений ).
  6. ^ Surana P (2006). «Мета-компиляция языковых абстракций» (PDF) . Архивировано из оригинального (PDF) 17 февраля 2015 года . Проверено 17 марта 2008 . Cite journal requires |journal= (help)
  7. ^ Kuketayev. «Тест штрафа за абстракцию данных (DAP) для небольших объектов в Java» . Архивировано из оригинала на 2009-01-11 . Проверено 17 марта 2008 .
  8. ^ Chatzigeorgiou; Стефанидес (2002). «Оценка производительности и мощности объектно-ориентированных и процедурных языков программирования». В Блибергере; Strohmeier (ред.). Материалы - 7-я Международная конференция по надежным программным технологиям - Ada-Europe'2002 . Springer. п. 367.
  9. ^ Мануэль Карро; Хосе Ф. Моралес; Хенк Л. Мюллер; Г. Пуэбла; М. Эрменегильдо (2006). «Языки высокого уровня для небольших устройств: пример» (PDF) . Труды Международной конференции 2006 г. по компиляторам, архитектуре и синтезу для встроенных систем . ACM.
  10. ^ Хайд, Рэндалл. (2010). Искусство ассемблера (2-е изд.). Сан-Франциско: Пресса без крахмала. ISBN 9781593273019. OCLC  635507601 .
  11. ^ Чу, Yaohan (1975), "Концепция высокого уровень языка компьютерной архитектуры", высокий уровень языка компьютерной архитектуры , Elsevier, стр 1-14,. DOI : 10.1016 / b978-0-12-174150-1.50007-0 , ISBN 9780121741501

Внешние ссылки [ править ]

  • http://c2.com/cgi/wiki?HighLevelLanguage - статья WikiWikiWeb о языках программирования высокого уровня.