Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 89
Текст из файла (страница 89)
Верификация намного упрощается, если используются либо только циклы с условиями и операторы ветвления, подобные операторам ветвления языка Разса1, либо только защищенные команды. Аксиоматическая семантика защищенных команд определена в работе Опез (1981). Однако очевидно, что сложность реализации защищенных команд значительно увеличивается по сравнению с их детерминированными аналогами. 7.7.
Выводы Мы описали и обсудили множество управляющих структур на уровне операторов. Теперь на очереди их краткая оценка. Во-первых, мы получили теоретический результат, заключающийся в том, что для выражения вычислений абсолютно необходимы только последовательность, ветвление и логически управляемые циклы с предварительной проверкой условий (Вбпщ апд )асор1п1, 1966). Этот результат широко используется теми, кто желает запретить все безусловные переходы. Конечно, достаточно уже и практических проблем, связанных с операторамн 8о1о, для того чтобы осудить нх без подыскивания теоретических причин.
Одно нз применений оператора 8о1о, которое многие считают достаточным для его оправдания, состоит в использовании его лля преждевременного выхода из циклов в языках, в которых для этого не предусмотрены специальные операторы выхода. Не следует на основании результата Бема и Джакопини возражать против включения в язык любых управляющих структур, кроме ветвления и логически управляемых циклов с предварительной проверкой условий.
Не существует ни одного широко используемого языка программирования, в котором был бы сделан такой шаг; кроме того, мы сомневаемся, что такой язык вообще когда-нибудь появится, вследствие влияния такого шага на читабельность и легкость создания программ. Программы, написанные с использованием исключительно операторов ветвления и логически управляемых циклов с предварительной проверкой условий обычно имеют менее естественную структуру, являются более сложными и, следовательно, более трудными для созлания и чтения. Например, многовариантная структура ветвления языка Аоа намного облегчила написание программ на этом языке без явных негативных последствий. Другим примером является цикл со счетчиком во многих языках, особенно, если этот оператор является таким же простым, как в языках Рааса) и Ада.
Не всегда ясно, оправдывает ли полезность управляющей структуры ее включение в языки программирования ((.едйагд апд Массопу, 1975). Этот вопрос следует из вопроса: надо ли минимизировать размеры языков. И Вирт (1975) и Хоар (1973) настаивают на простоте при разработке языка. т.е. в языке должно быть только несколько управляющих операторов, и все они должны быть простыми. Разнообразие изобретенных управляющих структур на уровне операторов отражает расхождение во мнениях среди разработчиков языков программирования. После всех изобретений, обсуждения и оценок все еше нет единодушного мнения о том, какой именно набор управляющих операторов должен быть включен в язык. Многие современные языки, конечно, имеют подобные управляющие операторы, но все еше остаются Глава 7.
Структуры управлаиия на уровне операторов -.«шие вариации в деталях их синтаксиса и семантики. Кроме того, сохраняются разно- е;ия по поводу того, должен ли язык программирования содержать оператор яо1о; :. =. ки С++ и Аба используют этот оператор, а языки Модо!а 2 и Вата — нет. Управляющие операторы в императивных языках программирования разделяются на -::колько категорий: операторы ветвления, многовариантные операторы ветвления, - эаторы цикла и операторы безусловного перехода. Язык РОКТКА1Ч впервые ввел в практику программирования одновариантный опера- = ветвления — логический оператор Т Г.
Оператор ветвления в языке А1.ОО1. 60 более .-:жен и позволяет выбирать составные операторы, а также использовать необязатель-:;. оператор е1ав. Многие управляющие структуры выиграли от использования со:-зе ного оператора, введенного в языке А1.ОО1. 60.
Арифметический оператор 1Г языка РОКТКА1Ч вЂ” это трехвариантный оператор :-:-аления, требующий наличия других безусловных переходов. Язык ГОКТКАХ ввел в практику две формы многовариантных операторов ветвления: :: числяемый оператор ОО ТО и назначенный оператор 00 ТО. В точном соответствии воими названиями они представляют собой многовариантные операторы ветвления. ' -ератор оаее языка Рааса! является представителем современных многовариантных -ераторов ветвления; он содержит инкапсуляцию выбираемых сегментов и неявные песее слы в конце каждого из них на одну точку выхода. Языки Моди!а-2, С++, ГОКТКАХ 90, 1ача и Ада имеют операторы выхода из своих зов: эти операторы заняли место одного из наиболее распространенных употребле- '.
оператора лого. Птераторы, основанные на структурах данных, являются конструкциями цикяа для : габотки таких структур данных, как связные списки, мусор и деревья, Безусловный переход, или оператор кого, был частью большинства императивных : иков. Проблемы, связанные с ним вызвали широкое обсуждение и дебаты. Вывод та° з этот оператор должен остаться в большинстве языков, а опасность, которую он —.- зставляет, минимизируется за счет дисциплины программирования.
Защищенные команды Дийкстры являются альтернативными управляющими констг .пнями, имеющими положительные теоретические характеристики. Несмотря на то - -: онн не были одобрены в качестве управляющих конструкций языка программирова- =.. частично их семантика была реализована в механизме параллельности в языках СБР АЛа. 339 эвэюмв 2. 3. 4. 6. 8. 9. 1О.
11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Дайте определение упраашющей струюнуры. Дайте определение блока. Какие вопросы разработки связаны со структурами ветвления? Как обычно решаются проблемы, связанные со вложенными двухвариантными конетрукциями ветвления? Что неправильно сделано в языке Моб1н!а-2? Какие вопросы разработки связаны с многовариантными структурами ветвления? Что составляет основу управляющих операторов языка ГОКТКАХ 1? Какие недостатки имеет арифметический оператор 1 Г языка ГОКТВА1Ч? Что необычного есть в многовариантном операторе ветвления языка С? Какие проектные компромиссы были достигнуты при его разработке? Какие проблемы возникают при разработке циклов со счетчиком? Что представляет собой цикл с предварительной проверкой условий? Что представляет собой цикл с последующей проверкой условий".
Какое самое значительное изменение было сделано в операторе ~0 языка ГОКТКАХ 77 по сравнению с языком ГОКТКА1ч 1Ч? Какие свойства оператора сок языка А1.001. 60 делают использующие его программы трудными для чтения? В чем заключается разница между оператором йок языка С++ и аналогичным оператором языка Зата? Какие проблемы возникают при разработке циклов с условиями? Какова основная причина изобретения управляющих операторов, определяемых пользователем? Какие преимушества имеет оператор ежШ языка Аба над оператором Ькеак язы- ка С? В чем заключается разница между оператором Ькеак языка С++ и аналогичным оператором в языке Зата? Что представляет собой управление циклом, определяемое пользователем? Каковы два недостатка переменных меток в языке Р1./1? В чем состоит основная проблема, связанная с ограничениями, наложенными на использование оператора його в языке Рааса!? Какие распространенные языки программирования заимствовали часть своей структуры у защищенных команд Дийкстры? Глава 7.
Структуры управления на уровне операторов )», Обоснуйте утверждение. что трехвариантный оператор ветвления языка ГОКТКАХ! наиболее соответствовал ситуации во время его разработки. Придумайте ситуацию. в которой переменная метка языка РЕЛ имела бы большое преимушество. Опишите три ситуации, в которых необходимо объединение цикла со счетчиком и логически управляемого цикла.
Сравните вычисляемый оператор 60 то языка ЕОКТКАХ с оператором оаээ языка Разов!, особенно с точки зрения читабельности и надежности. Каковы возможные причины, по которым язык Разса1 содержит цикл с последующей проверкой условия. в то время как язык А).ОО). 60 такого цикла не имеет. Изучите свойства итератора языка СШ, описанного в работе Ыз)соч (1984), и определите его преимушества и недостатки. Сравните набор управляющих операторов языка Ада с аналогичным набором в языке ГОКТКА)Ч 77 н решите, какой из них лучше и почему. Назовите аргументы "за" и "против" использования уникального замыкающего зарезервированного слова в составном операторе. Проанализируйте потенциальные проблемы читабельности, возникающие прн использовании в качестве замыкающего зарезервированного слова для управляющих операторов обратной перестановки букв открывающего зарезервированного слова, например, оаэв-еээо в языке А) ОО).