2.2. ПРАГМАТИКА
85
Во многих языках, в частности, в
Object Pascal
, для подобных целей ис-
пользуется более концептуально подходящее средство,так называемая услов-
ная компиляция. Суть его в том,что программисту дана возможность указать,
что некоторый фрагмент компилируется, если при компиляции задан соот-
ветствующий параметр (опция), и не компилируется в противном случае.
При этом оказывается исключенной ситуация, приведенная в предыдущем
примере,поскольку чаще всего способ,которым задается фрагмент, привязан
к синтаксическим конструкциям языка, т. е. условную компиляцию можно
задавать не для произвольных фрагментов, а лишь для тех, которые являют-
ся языковыми конструкциями. При условной компиляции проверяется кор-
ректность синтаксиса и,что не менее существенно, зримый образ программы
явно отражает ее вариантность (именно это свойство нарушено в примере
2.2.3). Конечно, программист на
С
может писать тексты, в которых не по-
является незаметная смесь вариантов, но, к сожалению, проверить, что это
условие выполнено, препроцессор не в состоянии.
Разработчики
С
с самого начала мало заботились о концептуальной це-
лостности языка. Это привело к тому, что при развитии языка концептуаль-
ная эклектика множилась: надо было заботиться о стихийно складывающих-
ся традициях использования языка, чтобы не терять активно работающих
пользователей. Ситуация типичная, она многократно повторялась в истории.
В этой связи поучительно будет обсудить ход развития другого языка —
Pascal
линии
Turbo
. Изначально целостная модель вычислений стандартного язы-
ка
Pascal
не во всем удовлетворяла практических программистов. Это стало
стимулом для развития языка, которое среди прочих вариантов демонстри-
рует последовательность версий
Turbo Pascal
. Разработчики данной линии
смогли сохранить стиль прародительского языка вплоть до версии 7, несмо-
тря на значительные расширения. В целом они успешно решали очень труд-
ную задачу отделения прагматики от развивающейся модели вычислений.
Однако с ней не удалось справиться тем же разработчикам, когда они взя-
лись за конструирование принципиально новой системы программирования
Delphi
и ее языка
Object Pascal
(причины могут быть разные, в том числе
банальная конкурентная гонка, которая, безусловно, заставляла чем-то жерт-
вовать). Одним из многих отрицательных следствий явилась принципиаль-
ная неотделимость языка от системы программирования, а потому — бес-
смысленность их самостоятельного раздельного развития. А далее история
Delphi
с точностью до деталей повторяет то, что было с языком
С/С++
. В
последовавших версиях системы, вынужденных поддерживать преемствен-
ность, все более переплетаются модель вычислений и прагматика.