Языки программирования - концепции и принципы

В Ada есть обычный цикл


while not found do

Pascal

begin

(* Длинное вычисление *)

    if error_detected then found := True

else

     begin

     (* Длинное вычисление *)



     end

end

В языке С можно использовать оператор break:

while (!found) {

C

         /* Длинное вычисление */

         if (error_detected()) break;

          /* Длинное вычисление */

                        }

В Ada есть обычный цикл while, а также оператор exit, с помощью которого можно выйти из цикла в любом месте; как правило, пара связанных операторов if и exit заменяется удобной конструкцией when:

while not Found loop

Ada

    -- Длинное вычисление

exit when error_detected;

 - Длинное вычисление

 end loop;

Операционная система или система, работающая в реальном масштабе време­ни, по замыслу, не должна завершать свою работу, поэтому необходим способ задания бесконечных циклов. В Ada это непосредственно выражается опера­тором loop без условия выхода:

Ada

loop



end loop;

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

while(1==1){

C



}

Реализация

Цикл while:

C

while (expression)

statement;

реализуется так:

L1: compute            R1.expr

       jump_zero        R1,L2                  Выйти из цикла, если false

       statement                                      Тело цикла

       jump                  L1                       Перейти на проверку завершения цикла L2:

Обратите внимание, что в реализации цикла while есть две команды перехода! Интересно, что если выход находится в конце цикла, то нужна только одна команда перехода:

do{

C

statement;

} while (expression);

компилируется в

L1:        statement

              compute         expr

              jump_nz         L1                       He ноль — это True


Содержание раздела