Файл: Классификация языков программирования высокого уровня (Сущность языка программирования).pdf
Добавлен: 29.03.2023
Просмотров: 263
Скачиваний: 1
ВВЕДЕНИЕ
Сегодня категория «информация» нередко определяется как нечто, дающее нам представление об окружающем мире и его составляющих. К таким составляющим относятся различные явления и предметы, другие люди, представители флоры и фауны и вообще все, что мы можем ощутить при помощи органов чувств.
Не так давно информация перешла в новый для человечества формат – в электронный формат. И это стало одновременно и спасением, и проклятием. Так, с одной стороны, человечество сделало несравненно значительный шаг вперед, получив возможность обрабатывать информацию в миллионы раз быстрее, чем раньше – мы можем узнать практически все за считанные секунды, можем общаться с людьми, находящимися на другом конце света. Новые информационные технологии перевернули также представление о медицине, науке и технике, и вообще во многих сферах жизни общества сегодня мы можем делать то, о чем раньше и не мечтали. С другой же стороны, мы получили еще одну уязвимую сторону жизни. Информация, хранящаяся в электронном виде, подвержена значительному числу угроз. Частная жизнь может стать достоянием общественности, корпоративная и даже государственная тайна могут быть раскрыты в считанные минуты, что приведет к непредсказуемым последствиям.
Современные технические средства обработки информации и, в частности, персональные компьютеры стали по-настоящему неотъемлемой частью жизни общества и отдельных людей. Каждое такое средство функционирует благодаря стройной взаимосвязанной работе систем логического и аппаратного обеспечения. Программное обеспечение многогранно и разнообразно, нацелено на выполнение различных задач и целей. И достигать этих целей позволяет целый ряд современных языков программирования, благодаря использованию которых сегодня возможно создание самых разнообразных программных продуктов.
Для подробного исследования проблемы необходимо выполнить цель – осуществить классификацию языков программирования высокого уровня. Для достижения цели выполним следующие задачи:
- рассмотреть сущность языков программирования;
- кратко охарактеризовать историю развития языков программирования;
- классифицировать языки программирования;
- рассмотреть и классифицировать языки программирования высокого уровня;
- подвести итоги исследования.
Объект исследования – языки программирования высокого уровня. Предмет – классификация языков программирования высокого уровня.
Теоретическая основа работы – исследования известных авторов, освещающих проблему программирования в целом и языков программирования – в частности. Например, такие авторы как Рак И. П,, Финогенов К. Г. и др.
1. Язык программирования
1.1. Сущность языка программирования
Язык программирования – искусственный (формальный) язык, предназначенный для записи программ для исполнителя (например, компьютера или станка с числовым управлением). Язык программирования задается своим описанием. Описание языка программирования – это документ, специфицирующий возможности алгоритмического языка [4]. Обычно описание содержит:
- алфавит допустимых символов и служебных (ключевых) слов;
- синтаксические правила построения из алфавита допустимых конструкций языка;
- семантику, объясняющую смысл и назначение конструкций языка [4].
Языки программирования служат для представления решения задач в такой форме, чтобы они могли быть выполнены на ЭВМ.
Машинный язык, который состоит из команд процессора ЭВМ, также является языком программирования. Но алгоритмы, записанные на машинном языке, трудны для чтения даже программисту–разработчику, кроме того, работа с таким языком требует знания архитектуры конкретного компьютера, поэтому в программировании, как правило, используют языки более высокого уровня, чем машинные языки. Язык высокого уровня – это язык программирования, понятия и структура которого удобны для восприятия человеком и не зависят от конкретного компьютера, на котором будет выполняться программа.
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько «близок к машине», что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. Второй цели идеально отвечает язык, который настолько «близок к решаемой задаче», чтобы концепции ее решения можно было выражать прямо и коротко.
Связь между языком, на котором мы думаем/программируем, и задачами и решениями, которые мы можем представлять в своем воображении, очень близка. По этой причине ограничивать свойства языка только целями исключения ошибок программиста в лучшем случае опасно. Как и в случае с естественными языками, есть огромная польза быть, по крайней мере, двуязычным. Язык предоставляет программисту набор концептуальных инструментов, если они не отвечают задаче, то их просто игнорируют. Например, серьезные ограничения концепции указателя заставляют программиста применять вектора и целую арифметику, чтобы реализовать структуры, указатели и т.п. Хорошее проектирование и отсутствие ошибок не может гарантироваться чисто за счет языковых средств. [19]
Может показаться удивительным, но конкретный компьютер способен работать с программами, написанными на его родном машинном языке. Существует почти столько же разных машинных языков, сколько и компьютеров, но все они суть разновидности одной идей простые операции производятся со скоростью молнии на двоичных числах.
Можно писать программы непосредственно на машинном языке, хотя это и сложно. На заре компьютеризации(в начале 1950–х г.г.), машинный язык был единственным языком, большего человек к тому времени не придумал. Для спасения программистов от сурового машинного языка программирования, были созданы языки высокого уровня (т.е. немашинные языки), которые стали своеобразным связующим мостом между человеком и машинным языком компьютера. Языки высокого уровня работают через трансляционные программы, которые вводят «исходный код» (гибрид английских слов и математических выражений, который считывает машина), и в конечном итоге заставляет компьютер выполнять соответствующие команды, которые даются на машинном языке. Существует два основных вида трансляторов: интерпретаторы, которые сканируют и проверяют исходный код в один шаг, и компиляторы, которые сканируют исходный код для производства текста программы на машинном языке, которая затем выполняется отдельно [19].
1.2. История развития языков программирования
Первые программы писались на машинном языке, т.к. для ЭВМ того времени еще не существовало развитого программного обеспечения, а машинный язык – это единственный способ взаимодействия с аппаратным обеспечением компьютера, так называемым «железом». Каждую команду машинного языка напрямую выполняет то или иное электронное устройство. Данные и команды записывали в цифровом виде (например, в шестнадцатеричной или двоичной системах счисления). Понять программу на таком языке очень сложно; кроме того, даже небольшая программа получалась состоящей из множества строк кода. Ситуация осложнялась еще и тем, что каждая вычислительная машина понимает лишь свой машинный язык [11].
Людям, в отличие от машин, более понятны слова, чем наборы цифр. Стремление человека оперировать словами, а не цифрами привело к появлению ассемблеров. Это языки, в которых вместо численного обозначения команд и областей памяти используются словесно–буквенные.
При этом появляется проблема: машина не в состоянии понимать слова. Необходим какой–нибудь переводчик на ее родной машинный язык. Поэтому, начиная со времен ассемблеров, под каждый язык программирования создаются трансляторы – специальные программы, преобразующие программный код с языка программирования в машинный код. Ассемблеры на сегодняшний день продолжают использовать. В системном программировании с их помощью создаются низкоуровневые интерфейсы операционных систем, компоненты драйверов.
После ассемблеров наступил рассвет языков так называемого высокого уровня. Для этих языков потребовалось разрабатывать более сложные трансляторы, т. к. языки высокого уровня куда больше удобны для человека, чем для вычислительной машины. В отличие от ассемблеров, которые остаются привязанными к своим типам машин, языки высоко уровня обладают переносимостью. Это значит, что, написав один раз программу на языке программирования высокого уровня, программист может выполнить ее на любом компьютере, если на нем установлен соответствующий ему транслятор [11].
Следующим значимым шагом было появление объектно–ориентированных языков программирования, что, в первую очередь, было связано с усложнением разрабатываемых программ. С помощью таких языков программист как бы управляет виртуальными объектами, что в определенном смысле сближает программу с реальностью. На сегодняшний день в большинстве случаев реализация больших и сложных проектов осуществляется с помощью объектно–ориентированных возможностей языков. Хотя существуют и другие современные парадигмы программирования, поддерживаемые другими или теми же языками.
В настоящее время существует множество различающихся и похожих между собой языков программирования. Причина такого явления становится понятна, если представить то количество и разнообразие задач, которые на сегодняшний день решается с помощью вычислительной техники. Для решения разных задач требуются разные инструменты, т. е. разные языки и парадигмы программирования.
Многие программисты старались в прошлом и возможно пытаются сейчас придумать свой язык программирования, обладающий теми или иными преимуществами. Хотя подавляющее большинство в настоящее время тратят огромное количество времени на изучение уже существующего арсенала инструментов, поддержку и развитие имеющихся языков [9].
В первой главе работы рассмотрено понятие языка программирования. Из рассмотренной истории языков программирования можно сделать вывод, что они развивались достаточно стремительно, благодаря чему за относительно короткий срок (от изобретения вычислительной машины Беббиджа и до сегодняшних дней) человечество получило внушительное разнообразие языков программирования.
2. Языки программирования высокого уровня
2.1. Классификация языков программирования
За 60 с лишним лет развития ЭВМ были разработаны сотни языков программирования, многие из которых используются и сейчас (например Бейсик и Фортран были впервые применены уже в конце 1950–х годов), ежегодно появляется несколько новых языков промышленного применения (не считая десятков экспериментальных). Для того чтобы разобраться в них, языки классифицируют по важнейшим признакам:
- эволюционным – поколения языков (1GL, 2GL, 3GL, 4GL, 5GL...);
- функциональным – по назначению, исполняемым функциям (описательные, логические, математические);
- уровню языка – то есть уровню обобщения в словах–операторах языка (низкого, среднего, высокого...);
- области применения – то есть где применяется язык (системные, сетевые, встроенные и пр.
Все типы классификаций естественным образом пересекаются, гармонируют между собой, что мы увидим при рассмотрении этих классификаций, что при понимании этого позволит легко разобраться в любом новом языке – его назначении, возможностях, технике освоения [14].
Рассмотрим классификацию относительно поколений языков программирования
Поколение 1GL.
Машинные языки, языки низкого уровня – двоичные языки процессоров, представляющие собой набор (алфавит) команд, записанных в двоичном коде (0,1), которые данный процессор может выполнить непосредственно, если эти команды ввести в его память в виде последовательности или сразу подать в арифметическо–логическое устройство процессора. Примеры: язык процессора IBM–PC, язык ARM–процессора [19].
Поколение 2GL.
Ассемблеры, автокоды, системные языки, языки среднего уровня – текстовые языки, понятные человеку и однозначно переводимые (транслируемые) в языки низкого уровня, то есть машинный двоичный код. Программирование на 2GL на порядок производительнее, чем на 1GL, так как более удобны для человеческого восприятия. Примеры: Макроссемблер, С, PL/1.
Поколение 3GL.
Языки высокого уровня – текстовые языки, приближенные по словарю и синтаксису к человеческому языку (обычно утрированному английскому, пиндосу), позволяющие записывать программные конструкции в форме, удобной для человеческого мышления и подобные обычному тексту – конспекту, стенограмме. Программирование на 3GL на порядок производительнее, чем на 2GL, так как более удобны для человеческого восприятия и на порядок короче ассемблерных. Примеры: бейсик, фортран, PHP и практически все сетевые языки.