Эволюция языков программирования
В развитии инструментального программного обеспечения (т.е. про-граммного обеспечения, служащего для создания программных средств в любой проблемной области) рассматривают пять поколений языков про-граммирования (ЯП).
Поколе¬ния
Языки программирования
Характеристика
Первое
Машинные
Ориентированы на использование в конкретной ЭВМ, сложны в освоении, требуют хорошего знания архитектуры ЭВМ
Второе
Ассемблеры, Макроассемблеры
Более удобны для использования, но по-прежнему машинно-зависимы
Третье
Языки высокого уровня
Мобильные, человеко- ориентированные, проще в освоении
Четвертое
Непроцедурные, объектно-ориентированные, языки запросов, параллельные
Ориентированы на непрофессиональ¬ного пользователя и на ЭВМ с парал¬лельной архитектурой
Пятое
Языки искусственного интеллекта, экспертных систем и баз знаний, естественные языки
Ориентированы на повышение интел¬лектуального уровня ЭВМ и интерфейса с языками
ЯП первого поколения представляли собой набор машинных ко¬манд в двоичном (бинарном) или восьмеричном формате, который оп¬ределялся архитектурой конкретной ЭВМ. Каждый тип ЭВМ имел свой ЯП, программы на котором были пригодны только для данного типа ЭВМ. От программиста при этом требовалось хорошее знание не только машинного языка, но и архитектуры ЭВМ.
Второе поколение ЯП характеризуется созданием языков ассемб-лерного типа (ассемблеров, макроассемблеров), позволяющих вместо двоичных и других форматов машинных команд использовать их мне-монические символьные обозначения (имена). Являясь существенным шагом вперед, ассемблерные языки все еще оставались машинно-зависимыми, а программист все также должен был быть хорошо знаком с организацией и функционированием аппаратной среды конкретного типа ЭВМ. При этом ассемблерные программы все так же затрудни¬тельны для чтения, трудоемки при отладке и требуют больших усилий для переноса на другие типы ЭВМ. Однако и сейчас ассемблерные язы¬ки используются при необходимости разработки высокоэффективного программного обеспечения (минимального по объему и с максимальной производительностью).
Третье поколение ЯП начинается с появления в 1956 г. первого языка высокого уровня — Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. За короткое время Fortran становится основ¬ным ЯП при решении инженерно-технических и научных задач. Перво¬начально Fortran обладал весьма ограниченными средствами обеспече¬ния работы с символьной информацией и с системой ввода-вывода. Од¬нако постоянное развитие языка сделало его одним из самых распространенных ЯВУ на ЭВМ всех классов — от микро- до супер¬ЭВМ, а его версии используются и для вычислительных средств нетра¬диционной параллельной архитектуры.
Вскоре после языка Fortran появились такие ныне широко извест¬ные языки, как Algol, Cobol, Basic, PL/1, Pascal, APL, ADA, C, Forth, Lisp, Modula и др. В настоящее время насчитывается свыше 2000 раз¬личных языков высокого уровня.
Языки четвертого поколения носят ярко выраженный непроцедур¬ный характер, определяемый тем, что программы на таких языках опи¬сывают только что, а не как надо сделать. В программах формируются скорее соотношения, а не последовательности шагов выполнения алго¬ритмов. Типичными примерами непроцедурных языков являются языки, используемые для задач искусственного интеллекта (например, Prolog, Langin). Так как непроцедурные языки имеют минимальное число син-таксических правил, они значительно более пригодны для применения непрофессионалами в области программирования.
Второй тенденцией развития ЯП четвертого поколения являются объектно-ориентированные языки, базирующиеся на понятии про¬граммного объекта, впервые использованного в языке Simula-67 и со¬ставившего впоследствии основу известного языка SmallTalk. Про¬граммный объект состоит из структур данных и алгоритмов, при этом каждый объект знает, как выполнять операции со своими собственными данными. На самом деле, различные объекты могут пользоваться со¬вершенно разными алгоритмами при выполнении действий, определен¬ных одним и тем же ключевым словом (так называемое свойство поли- 42 морфизма). Например, объект с комплексными числами и массивами в качестве данных будет использовать различные алгоритмы для выпол¬нения операции умножения. Такими свойствами обладают объектно- ориентированные Pascal, Basic, С++, SmallTalk, Simula, Actor и ряд дру¬гих языков программирования.
Третьим направлением развития языков четвертого поколения можно считать языки запросов, позволяющих пользователю получать информацию из баз данных. Языки запросов имеют свой особый син¬таксис, который должен соблюдаться, как и в традиционных ЯП третье¬го поколения, но при этом проще в использовании. Среди языков запро¬сов фактическим стандартом стал язык SQL (Structured Query Language).
И, наконец, четвертым направлением развития являются языки па-раллельного программирования (модификация ЯВУ Fortran, языки Occam, SISAL, FP и др.), которые ориентированы на создание про¬граммного обеспечения для вычислительных средств параллельной ар¬хитектуры (многомашинные, мультипроцессорные среды и др.), в отли¬чие от языков третьего поколения, ориентированных на традиционную однопроцессорную архитектуру.
К интенсивно развивающемуся в настоящее время пятому поколе¬нию относятся языки искусственного интеллекта, экспертных систем, баз знаний (InterLisp, ExpertLisp, IQLisp, SAIL и др.), а также естествен¬ные языки, не требующие освоения какого-либо специального синтак¬сиса (в настоящее время успешно используются естественные ЯП с ог¬раниченными возможностями — Clout, Q&A, HAL и др.).
Классификация ЯП
Изучение ЯП часто начинают с их классифика¬ции. Определяющие факторы классификации обычно жестко не фиксиру¬ются. Чтобы продемонстрировать характер типичной классификации, опи¬шем наиболее часто применяемые факторы, дадим им условные названия и приведем примеры ЯП для каждой из классификационных групп (табл. 1.7).
Фактор
Характеристика
Группы
Примеры ЯП
Степень близости ЯП к архитектуре компьютера
Низкий
Автокод, ассемблер
Уровень ЯП
Высокий
Fortran, Pascal, ADA, Basic, С и др. ЯВУ
Сверхвысокий
Сетл
Общего назначе¬ния (универ¬сальные)
Algol, PL/1, Simula, Basic, Pascal
Специали¬зация ЯП
Потенциальная или реальная об¬ласть применения
Специализиро-ванные
Fortran (инженерные рассчеты),
Cobol (коммерческие задачи),
Refal, Lisp (символь¬ная обработка), Modula, Ada (про-граммирование в реальном времени)
Алгорит- мичность (процедур- ность)
Возможность абстрагироваться от деталей алгоритма решения задачи. Алгоритмичность тем выше, чем точнее приходится планировать поря¬док выполняемых действий
Процедурные
Ассемблер, Fortran, Basic, Pascal, Ada
Непроцедурные
Prolog, Langin
Элементы языков программирования
Элементы языков программирования могут рассматриваться на следующих уровнях:
алфавит — совокупность символов, отображаемых на устройствах печати и экранах и/или вводимых с клавиатуры терминала. Обычно это набор символов Latin-1, с исключением управляющих символов. Иногда в это множество включаются неотображаемые символы, с указанием правил их записи (комбинирование в лексемы);
лексика — совокупность правил образования цепочек символов (лексем), образующих идентификаторы (переменные и метки), операто¬ры, операции и другие лексические компоненты языка. Сюда же вклю¬чаются зарезервированные (запрещенные, ключевые) слова ЯП, предна¬значенные для обозначения операторов, встроенных функций и пр.
синтаксис — совокупность правил образования языковых конст-рукций, или предложений ЯП — блоков, процедур, составных операто¬ров, условных операторов, операторов цикла и пр. Особенностью син¬таксиса является принцип вложенности (рекурсивность) правил построения конструкций;
семантика — смысловое содержание конструкций, предложений языка, семантический анализ — это проверка смысловой правильности конструкции. Например, если мы в выражении используем перемен¬ную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа пере¬менной, можно говорит о допустимости операции с данной перемен¬ной. Семантические ошибки возникают при недопустимом использова¬нии операций, массивов, функций, операторов и пр.
Понятие системы программирования. Исходный, объектный и загрузочный модули. Интегрированная среда
Система программирования представляет собой совокупность средств разработки программ (языки программирования, текстовые ре¬дакторы, трансляторы, редакторы связей, библиотеки подпрограмм, утилиты и обслуживающие программы), обеспечивающих автоматиза¬цию составления и отладки программ пользователя.
Признак классификации
Типы
Набор исходных языков
Одноязыковые
Многоязыковые
Возможности расширения
Замкнутые
Открытые
Трансляция
Компиляция
Интерпретация
Системы программирования классифицируются по признакам, приведенным в табл. 1.9.
Следует отметить, что: отличительной особенностью многоязыковых систем является то, что отдельные части (секции, модули или сегменты) программы могут быть подготовлены на различных языках и объединены во время или перед выполнением в единый модуль;
в открытую систему можно ввести новый входной язык с трансля¬тором, не требуя изменений в системе;
в интерпретирующей системе осуществляется покомандная рас-шифровка и выполнение инструкций входного языка (в среде данной системы программирования); в компилирующей — подготовка резуль¬тирующего модуля, который может выполняться на ЭВМ практически независимо от среды.
Рассмотрим структуру абстрактной многоязыковой, открытой, компилирующей системы программирования и процесс разработки приложений в данной среде (рис. 1.7).
Ввод. Программа на исходном языке (исходный модуль) готовится с помощью текстовых редакторов и в виде текстового файла или разде¬ла библиотеки поступает на вход транслятора.
Трансляция. Трансляция исходной программы есть процедура пре-образования исходного модуля в промежуточную, так называемую объ-ектную форму. Трансляция в общем случае включает в себя препроцес- синг (предобработку) и компиляцию.
Препроцессинг — необязательная фаза, состоящая в анализе ис¬ходного текста, извлечения из него директив препроцессора и их вы¬полнения.
Директивы препроцессора представляют собой помеченные спец-символами (обычно %, #, &) строки, содержащие аббревиатуры или другие символические обозначения конструкций, включаемых в состав исходной программы перед ее обработкой компилятором.
Компиляция — в общем случае многоступенчатый процесс, вклю-чающий следующие фазы:
синтаксический анализ — проверка правильности конструкций, ис-пользованных программистом при подготовке текста;
семантический анализ — выявление несоответствий типов и струк¬тур переменных, функций и процедур;
генерация объектного кода — завершающая фаза трансляции.
Выполнение трансляции (компиляции) может осуществляться в различных режимах, установка которых производится с помощью клю¬чей, параметров или опций. Может быть, например, потребовано только выполнение фазы синтаксического анализа и т.п.
Объектный модуль представляет собой текст программы на ма¬шинном языке, включающий машинные инструкции, словари, служеб¬ную информацию.
Объектный модуль не работоспособен, поскольку содержит неразре-шенные ссылки на вызываемые подпрограммы библиотеки транслятора (в общем случае — системы программирования), реализующие функции вво- да-вывода, обработки числовых и строчных переменных, а также на другие программы пользователей или средства пакетов прикладных программ.
Построение исполнительного модуля. Построение загрузочного модуля осуществляется специальными программными средствами — редактором связей, построителем задач, компоновщиком, основной функцией которых является объединение объектных и загрузочных мо¬дулей в единый загрузочный модуль с последующей записью в библио¬теку или файл. Полученный модуль в дальнейшем может использовать¬ся для сборки других программ и т.д., что создает возможность наращи¬вания программного обеспечения.
Эволюция языков программирования
Реферат по предмету «Информатика»