MoreKnig.org

Доводы против оператора goto: читать книгу онлайн полностью и бесплатно

Автор: Дейкстра Эдсгер



Шрифт:

За многие годы я утвердился во мнении о том, что квалификация программистов — функция, обратно зависящая от частоты появления операторов go to в их программах. Позже я открыл, почему оператор go to производит такой пагубный эффект, и я убежден в том, что оператор go to должен быть отменен в языках программирования «высокого уровня» (т. е. отовсюду, кроме, возможно, простого машинного кода). В то время я не счел это открытие слишком важным. Теперь же я отправляю свои соображения для публикации, потому что меня подтолкнула к этому развернувшаяся сейчас дискуссия на эту тему.

Мое первое замечание состоит в том, что хотя деятельность программиста заканчивается с конструированием корректной программы, процесс, который выполняется под управлением этой программы, является истинной сущностью этой деятельности; этот процесс должен завершиться с заданным эффектом; поведение этого процесса должно удовлетворять заданным спецификациям. Хотя, когда программа уже изготовлена, «изготовление» соответствующего процесса поручается машине.

Мое второе замечание — то, что наши интеллектуальные силы в большей степени связаны со статическими отношениями, и что наши способности представлять процессы, развивающиеся во времени, развиты относительно плохо. Исходя из этого, мы должны делать (как мудрые программисты, осознающие свои ограничения) все возможное, чтобы сократить концептуальную пропасть между статической программой и динамическим процессом, чтобы сделать соответствие между программой (разворачивающейся в пространстве текста) и процессом (разворачивающимся во времени) настолько очевидным, насколько это возможно.

Давайте теперь рассмотрим, как мы можем охарактеризовать состояние процесса. (Вы можете представить себе этот вопрос очень конкретно: предположите, что процесс, рассматриваемый как последовательность действий во времени, остановлен после произвольного действия, какие данные мы должны иметь, чтобы точно определить порядок, в котором следует повторить процесс, чтобы дойти до той же точки?) Если текст программы представляет собой просто сцепление, скажем, операторов присваивания (в рамках данной дискуссии будем рассматривать их как описания одиночных действий), то достаточно в тексте программы указать точку между двумя последовательными описаниями действий [two successive action descriptions]. (В отсутствии оператора go to я могу позволить себе синтаксическую неоднозначность в последних трех словах предыдущего предложения: если мы разбираем их как «последовательные (описания действий)», то мы имеем в виду последовательность в тексте; если же мы разбираем их как «описания (последовательных действий)», то мы имеем в виду последовательность во времени.) Давайте назовем указатель на соответствующее место в тексте «текстуальным индексом».

Когда мы вводим условное предложение (if B then A), предложение альтернатив (if B then A1 else A2), предложения выбора, введенные C. A. R. Hoare (case [i] of (A1, A2,……, An)), или условные выражения J. McCarthy (B1 —> E1, B2 —> E2,……, Bn —> En), сохраняется тот факт, что состояние процесса продолжает характеризоваться единственным текстуальным индексом.

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

Теперь давайте рассмотрим предложения повторения (как while B repeat A или repeat A until B). С позиций логики эти предложения избыточны, потому что мы можем выразить повторения при помощи рекурсивных процедур. Из соображений реалистичности я не хочу их исключать: с одной стороны, предложения повторений могут быть весьма удобно реализованы на современном ограниченном оборудовании, с другой стороны, модель мышления, известная как «индукция», делает нас хорошо подготовленными для интеллектуального восприятия процессов, порождаемых предложениями повторения. С введением предложений повторения текстуальных индексов уже недостаточно для описания динамического состояния процесса. С каждым входом в предложения повторения, однако, мы можем связать, так называемый, «динамический» индекс, исправно подсчитывающий порядковый номер текущего повторения. Если предложения повторения (также как вызовы процедур) могут применяться с вложением, мы находим, что теперь развитие процесса может быть однозначно охарактеризовано последовательностью (смешанной) текстуальных и/или динамических индексов.

Суть в том, что значения этих индексов не управляются программистом; они генерируются (то ли при написании программы, то ли при динамическом выполнении процесса) независимо от того, желает он этого или нет. Они обеспечивают независимые координаты, в которых описывается состояние процесса.

