Языки программирования высокого уровня

Материал из wikixw
Перейти к навигации Перейти к поиску

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

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

Первым языком программирования высокого уровня, разработанным для компьютеров, был Планкалкюль, созданный Конрадом Цузе.[4] Однако он не был реализован в его время, и его первоначальный вклад был в значительной степени изолирован от других разработок из-за Второй мировой войны, помимо влияния языка на язык "Суперплан" Конрадом Цузе.Хайнц Рутишаузер, а также в некоторой степени АЛГОЛ. Первым широко распространенным языком высокого уровня был Фортран, машинно-независимая разработка более ранних систем автокодирования IBM. Семейство ALGOL, с ALGOL 58, определенным в 1958 году, и ALGOL 60, определенным в 1960 комитетами европейских и американских компьютерных ученых, ввело рекурсию, а также вложенные функции в лексической области. ALGOL 60 также был первым языком с четким различием между значениями и параметрами имени и их соответствующей семантикой. ALGOL также ввел несколько концепций структурированного программирования, таких как конструкции while-doиif-then-else, и его синтаксис был первым, который был описан в формальной нотации – форме Бэкуса–Наура (BNF). Примерно в тот же период COBOL ввел записи (также называемые структурами), а Lisp ввел полностью общийлямбда-абстракция в языке программирования впервые.

Характеристики[править]

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

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

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

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

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

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

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

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

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

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

Интерпретируемый

  • Когда код, написанный на языке, интерпретируется, его синтаксис считывается и затем выполняется напрямую, без этапа компиляции. Программа, называемая интерпретатором, читает каждый программный оператор, следуя потоку программы, затем решает, что делать, и делает это. Гибрид интерпретатора и компилятора компилирует оператор в машинный код и выполняет его; затем машинный код отбрасывается, чтобы быть интерпретированным заново, если строка выполняется снова. Интерпретаторы обычно являются простейшими реализациями поведения языка по сравнению с двумя другими вариантами, перечисленными здесь.

Скомпилированный

  • Когда код, написанный на языке, компилируется, его синтаксис преобразуется в исполняемую форму перед запуском. Существует два типа компиляции:
  • Генерация машинного кода
    • Некоторые компиляторы компилируют исходный код непосредственно в машинный код. Это исходный способ компиляции, и языки, которые непосредственно и полностью преобразуются в машинно-машинный код таким образом, могут быть названы истинно скомпилированными языками. См. Язык ассемблера.
  • Промежуточные представления
    • Когда код, написанный на языке, компилируется в промежуточное представление, это представление может быть оптимизировано или сохранено для последующего выполнения без необходимости перечитывать исходный файл. Когда промежуточное представление сохраняется, оно может быть в такой форме, как байт-код. Затем промежуточное представление должно быть интерпретировано или скомпилировано для его выполнения. Виртуальные машины, которые выполняют байт-код напрямую или преобразуют его в машинный код, размыли некогда четкое различие между промежуточными представлениями и действительно скомпилированными языками.

Перевод из одного источника в другой или транскомпилирование

  • Код, написанный на языке, может быть переведен в термины языка более низкого уровня, для которого уже распространены компиляторы собственного кода. JavaScript и язык C являются общими целями для таких переводчиков. См. CoffeeScript, Chicken Scheme и Eiffel в качестве примеров. В частности, сгенерированный код C и C ++ можно увидеть (как сгенерированный из языка Eiffel при использовании IDE EiffelStudio) в каталоге EIFGENs любого скомпилированного проекта Eiffel.

В Eiffel переведенный процесс называется транскомпиляцией или транскомпилированием, а компилятор Eiffel - транскомпилятором или компилятором от источника к источнику.

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

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

В качестве альтернативы язык высокого уровня может быть непосредственно реализован компьютером – компьютер непосредственно выполняет код HLL. Это известно как язык высокого уровня компьютерной архитектуры - сама компьютерная архитектура предназначена для работы с конкретным языком высокого уровня. Например, большие системы Берроуза были целевыми машинами для ALGOL 60.

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

Пруф[править]

/wiki.c2.com/?HighLevelLanguage