Язык программирования высокого уровня - High-level programming language

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

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

Первым языком программирования высокого уровня, разработанным для компьютеров, был Plankalkül, сделано Конрад Зузе.[4] Однако в его время это не было реализовано, и его первоначальный вклад был в значительной степени изолирован от других разработок из-за Вторая Мировая Война, помимо влияния языка на язык "Суперплан" Хайнц Рутисхаузер а также в некоторой степени Алгол. Первым широко распространенным языком высокого уровня был Фортран, машинно-независимая разработка более ранней Автокодирование системы. Алгол, определенная в 1958 и 1960 годах комитетами европейских и американских компьютерных ученых, представила рекурсия а также вложенные функции под лексическая область. Это был также первый язык, в котором четко различались ценить и имя-параметры и их соответствующие семантика.[5] Алгол также представил несколько структурное программирование концепции, такие как пока делать и если-то-еще конструкции и ее синтаксис был первым, кто был описан в формальных обозначениях - "Форма Бэкуса – Наура "(BNF). Примерно в тот же период Кобол представил записи (также называемые структурами) и Лисп представил полностью общий лямбда-абстракция на языке программирования впервые.

Функции

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

Штраф за абстракцию

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

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

Относительное значение

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

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

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

Режимы исполнения

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

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

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

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

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

Смотрите также

Рекомендации

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

внешняя ссылка