Почему нам нужны эти независимые координаты? Причина в том — и это представляется неотъемлемым для последовательных процессов — что мы можем интерпретировать значение переменной только с учетом состояния процесса. Если мы хотим подсчитать число n, скажем, людей в комнате, изначально пустой, мы можем достичь этого путем увеличения n на единицу всякий раз, когда мы видим, что кто-то вошел в комнату. В промежуточный момент, когда мы увидели кого-то входящего в комнату, но еще не выполнили последующего увеличения n, его значение равно числу людей в комнате минус один!

Разнузданное применение оператора go to имеет прямым следствием то, что становится ужасно трудно найти осмысленный набор координат, в которых описывается состояние процесса. Обычно люди принимают во внимание также и значения некоторых избранных переменных, но это не вопрос, потому что состояния процесса зависит, как понимать эти значения! С оператором go to можно, конечно, все еще описывать состояние процесса однозначно при помощи счетчика числа действий, выполненных от старта программы (т. е., некоторой разновидности нормализованных часов). Трудность в том, что такие координаты, хотя они и уникальные, просто бесполезные. С такими координатами система становится чрезвычайно сложной, сталкиваясь с необходимостью определения всех тех точек состояния, в которых, скажем, n равно числу людей в комнате минус один!

Оператор go to сам по себе просто слишком примитивен; он создает слишком сильное побуждение внести путаницу в программу. Рассмотренные предложения могут оцениваться и приветствоваться как сдерживающие его применение. Я не заявляю, что упомянутые предложения являются исчерпывающими в том смысле, что они удовлетворяют любым требованиям, но какие бы предложения не приводились (например, предложение прекращения), они должны удовлетворять тому требованию, чтобы при них могла бы поддерживаться независимая от программиста система координат для описания процесса полезным и осуществимым способом.

Трудно закончить эти заметки без благодарностей. Могу ли я судить о том, кто оказал влияние на мои рассуждения? Совершенно очевидно, что не обошлось без влияния Peter Landin и Christopher Strachey. Наконец, я хочу отметить (я помню это совершенно точно), как Heinz Zemanek на встрече «pre-ALGOL» в начале 1959 г. в Копенгагене предельно ясно выразил свои сомнения в том, должен ли оператор go to трактоваться как такой же синтаксический базис, как оператор присваивания. До некоторой степени я виню себя за то, что не имел тогда представления о значимости его замечания.

Замечания о нежелательности оператора go to далеко не новы. Я помню, что читал четкие рекомендации ограничивать использование оператора go to аварийным выходом, но не помню точно, где, вероятно, это было сделано C. A. R. Hoare. В [1, Sec. 3.2.1.] Wirth и Hoare вместе делают замечание в том же направлении, мотивируя конструкцию выбора: «Как и условия, она отражает динамическую структуру программы более ясно, чем оператор go to и переключатели и она устраняет необходимость введения в программу большого числа меток.»

В [2] Guiseppe Jacopini, кажется, доказывает (логически) ненужность оператора go to. Упражнения по более или менее механическому переводу произвольной схемы алгоритма в схему без переходов, однако, не рекомендуются. При этом не ожидается, что результирующая схема будет более понятной, чем исходная.

Ссылки:

1. Wirth, Niklaus, and Hoare C. A. R. A contribution to the development of ALGOL. Comm. ACM 9 (June 1966), 413–432.

2. Bohm, Corrado, and Jacopini Guiseppe. Flow diagrams, Turing machines and languages with only two formation rules. Comm. ACM 9 (May 1966), 366–371.

1 Вперед
Перейти на стр:
Шрифт:
Продолжить читать на другом устройстве:
QR code

Новые книги

