Интересно, что ни Python, ни конструкция Oberon не являются теми, которые я искал. В C я часто обнаруживаю, что часто хочу получить конструкцию «иначе» или «в другом месте», которая выполняется только в том случае, если цикл не был взят. Может быть, это конструкция, которую вы ищете?
Так что вместо:
if (condition) {
do {
condition = update(something);
} while (condition);
} else {
loop_never_taken(something);
}
Я мог бы написать:
while (condition) {
condition = update(something);
} otherwhile {
loop_never_taken(something);
}
Это определенно короче, и мне было бы намного понятнее читать. Он даже легко переводится в (псевдо) сборку:
while: test condition
bz elsewhile
loop: push something
call update
test: test condition
bnz loop
jmp done
elsewhile: push something
call loop_never_taken
done: ...
Я чувствую, что это достаточно базовая структура, которая заслуживает немного больше сахара. Но, видимо, не было успешных языковых дизайнеров, которые бы полагались на эту структуру так сильно, как я. Интересно, сколько я должен прочитать в это!