Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций Языки программирования.doc
Скачиваний:
9
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Базисные свойства языков программирования

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

Конечно, кроме операции присваивания, среди основных есть еще и операции ввода-вывода. Что интересно - в первых ЯП, таких как Fortran, Алгол и др., средства ввода-вывода были встроены, а уже язык C отказался от этого принципа - он был первым языков, в котором ввод-вывод был вынесен из базиса. В середине 70х это был резкий шаг вперед в отношении вопроса: что должно быть, а что не должно быть в ЯП.

В языке С была использована процедурная абстракция. Вообще говоря, это очень мощный механизм, который позволяет выкидывать из языка большие «куски» (средства общения с ОС, ввод-вывод и другие) и реализовать их посредством процедурных и других абстракций.

В результате, становится интересным размышление на тему «А что должно вообще остаться в базисе ЯП?». Что необходимо, чтобы можно было развивать этот ЯП? Не в том плане, чтобы добавлять новые конструкции. Это было модно в 60-70х годах на изменяемых ЯП, которые позволяли изменять сами себя - не только формировать программу, но и расширять набор своих конструкций - в настоящее время это направление практически заглохло. В чем были проблемы расширяемых языков? Очевидно, что одно дело - добавление новых процедур, другое дело - добавление языковых конструкций. В последнем случае следует, как минимум изменить алгоритм синтаксического анализатора, а точнее говоря, сделать механизм синтаксического анализатора настолько изощренным, чтобы он мог воспринимать различные конструкции, в том числе и новые. Программы же, написанные на таком языке были более криптографические и сложные в понимании.

Так какой же минимум должен давать ЯП, чтобы он продолжал жить полнокровной жизнью, т.е. люди на нем писали. Если с это точки зрения посмотреть на ЯП, то минимальными (критическими) пунктами будут всего три:

  • процедурная абстракция;

  • раздельная компиляция (менее жесткое требование):

  • межмодульная коммуникация (по данным).

Все эти три пункта присутствуют, например, в языке Fortran. Даже в самой первой версии уже были подпрограммы. Неизвестно из каких соображений автор ввел в язык это понятие, но понятно, что при вычислении сложных математических формул очень удобно распределить вычисления по функциям.

Кроме этого, в Фортране была раздельная компиляция, т.е. каждая процедура и функция транслировалась отдельно.

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

С точки зрения структуры, это, конечно, была явно недоделанная система. Но зато в Фортране впервые возникло понятие именованной области памяти, к которой могли иметь доступ разные блоки.

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