Смотреть все
Книга сердца. Светлый источник любви. Боль в твоём сердце
Книга сердца. Светлый источник любви. Боль в твоём сердце
[Здоровье / Эзотерика, оккультизм, фэн-шуй, йога]
Лууле Виилма (1950–2002) – известная эстонская целительница и парапсихолог. Общаясь с пациентами, она поняла, что любая болезнь – результат обид и стрессов, которые мы порой копим в себе годами.
0
"Зарубежный детектив 2026-30". Компиляция. Книги 1-12
[Детективы / Криминальный детектив / Полицейский детектив / Триллер]
Настоящий томик зарубежного детектива содержит детективы разных жанров и и вполне сможет завоевать симпатии читателей детективами включёнными в сборник! Приятого чтения, уважаемый читатель!
0
Ночь, когда он исчез
Ночь, когда он исчез
[Детективы / Триллер]
Новинка от автора супербестселлера №1 The New York Times! Долгожданный роман Лоры Дейв – автора феномена «Последнее, что он сказал мне», покорившего мир и экранизированного Apple TV+! Иногда,
0
Чайная под солнцем Тосканы
Чайная под солнцем Тосканы
[О любви / Современные любовные романы]
В свои тридцать четыре Тилли привыкла жить осторожно: черно-белые фотографии, крепкий кофе и никаких лишних надежд. Но после пожара, уничтожившего ее галерею, и предательства любимого человека
0
Я не мертва
Я не мертва
[Полицейский детектив / Детективы / Триллер]
Три года детектив Джуди Фонтейн была изолирована от внешнего мира. Заключенная в подземной камере, она общалась только со своим садистом-похитителем, и чтение его мыслей по выражению лица стало
0
Рождество с подвохом
Рождество с подвохом
[Классический детектив / Детективы]
Идеальное уютное чтение для поклонников «Убийств и кексиков» Питера Боланда, «Опасной игры бабули» Кристен Перрин и «Рецепта убийства для настоящей лентяйки» М. С. Битон. Детективы Вероники Хэли
0
Гнездо кабана: Истории из заповедника
Гнездо кабана: Истории из заповедника
[Современная проза / Биология]
Книга «Гнездо кабана: Истории из заповедника» написана человеком, для которого кабаны – не просто объект исследования. По мнению автора, кабан – зверь выдающийся и достоин особого внимания. Надежда
0
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
[Эзотерика, оккультизм, фэн-шуй, йога]
Если вы мечтали обучаться магии у настоящего Мастера, узнать все тайны сильнейших заклинаний, то у вас в руках – исполнение вашей мечты. В книге собраны уникальные техники, которые сделают из вас
0
Американский Освенцим. История больницы Пенхёрст
Американский Освенцим. История больницы Пенхёрст
[Публицистика / Военная документалистика / Документалистика]
Психиатрическая больница Пенхёрст — кровавое пятно в истории Соединённых Штатов. С 1908 по 1987 год там проводились бесчеловечные опыты над больными, в том числе над детьми. Им делали лоботомию,
0
Американская глубинка. Реднеки, хиллбилли и трейлеры
Американская глубинка. Реднеки, хиллбилли и трейлеры
[Публицистика / Документалистика / Обществознание]
Книга рассказывает о жизни американской глубинки так называемого Deep South — Глубокого Юга или Диксиленда. Автор книги, после многолетних путешествий по Югу США, повествует о жизни хиллбилли (горцах
0
Лейтенант. Том 3
Лейтенант. Том 3
[Альтернативная история / Исторические приключения / Попаданцы / Самиздат]
Весна 1905-го. Артур выстоял, блокада прорвана, море — своё. Но война не кончена: через полсвета идёт Вторая эскадра, и в книгах, которые помнит капитан 2 ранга Андрей Маринин, её дорога кончается
0
Стример из иного мира. Том 2
Стример из иного мира. Том 2
[Книги про волшебников / РеалРПГ (RealRPG) / Попаданцы / Самиздат]
Пусть и не по своей воле, но я попал в иной мир. Здесь я, по сути, продолжаю заниматься тем же, что и раньше, — стримить для зрителей. Вот только теперь за мной следят так называемые Небожители, а
1

Самые популярные книги

Железный характер Кристианы Морли
Железный характер Кристианы Морли
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Удар копытом лошади рушит блестящие перспективы дебютантки. По мнению общества, хромота испортила не только плавную поступь девицы, но и характер! Это ж надо умудриться — вместо монастыря или
30
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Те, кто приходит в тишине
Те, кто приходит в тишине
[Альтернативная история / Попаданцы / Самиздат / Боевая фантастика]
Редкий бой бывает похож на предыдущий. Мы учимся. На своих и на чужих ошибках. Стараемся расти над собой. Противник – тоже. Он анализирует наши ошибки, учитывает остроумные решения. То есть
6
Комдив
Комдив
[Попаданцы / Альтернативная история / Самиздат]
Комдив Алексей Турчин отправляется в Соединенные Штаты Америки для изучения военно-промышленного комплекса и перспективных образцов вооружения. Удастся ли ему подтолкнуть развитие Рабоче-Крестьянской
5
Измена. Я тебя (не) любил
Измена. Я тебя (не) любил
[Современные любовные романы]
— Как тебе… — слышу прерывистый голос подруги, — мой подарок в честь твоего дня рождения?По меньшей мере иду я в верном направлении. Но вот предчувствие не из лучших. Голос Светы перемешивается со
6
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
[Попаданцы / Городское фэнтези / Юмористическое фэнтези / Самиздат]
Попытка создания пародии на попаданцев в комикс. Не фанфик, все герои и сюжет комикса, известные герою книги, выдуманы и не являются калькой с какого-то существующего произведения. Ну а главный
5
Мир без вуали
Мир без вуали
[Любовная фантастика / Самиздат]
Незаконное потребление наркотических средств, психотропных веществ, их аналогов причиняет вред здоровью, их незаконный оборот запрещен и влечет установленную законодательством ответственность.
4
Возлюбленная ишхасса
Возлюбленная ишхасса
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Когда рушатся все планы и надежды, что делать, если нет сил пойти и убивать врага? Что если все что у тебя есть только гостиница, работники и интриги конкурентов? Да ничего, жить дальше, разбираться
4
Хорошая, плохая, грешная 3
Хорошая, плохая, грешная 3
[Попаданцы]
У Эвирейл Миардо нет ни единой свободной минутки на грусть и рефлексию! Да и когда? Столько дел, столько дел! Шахту выкопай, лавку открой, артефакты создай, эльфа за попу укуси... Ничего не
4
Майор: Сорокапятка 3
Майор: Сорокапятка 3
[Альтернативная история / Попаданцы / Самиздат]
Бобруйск. Минск. Брест. Висла. Одер. Красная армия наконец идёт туда, куда должна была идти с самого начала войны, — на запад. Так быстро, что карты не успевают за передовыми частями. А
4
Имперец. Ранг 4. Воевода
Имперец. Ранг 4. Воевода
[Боевая фантастика / Боевое фэнтези]
Спасение цесаревича от пули принесло Александру титул, должность личного телохранителя и редкую магию стихий. Теперь он – правая рука наследника престола и командир его личного отряда особого
5

Самые комментируемые

Семья для брошенки. Вторая жизнь с нуля
Семья для брошенки. Вторая жизнь с нуля
[Любовная фантастика / Самиздат / Попаданцы]
Семь лет унижений, презрения и пустой постели. Герцог Дрейк Ашфорд объявил свою истинную жену бракованной и отправил в ссылку на Ольцег — умирать среди таких же «ненужных». Он думал, что сломал
22
Отбор невест, или Три орешка для темного
Отбор невест, или Три орешка для темного
[Любовная фантастика]
Каждая приличная драконица должна пройти отбор невест, иначе внукам у камина будет нечего рассказать. Так говорила моя маменька, а ей можно верить — за ее спиной аж четыре таких отбора! Так что я
13
Печать Забытой Эпохи
Печать Забытой Эпохи
[Любовная фантастика / Попаданцы]
— Скажи спасибо, что не оставил босой на улице, Верадель. Забирай свои проклятые северные руины и убирайся, — самодовольно бросил мне бывший муж, швырнув на стол бумаги о разводе. Он думал, что
23
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Шахматистка. Выжить на Арене Смерти
Шахматистка. Выжить на Арене Смерти
[Любовное фэнтези / Попаданцы / Книги про волшебников / Самиздат]
Кто-то попадает в имбовых персов: Избранных, Тёмных властелинов и прочих крутых ребят. А я попала в тело бездарной адептки магической академии. Как она сюда поступила-то, без грамма магии? Неважно,
12
Диагноз
Диагноз
[Самиздат / Детективная фантастика / Городское фэнтези / Юмористическая фантастика]
Некромантия в нашем мире давно стала такой же частью жизни, как радио, кино, телефоны и аэропланы. Но разве могла я подумать, что однажды приду наниматься на службу к лучшему некроманту столицы! Он —
17
Ведьма и Экзорцист. Второй шанс на жизнь
Ведьма и Экзорцист. Второй шанс на жизнь
[Детективы / Триллер / Любовное фэнтези / Фэнтези]
Приказ ясен: отравить Дерека вель Гранна. Последствия – костёр и пепел. Белладонна уже прошла этот круг, сгорела и получила второй шанс. Теперь она знает, что приказ – лишь верхушка заговора, в
4
Последняя Гадина империи
Последняя Гадина империи
[Попаданцы / Бояръ-Аниме / Русское фэнтези / Самиздат]
Пятьсот лет назад я была прославленным зельеваром, матриархом и почтенной основательницей династии. А сегодня очнулась в теле изнеженной барышни на пепелище семейной усадьбы и обнаружила, что весь
3
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Пулеметчик Федя
Пулеметчик Федя
[Альтернативная история / Юмористическая фантастика / Попаданцы / Самиздат]
Пулеметчик — это не звание, это диагноз. Тридцать пять лет, пулемёт «Печенег», рукавица прилипла к раскалённому кожуху — и здравствуйте: июнь сорок первого, чужие двадцать два года, чужие руки,
8
Регистрация
Регистрация
[Современная проза]
Может быть, если подождать, оно само рассосется. Надо только не думать про него: вот как оно туманом или тенью болтается где-то рядом, так пусть там и болтается. Имени ему не давать, не вызывать его.
15
Драконий брак, где всё не так
Драконий брак, где всё не так
[Любовная фантастика / Попаданцы]
Я оказалась в другом мире, у моего питомца тяжёлая психотравма, а всё из-за того, что один бестолковый дракон за сыном недосмотрел. И хоть бы извинился за своего драконёнка! Так нет, рычит,
2

Прямо сейчас читают

На распутье семи дорог
На распутье семи дорог
[Космическая фантастика]
Пелена темных туч закрыла будущее Земли, России и главного героя. Всему виной космические цивилизации, пришедшие на Землю со своими планами. Его путь пролег через учебку ЧВК и поля боя на окраинах
0
Некроманты пьют кофе со сливками
Некроманты пьют кофе со сливками
[Юмористическое фэнтези]
Хорошо быть некромантом! Ровно до того момента, как у тебя появляется назойливый поклонник с группой поддержки. А другой парень сбегает со свидания, стоит услышать о твоем призвании. Третий... Ну
0
Озверение
Озверение
[Боевое фэнтези / Книги про волшебников / Попаданцы]
Кажется, чем ближе столица, тем сложнее в неё попасть. Но зато скоро станет понятно, что именно не поделили Настоятель и глава Бурого Приората и почему им так нужны одарённые первушники. Первая мера
0
Где умирают хорошие девочки
Где умирают хорошие девочки
[Современные любовные романы / Эротика, Секс]
Зеркала и паутина
Зеркала и паутина
[Современная проза]
Андрей Аствацатуров – петербургский прозаик, филолог, эссеист, профессор СПбГУ. Автор романов «Люди в голом», «Скунскамера», «Осень в карманах», «Не кормите и не трогайте пеликанов» и книги эссе
0
Я есть Закон! Том 2
Я есть Закон! Том 2
[Попаданцы / Самиздат]
Раньше он выносил приговоры целым планетам, но волей судьбы оказался в теле заурядного юриста на Земле. Теперь его практика состоит из соседских разборок из-за кота, боёв за алименты и тяжб за
0
Попаданка в 1812: Любить и не сдаваться
Попаданка в 1812: Любить и не сдаваться
[Любовная фантастика / Самиздат / Попаданцы]
Я попала в прошлое, в 1812 год. Самый разгар войны с Наполеоном. Моё имение разорено солдатами французской армии. Мои люди убиты. Однако война подарила мне дочь и встречу с мужчиной, которого я могла
4
Шанхай [litres]
Шанхай [litres]
[Проза / Историческая проза / Старинная литература: прочее]
Имя Риити Ёкомицу (1898–1947) не так хорошо известно отечественному читателю, как имена его знаменитых современников – Акутагава Рюноскэ, Дзюнъитиро Танидзаки, Ясунари Кавабата – а между тем в
0
Роковой обмен
Роковой обмен
[Любовная фантастика]
Он — ее враг. Тот, кто пытался убить ее. И кого она пыталась убить. Но только он сможет спасти ее от жестокого безумного отца. Но что ей ему предложить? Он равнодушен к красоте. Он жесток. Ему никто
1
Убийство в доме свиданий
Убийство в доме свиданий
[Исторический детектив / Триллер]
«Убитая проститутка была совсем нагой. Она лежала на спине в своей холодной доступности, и тело ее, уже успевшее пожелтеть, напоминало хорошо полированную кость мамонта. Из-под ее правой груди
0
Ванька 13
Ванька 13
[Попаданцы / Боевая фантастика / Альтернативная история / Самиздат]
Три войны, плен, каторга, пара революций, вообще непонятно что... Эй, а нормальная-то жизнь здесь будет? Нет? Не в то время попал? Понятно...
3
Слабейший из Сильнейших! Том 2
Слабейший из Сильнейших! Том 2
[Юмористическое фэнтези / Боевая фантастика / Самиздат]
Обман. Хитрость. Улыбка. Главное всё делать с широко открытыми глазами! Не повезло? Любая проблема лишь песчинка в пустыне! Отдельно каждая крупинка ничего из себя не представляет, но вместе —
0