Непейвода Н.Н. Программирование. Раздел 1

Непейвода Н.Н. Программирование. Страница 74

Наложение команд препроцессора на текст программы — это смешение двух моделей вычислений: одна из них — модель базового языка С, другая — модель препроцессора. В результате программист при составлении и изу­чении программ вынужден думать на двух уровнях сразу, а это и трудно, и провоцирует ошибки.

Во многих языках, в частности вObjectPascal'e, для подобных целей используется более концептуально подходящее средство, так называемая условная компиляция. Суть его в том, что программисту дана возможность указать, что некоторый фрагмент компилируется, если при компиляции за­дан соответствующий параметр (опция), и не компилируется в противном случае. При этом оказывается исключенной ситуация, приведенная в преды­дущем примере, поскольку чаще всего способ, которым задается фрагмент, привязан к синтаксическим конструкциям языка, т. е. условную компиляцию можно задавать не для произвольных фрагментов, а лишь для тех, которые являются языковыми конструкциями. При условной компиляции проверя­ется корректность синтаксиса и, что не менее существенно, зримый образ программы явно отражает ее вариантность (именно это свойство нарушено в примере 2.2.3). Конечно, программист на С может писать тексты, в которых не появляется незаметная смесь вариантов, но, к сожалению, проверить, что это условие выполнено, препроцессор не в состоянии.

Разработчики С с самого начала мало заботились о концептуальной це­лостности языка. Это привело к тому, что при развитии языка концептуаль­ная эклектика множилась: надо было заботиться о стихийно складывающих­ся традициях использования языка, чтобы не терять активно работающих пользователей. Ситуация типичная, она многократно повторялась в исто­рии. В этой связи поучительно будет обсудить ход развития другого языка — PascalлинииTurbo.Изначально целостная модель вычислений стандартно­го языкаPascalне во всем удовлетворяла практических программистов. Это стало стимулом для развития языка, которое среди прочих вариантов де­монстрирует последовательность версийTurbo Pascal.Разработчики данной линии смогли сохранить стиль прародительского языка вплоть до версии 7, несмотря на значительные расширения. В целом они успешно решали очень трудную задачу отделения прагматики от развивающейся модели вычис­лений. Однако с ней не удалось справиться тем же разработчикам, когда они взялись за конструирование принципиально новой системы npoq^aMмирования Delphiи ее языка ObjectPascal(причины могут быть разные, в том числе банальная конкурентная гонка, которая, безусловно, заставля­ла чемто жертвовать). Одним из многих отрицательных следствий явилась принципиальная неотделимость языка от системы программирования, а по­тому — бессмысленность их самостоятельного раздельного развития. А да­лее история Delphiс точностью до деталей повторяет то, что было с языком C/C++. В последовавших версиях системы, вынужденных поддерживать пре­емственность, все более переплетаются модель вычислений и прагматика.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама