Mar. 14th, 2025

spamsink: (Default)
Все мы знаем™, что в языке Си есть операторы простого цикла
while (condition) operator;
и
do operator; while (condition);.

Казалось бы хорошо, симметрично: в обоих случаях цикл выполняется, пока условие истинно. А в Паскале не так: в нём есть
while condition do operator;
и

repeat sequence of operators until condition;

Здесь из-за того, что операторные скобки в языке Паскаль - аж целые слова begin/end, пришлось ради избежания постоянного "repeat begin" и "end until" пожертвовать стройностью синтаксиса и сделать repeat/until тоже операторными скобками. Это более или менее понятно.

А вот зачем вот это всё repeat и until вместо уже существующих слов do и while?

Разгадка проста: при компиляции операторов с условными переходами, что if, что while, переход за внутренний оператор надо делать по ложности условия. Вот и repeat-until для удобства автора компилятора сделан так, чтобы переходить назад на начало надо было по ложности условия, и можно без труда переиспользовать процедуру, порождающую код для if и while. А в случае do-while, перед тем, как  использовать процедуру для if, условие инвертировать приходится.

Навеяно развлекательной активностью по пересобачиванию существующего Паскаль-компилятора (угадайте с трех раз, для какой платформы), написанного на самом себе, в Си-компилятор, стремясь не разбираться, как работает кодогенератор. 


Page generated Apr. 23rd, 2025 11:22 am
Powered by Dreamwidth Studios