Файл: Обзор языков программирования высокого уровня (Понятие и развития языка программирования).pdf
Добавлен: 01.04.2023
Просмотров: 293
Скачиваний: 1
Как только использование языков высокого уровня стало более распространенным, программисты захотели создать язык программирования, который послужил бы простым введением в Фортран. В результате был разработан язык BASIC Томасом Курцем и Джоном Кемени в Дартмутском колледже в 1963-1964 годах как простой и интерактивный язык. Однако сейчас BASIC (Beginner’s All Purpose Symbolic Instruction Code) является наиболее часто используемым языком на микрокомпьютерах. Основной целью было простое введение, которое подготовило бы студентов к использованию FORTRAN. BASIC легче программировать и имеет удобный синтаксис, чем FORTRAN. Единственный аспект, в котором FORTRAN лучше, чем BASIC, — это то, что он обладает более продвинутыми возможностями. BASIC — это язык общего назначения. Поскольку раннее использование BASIC было в образовании, исходный язык был довольно примитивным и имел только имена переменных. Тем не менее, люди обнаружили, что BASIC можно использовать в качестве языка программирования приложений. Интересно, что BASIC не был очень популярен, когда он только появился. Тем не менее, микрокомпьютеры приняли BASIC в качестве предпочтительного языка, поскольку он был интерпретирующим языком. Например, BASIC является основой и большим влиянием для таких языков, как Microsoft Visual Basic и объектно-ориентированный язык Visual Basic .NET.
Много других программ появилось, чтобы улучшить язык FORTRAN. Algol-60 был создан в 1958 году как усовершенствование FORTRAN. Затем он был переработан, улучшен, и окончательный вид обрел в 1960 году. Ключевые особенности Algol-60 заключаются в том, что синтаксис и семантика являются более ортогональными и синтаксис языка определяется формально. Этот язык является одним из самых изобретательных усилий по определению языка в первые дни языков программирования, но никогда не получал широкого признания. Основными нововведениями в языке является то, что в Algol реализована структура вложенных блоков, в которой последовательности кода и связанные с ними объявления могут быть сгруппированы в блоки без необходимости использования отдельных процедур с явным именем. Кроме того, в Algol реализована лексическая область видимости - где блок может состоять из частных переменных, процедур и функций, но невидим для кода вне блока, который в основном скрывает информацию. Утверждается, что Algol 60 является очевидной вехой в развитии языков программирования из-за его введения ключевых понятий и его первого использования формальной нотации для синтаксиса. Главными недостатками, были упущение ввода-вывода и, в меньшей степени, дорогостоящий метод передачи параметров «по имени». В Algol-60 есть много улучшений, таких как Algol-W, который был разработан в середине 1960-х годов. Алгол-W очень тесно связан с Алголом-60, хотя они не совместимы друг с другом. Самая большая разница между Algol-W и Algol-60 заключалась в том, что параметры больше не передаются по имени и формулировка цикла «for» была переработана.
Следующие три языка программирования - Pascal, C и Prolog, разработанные в 1970 и 1972 годах, являются одними из ключевых языков периода бума языков программирования, хотя C и Prolog породили значимые языки-потомки. Самое главное, что этот период был, когда были созданы языковые парадигмы или определенные «стили». Этот период разработки программного обеспечения также вызвал большие дебаты по вопросу о переходе к структурированному программированию.
С 1968 года Никлаус Вирт разрабатывает Algol-68. Чтобы изменить его, он разработал преемника Algol, названного языком Pascal. На Pascal сильно повлиял Algol W. Одним из величайших преимуществ в Pascal является его «переносимость». В отличие от FORTRAN и BASIC, Pascal имеет собственный компилятор, который позволяет переносить программы на Pascal из разных систем. Pascal также является хорошо структурированным языком, потому что он позволяет сгруппировать ряд операторов, их программы сделаны очень удобочитаемыми, и они предоставляют универсальные процедуры и функциональные возможности [6]. Однако наибольшие ограничения заключались в том, что он не был разработан с учетом конкретной области применения. Поэтому Pascal — это больше язык общего назначения, но в нем отсутствуют специальные функции для конкретного приложения.
Язык программирования C был создан Деннисом Ритчи в 1972 году. Это язык общего назначения, не очень высокого уровня, и в основном используется в качестве языка системы для операционной системы UNIX. Язык C предоставляет широкий спектр управляющих структур, необходимых для написания хорошо структурированных программ. Язык программирования C не ведет себя как типичный язык высокого уровня, поскольку предлагает функции, аналогичные языкам низкого уровня, поскольку он очень похож на исходный код. По сути, язык C — это системный язык, который обеспечивает доступ низкого уровня с операторами высокого уровня.
В начале 1970-х годов Филипп Руссель и Ален Кольмерауэр в своей группе по искусственному интеллекту в Марселе разработали язык, который работает совершенно иначе, чем другие языки - Prolog и становится предпочтительным языком для искусственного интеллекта. Prolog - это непроцедурный язык с упором на «логическое программирование». В программе Prolog невозможно выразить алгоритм решения проблемы. Программист определяет, что должно быть сделано, а Prolog делает все остальное - программе требуется база данных фактов или знаний - пользователь будет задавать вопросы, а Prolog отвечает списком всех возможных правильных ответов, которые получены баз. Недостатком языка Prolog является то, что обычная одиночная операция отнимает много процессорного времени.
Еще в 1970 году министерство обороны США обнаружило, что во встроенных системах было слишком много языков ассемблера и хотело бы использовать единый язык программирования. В 1975 году исследовательская группа изучила 23 языка, которые уже существовали. Заключение анализа будет состоять в том, что потребуется новый язык, вероятно, основанный на Pascal или Algol. После объявления о проведении тендеров и нескольких отборов, в конце концов, это был проект Жана Ишбиа в 1979 году с командой Honeywell Bull из Марселя, которая была выбрана. Этот язык будет называться Dod-1, а затем Ada, названный в честь Ады Лавлейс. В 1983 году после почти десятилетнего тщательного изучения предыдущих ошибок в дизайне языка программирования – появился язык Ada [6]. Некоторые в области компьютерных наук ожидали, что Ada станет первым языком с потенциалом стать универсальным, почти эксклюзивным языком будущего для встраиваемых систем. Фокус дизайна Ada был направлен Министерством обороны США, которое хотело программу, которая уменьшит количество военных стандартных языков. У Ada было уникальное преимущество: ее определили как американский национальный стандарт до того, как какая-либо реализация стала доступной, что спасло его от распространения искаженных языковых версий. Ada включает в себя лучшие идеи Паскаля, исправленные ошибки и упущения, и имеет гораздо более широкий спектр применения, чем Паскаль.
ГЛАВА 2. Обзор языков программирования высокого уровня
2.1 C++
В начале 80-х годов было посвящено развитие малых вычислительных систем и микрокомпьютеров: появление первых компьютеров и Apple. Однако постепенно начали набирать популярность объектные языки программирования, которые лучше структурированны, легко изменяемые и более безопасны. Одним из таких является язык C++. В 1983 году Бьёрн Страуструп разработал объектно-ориентированное расширение языка C, которое станет языком C++ [7].
C++ является одним из самых популярных языков, когда-либо созданных и широко используемых в индустрии программного обеспечения. Этот язык программирования, в отличии от языка C, включает в себя добавление классов, обработка исключений, виртуальные функции, перегрузка операторов, управление памятью в свободном хранилище и улучшенная проверка типов. Бьёрн Страуструп разработал C++ как идеальную программу для работы с программным обеспечением. Когда он работал в Software Development, он обнаружил, что программа Simula имеет очень полезные функции, но она слишком медленная для использования. Под сильным влиянием Simula он основывал свои улучшения языка C на функциях Simula и сочетал их с быстродействием и эффективностью языком C. Тем не менее, существует ряд серьезных критических замечаний по C++, такие как сложность в освоении, строки кода намного длиннее, нежели в языке C, отсутствуют функции для создания многопоточного программного обеспечения, отсутствие автоматического управления памятью («сборка мусора»).
Каждая программа на C++ должна быть написана в соответствии с очень строгими правилами написания. Для написания программы на данном языке необходимо создать один или несколько исходных файлов и скомпилировать их, чтобы получить исполняемую программу. Этот этап – компиляция. Исходные файлы - это читаемые текстовые файлы, имена которых обычно заканчиваются на .c, .cpp или .h. Исполняемые файлы обычно имеют расширение .exe под Windows и не имеют расширения под Linux. Для того чтобы менять код в исходных файлах, нужен компилятор, одним из которых может быть GNU Compiler Collection (GCC). Он является интегрированной средой разработки (IDE), который включает в себя полный набор инструментов, позволяющих редактировать и изменять исходные файлы, компилировать их, запускать исполняемый файл, «отлаживать» программу и так далее [8]. Существуют и многие другие компилятору не уступающие друг другу и имея свои преимущества. Например, Visual C++, C++ Builder, Dev-cpp (на основе GCC), Delphi и другие.
Рассмотрим код простой программы:
//коментарий
#include <iostream>
using namespace std;
int main()
{
cout << "The chosen one\n";
cin >>
return 0;
}
//коментарий
Компилятор игнорирует комментарии при выполнении кода, что позволяет использовать любое количество комментариев, чтобы описать его.
#include <iostream>
Директива #include обычно включает ряд инструкций, которые позволяют включать в программу определённые объекты, типы или функции. Имя файла может быть либо внутри < и >, либо в кавычках:
• #include <имя_файла> Включить имя файла, сначала найдя его в настроенных путях, а затем в том же каталоге, что и исходный файл,
• #include "имя_1" Включение имя файла «имя_1», отыскивая его сначала в том же каталоге, что и исходный файл, а затем в настроенных путях.
using namespace std;
Эта строка указывает на использование пространства имен std. Пространство имен — это набор классов, одним из которых является cout. Поскольку мы хотим использовать объект cout, необходимо указать, что по умолчанию мы будем использовать пространство имен std. Также следует отметить, что стандартные заголовочные файлы больше не имеют имен с расширением .h (например, iostream.h). Если эти заголовочные файлы включены без указания команды, использующей пространство имен std.
int main()
Программа содержит функцию с именем main: с этого момента программа начнет выполняться, и функция возвращает целое число типа int.
{ и }
Фигурные скобки сигнализируют, что о начале и конце функции.
cout << "The chosen one\n";
Это поток вывода программы (Console Output). Этот выходной поток по умолчанию отправляется на экран. Он будет использоваться для отображения сообщений на экране с помощью оператора << (в нашем случае текст «The chosen one»). \n рассматривается как единый символ, который обозначает новую строку.
cin >>
Это поток входа данных (Console Input). Она считывает данные из входного потока данных и ожидает нажатия клавиши ENTER.
return 0
По достижении конца главной функции (закрывающая фигурная скобка), наша программа вернёт значение 0 для операционной системы. Это возвращаемое значение является важным, поскольку, проанализировав его, операционная система может судить о том, успешно завершилась наша программа или нет.
Пройдем по основам языка программирования C++:
- В языке C++ определены следующие основные типы данных:
- Bool - логический тип. Может быть представлен значением true (истина) и false (ложь).
- Char - один символ в кодировке ASCII. Занимает в памяти 1 байт.
- Int - целое число. В зависимости от архитектуры процессора может занимать 2 байта или 4 байта. Диапазон может варьироваться от –32 768 до 32 767 или от −2 147 483 648 до 2 147 483 647.
- Short - целое число в диапазоне от –32 768 до 32 767. Занимает в памяти 2 байта.
- Long - целое число в диапазоне от −2 147 483 648 до 2 147 483 647. Занимает в памяти 4 байта.
- Long long - целое число в диапазоне от −9 223 372 036 854 775 808 до +9 223 372 036 854 775 807. Занимает в памяти 8 байт.
- Float - вещественное число с плавающей точкой в диапазоне 3.4E-38 до 3.4E+38. В памяти занимает 4 байта.
- Double - вещественное число с плавающей точкой в диапазоне 1.7E-308 до 1.7E+308. В памяти занимает 8 байт.
- Long double - вещественное число с плавающей точкой не менее 8 байт. В зависимости от размера занимаемой памяти может отличаться диапазон допустимых значений.
- Void: тип без значения.
- В языке программирования C++ арифметические операции могут быть бинарными (производятся над двумя операндами) и унарными (выполняются над одним операндом).
К бинарным операциям относят: +, -, *, /, % (получение остатка от деления).
К унитарным операциям относят: ++ (инкремент) и -- (декремент). Каждая из операций имеет два типа: префиксная и постфиксная: ++a (увеличивает значение переменной на единицу и полученный результат используется как значение выражения ++а), a++ (увеличивает значение переменной на единицу, но значением выражения a++ будет то, которое было до увеличения на единицу), --a (уменьшает значение переменной на единицу, и полученное значение используется как значение выражения --a), a— (уменьшает значение переменной на единицу, но значением выражения a-- будет то, которое было до уменьшения на единицу).