2.2. ПРАГМАТИКА
83
проверок, режим вычислений. Выбор режимов управляется пользователем с
помощью прагматических указаний для транслятора.
Конец примера 2.2.2.
Очень часто прагматические указания в языках программирования задаются
неявно, иногда даже без соответствующих разъяснений в руководствах. При-
мер операторов увеличения и уменьшения на единицу из
Turbo Pascal
демон-
стрирует ситуацию наглядно. Гораздо реже языковая прагматика оформляет-
ся явно. В качестве исключения, которое показывает, как можно определять
прагматику в языке, стоит еще раз обратить внимание на то, как указывается
в
Turbo Pascal
задание контроля значений индексов, другие режимы транс-
ляции и исполнения (см. пример 2.2.1).
Определение модели вычислений языка дает рецепт, как отделять праг-
матику от семантики: прагматика — это то, что органично не вписывается в
абстрактные вычисления программы. Но это весьма неконструктивный ре-
цепт, и разработчики языка должны прилагать специальные усилия, чтобы
обеспечить явное выделение прагматического уровня. Зачем это нужно? От-
вет прост: без этого может сложиться превратное представление как о пред-
лагаемой модели вычислений, так и о ее реализации. Вдобавок к тому, рез-
ко ограничиваются возможности программиста применять в своей практике
методы абстрагирования. Следующие иллюстрации обосновывают данное
утверждение.
Пример 2.2.3. Стандарт языка
С
предписывает, что системы программиро-
вания на нем должны предусматривать специальный инструмент для обра-
ботки программных текстов, который называется препроцессором. Препро-
цессор делает массу полезных преобразований. Как уже упоминалось, он бе-
рет на себя решение задачи подключения к программе внешних (библиотеч-
ных) файлов (см. 1.2), с его помощью можно скрывать утомительные детали
программирования,достигать ряда нужных эффектов,не предусмотренных в
основных средствах языка (например, именованные константы — см. 1.5.1).
Постулируется, что программа на языке
С
есть то, что получается после ра-
боты препроцессора с текстом (разумеется, если результат такой работы ока-
жется корректным). Следовательно, использование препроцессора — син-
таксическая прагматика языка. Но это противоречит практике работы про-
граммиста: он просто не в состоянии написать содержательную программу,
которая могла бы выполняться без использования при своей трансляции пре-
процессора. Если при программировании на
С
ограничиваются употребле-