Файл: Обзор языков программирования высокого уровня(Теоретические основы языков программирования высокого уровня ).pdf
Добавлен: 20.05.2023
Просмотров: 202
Скачиваний: 2
Содержание
1 Теоретические основы языков программирования высокого уровня
1.1 История появления языков программирования высокого уровня 5
1.2 Языки программирования низкого и высокого уровня 7
2 Классификация языков программирования высокого уровня 11
2.1 Виды языков программирования высокого уровня по способу трансляции 11
2.2 Императивные языки программирования высокого уровня 14
2.3 Декларативные языки программирования высокого уровня 18
3 Характеристика популярных языков программирования высокого уровня 23
Список использованных источников 31
Введение
Появление речи стало важным этапом в развитии человечества. Именно речь дала возможность людям общаться на более высоком уровне, эффективно взаимодействовать. Постепенно из примитивных жестов и звуков сформировались современные естественные языки. Спустя тысячелетия перед людьми стала новая задача – научиться «общаться» с техникой. Это потребовало создания новых языков, искусственных – языков программирования, которые могли бы быть «понятны» и людям, и компьютерам.
Если изначально языки программирования были низкоуровневыми, ориентированными на то, чтобы быть понятными для конкретного компьютера, то по мере развития техники стали появляться языки высокого уровня, более универсальные и удобные для человека. Задачи «перевода» на машинный язык стали перекладываться на специализированные программы. В настоящее время разработаны тысячи языков программирования высокого уровня, каждый из которых имеет свои особенности, удобен для решения тех или иных задач. Как нельзя сказать, что русский язык лучше китайского, так нельзя выбрать один лучший язык программирования – для написания web-приложений используются одни языки, а для программирования станков – совершенно другие. Выучить все языки невозможно, но нужно четко понимать, какие языки бывают и чем они отличаются. Таким образом, актуальность темы работы не вызывает сомнений.
Целью работы является обзор языков программирования высокого уровня.
Для достижения цели необходимо решить ряд задач, в соответствии с которыми построена структура работы:
1) рассмотреть теоретические основы языков программирования высокого уровня – проследить историю развития, раскрыть понятие языков программирования высокого уровня в противопоставлении языкам программирования низкого уровня;
2) провести классификацию языков программирования высокого уровня по способу трансляции и базовой парадигме программирования (императивные и декларативные языки);
3) охарактеризовать самые популярные языки программирования высокого уровня – Java, C/C++.
1 Теоретические основы языков программирования высокого уровня
1.1 История появления языков программирования высокого уровня
История программирования насчитывает почти два века. Еще в 20-х годах XIX в. Ч. Бэббидж высказал мысль о предварительной записи порядка действий машины для последующей автоматической реализации вычислений, что привело к созданию автоматических цифровых вычислительных машин. С этого момента начинается история программирования.
Первым в мире программистом считают Аду Лавлейс. Она теоретически разработала некоторые приемы управления последовательностью вычислений и описала одну из важнейших и сегодня алгоритмических конструкций — цикл.
Революционным этапом в истории программирования стало создание электронных вычислительных машин (ЭВМ). Однако процессор компьютера понимает только язык машинных команд в двоичных кодах. Программист, пишущий в машинных кодах, должен помнить вес числовые коды машинных команд и самостоятельно распределять память под хранение данных и программы.
Большой вклад в развитие языков программирования висела Грейс Мюррсй Хоппер. Группой ученых пол се руководством были придуманы подпрограммы, создан первый в мире компилятор (ими же был введен и сам этот термин), введено понятие «отладка» (debugging).
Появление языков типа «Автокод-Ассемблер» привело к тому, что переменные величины стали изображаться символьными именами, а числовые коды операций были заменены на мнемонические коды. Язык программирования стал более понятен для человека, но удалился от языка машинных команд, понятного процессору. Чтобы компьютер мог исполнить программу, написанную на Ассемблере, необходимо было вначале перевести ее на язык машинных команд с помощью транслятора. Языки типа Ассемблера являются машинно-ориентированными языками, т. е. настроены на структуру машинных команд конкретного процессора. Поэтому компьютеры с различными тинами процессоров имеют разный Ассемблер.
В середине 1950-х гг. вычислительные машины получили широкое распространение в университетах и научно-исследовательских институтах США и Западной Европы: тогда же наступило и время стремительного прогресса в области программирования. Новые разработки не отрицали всего, что было сделано прежде: компиляторы и интерпретаторы для языков Ассемблера остались важным средством программирования для любого компьютера. Но программисты решили еще более облегчить себе работу. Посредниками между программистом и компьютером стали языки программирования высокого уровня. От Ассемблера они отличались большей гибкостью и возможностью использования конструкций, подобных предложениям на естественном языке.
Конечно, как только появились компьютеры, нужно было создавать для них программы, и проблема написания управляющего кода, понятного машине, стояла задолго до появления ПЭВМ, - например, один из первых языков программирования высокого уровня (FORTRAN) появился еще в 1957 г. Тем не менее с появлением нового типа компьютеров пришлось пересмотреть некоторые старые концепции разработки языков, ведь все старые языки были ориентированы на суперкомпьютеры, архитектура которых существенно отличалась от архитектуры персональных компьютеров, да и задачи перед ними стояли разные. Как известно, «большие машины» чаще всего использовались в военных целях или для научных исследований.
Если не учитывать работы Конрада Цузе, который придумал алгоритмический язык для своего механического компьютера, и прямое программирование в машинных кодах, то можно сказать, что началом эволюции языков программирования стали различные ассемблеры, которые позволили программисту отвлечься от запоминания шестнадцатеричных кодов команд и регистров. С присвоением им символьных имен программирование стало более продуктивным и более привлекательным. Но даже на Ассемблере программировать было не очень удобно. Ассемблеры были аппаратно зависимыми, т. е. если, например, планировалось использовать программы на компьютере фирмы DEC, а не IBM, то приходилось переписывать весь программный код заново. С появлением же языков высокого уровня программисты получили возможность разрабатывать алгоритм решения задачи, практически не тратя усилий на его программную реализацию.
Таким образом, появление языков высокого уровня ознаменовало первый шаг на пути создания прикладных программ, выходящих за пределы научно-исследовательских лабораторий. Но вместе с тем языки программирования становились все более и более сложными. Если в Ассемблере основная проблема заключалась в постоянном запоминании ненужных, по сути, сведений по ходу написания программы и в утомительном кодировании мельчайших подробностей работы программы, то в современном языке C++ содержится такое количество лексем, что далеко не каждый может освоить этот язык. Это, в свою очередь, привело к необходимости появления «упрощенных» систем и сред программирования, таких как, например. Visual Basic.
1.2 Языки программирования низкого и высокого уровня
Прогресс в сфере вычислительной техники и информационных и коммуникационных технологий предопределил появление разнообразных знаковых систем для записи алгоритмов – языков программирования.
Язык программирования служит двум взаимосвязанным целям: предоставляет программисту аппарат для задания действий, которые должны быть выполнены компьютером, и формирует концепции, которыми пользуется программист, продумывая будущий алгоритм. Первой цели идеально отвечает язык, который настолько «близок к ЭВМ», что всеми основными машинными объектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй же цели идеально отвечает язык, который настолько близок к решаемой задаче, что концепции ее решения можно выражать прямо и коротко.
Вначале рассмотрим классификацию языков программирования по близости языка к аппаратному обеспечению (рис. 1).
Языки програм-мирования
Языки низкого уровня
Языки высокого уровня
Машинные
Машинно-ориентиро-ванные
Процедурно-ориентиро-ванные
Проблемно-ориентиро-ванные
Рисунок 1 – Классификация языков программирования по близости языка к аппаратному обеспечению
Первые языки программирования (как и первые ЭВМ) были довольно примитивны и ориентированы на различные вычисления - как на чисто теоретические научные расчеты (прежде всего математические и физические), так и на прикладные задачи (в частности, в военной области). Программы, написанные на них, представляли собой линейные последовательности элементарных операций с регистрами, в которых хранились данные.
Следует отметить, что ранние языки программирования были оптимизированы под аппаратную архитектуру конкретного компьютера, для которого они предназначались. Это обеспечивало высокую эффективность вычислений, но не позволяло обеспечить стандартизацию: программа, работоспособная на одной вычислительной машине, не могла выполняться на другой.
Машинно-ориентированные языки программирования – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (ее системы команд, структуры памяти и т. д.).
Машинно-ориентированные языки обеспечивают:
- высокое качество создаваемых программ (компактность и скорость выполнения);
- возможность максимально полного использования конкретных аппаратных ресурсов;
- предсказуемость объектного кода и запросов на выделение памяти.
Недостатки машинно-ориентированных языков:
- для составления эффективных программ необходимо знать систему команд и особенности функционирования конкретной ЭВМ:
- процесс составления программ очень трудоемок, плохо защищен от появления ошибок;
- низкая скорость программирования;
- невозможность непосредственного использования программы на ЭВМ других типов [5, c. 10].
Таким образом, ранние языки программирования существенно зависели от того, что принято называть «средой вычислений», и приблизительно соответствовали современным машинным кодам или языкам ассемблера.
Последующее десятилетие ознаменовалось появлением так называемых «языков программирования высокого уровня» (по сравнению с их предшественниками, получившими, соответственно, название «языки низкого уровня»).
Основное различие между языками высокого и низкого уровней состоит в повышении эффективности труда программиста благодаря абстрагированию от конкретных деталей аппаратного обеспечения. Одна инструкция (оператор) языка высокого уровня соответствует целой последовательности из нескольких низкоуровневых инструкций, или команд. Поскольку программа, по сути, представляет собой набор директив, обращенных к компьютеру, такой подход к программированию получил название императивного.
Еще одной особенностью языков высокого уровня является возможность повторного использования ранее написанных программных блоков, выполняющих те или иные действия, посредством их идентификации и последующего обращения к ним по присвоенному имени. Такие блоки получили название функций и процедур. В результате процесс программирования приобрел более упорядоченный характер.
Важно, что с появлением языков высокого уровня зависимость программ от аппаратного обеспечения ЭВМ существенно уменьшилась. Платой за это стала необходимость создания трансляторов - специализированных программ, преобразующих инструкции языков высокого уровня в коды той или иной ЭВМ, а также некоторая потеря в скорости вычислении, которая, впрочем, компенсировалась существенным выигрышем в скорости разработки программ и унификацией программного кода.
Транслятор - это специальная программа, переводящая текст программы на языке программирования в текст эквивалентной программы на языке машинных команд.
Следует отметить, что операторы и ключевые слова в языках программирования высокого уровня стали более осмысленными, чем безликие цифровые последовательности кодов, что также обеспечило повышение производительности труда программистов.
Конечно, для обучения новым языкам программирования требовались дополнительные затраты времени и средств, а эффективность реализации программ на прежнем аппаратном обеспечении несколько снижалась. Однако это были временные трудности, и, как показала практика, многие из даже самых первых языков высокого уровня оказались настолько удачными, что активно используются и сегодня. Одним из примеров является FORTRAN, реализующий вычислительные алгоритмы. Другой пример - язык APL, позже трансформировавшийся в BPL, а затем - в С («Си»). Основные его конструкции остаются неизменными вот уже несколько десятилетий и присутствуют в современных версиях - C++ и С#. Точно так же и сегодня хорошо известны языки ALGOL, COBOL, Pascal. BASIC и др.