OberonCore
https://forum.oberoncore.ru/

Так ли уж не нужен LOOP... ?
https://forum.oberoncore.ru/viewtopic.php?f=30&t=666
Страница 1 из 1

Автор:  GameHunter [ Четверг, 27 Сентябрь, 2007 01:42 ]
Заголовок сообщения:  Так ли уж не нужен LOOP... ?

Уважаемые специалисты,

В форумах этого сайта несколько раз проскакивало мнение, что цикл LOOP в Обероне является избыточным. Так ли это? Вот, например, рассмотрим многопоточное программирование, и пусть условие цикла должно вычисляться в критической секции:

Код:
IMPORT
  SEM:=Semaphores;
...
CONST
  Count = ...
...
VAR
  ind:LONGINT; (* Глобальный счётчик для нескольких потоков *)
  S:SEM.SEMAPHORE;
...

PROCEDURE Proc; (* Процедура, выполняемая в нескольких потоках одновременно *)
  BEGIN
...
    LOOP

      SEM.Claim(S); (* Начало критической секции *)
      i:=ind;
      INC(ind);
      SEM.Release(S); (* Конец критической секции *)
      IF i>=Count THEN
        EXIT
      END;
...
    END; (* LOOP *)
...
  END Proc;

...

BEGIN
  SEM.Create(S,1);
FINALLY
  SEM.Destroy(S);
END ModuleName.


(Синтакстс XDS-Oberon)

Кажется, в такой ситуации WHILE или REPEAT - UNTIL не применимы?

С уважением,
GameHunter.

Автор:  Александр Ильин [ Четверг, 27 Сентябрь, 2007 08:49 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

Код:
REPEAT
  exitCondition := CriticalSectionEvaluation()
UNTIL exitCondition;

Автор:  Valery Solovey [ Четверг, 27 Сентябрь, 2007 12:52 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

GameHunter писал(а):
Кажется, в такой ситуации WHILE или REPEAT - UNTIL не применимы?

С уважением,
GameHunter.
Если проверка условия проводится в начале или конце цикла, то данные конструкции применимы всегда.

Автор:  Wlad [ Четверг, 27 Сентябрь, 2007 21:23 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

Александр Ильин писал(а):
Код:
REPEAT
  exitCondition := CriticalSectionEvaluation()
UNTIL exitCondition;

А вот в активностях объектов Активного Оберона ОЧЕНЬ ЧАСТО именно LOOP ... END является "естественным" конструктом жизненного цикла объекта. А вот выходы (условия прекращения жизни) могут проверяться в разных местах и по разному поводу - IF ... THEN EXIT END - очень, знаете ли, сподручно так организовывать код. Естественней, что ли...

Автор:  Info21 [ Воскресенье, 30 Сентябрь, 2007 19:39 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

GameHunter писал(а):
Уважаемые специалисты,

В форумах этого сайта несколько раз проскакивало мнение, что цикл LOOP в Обероне является избыточным. Так ли это? ...


LOOP хорош для оптимизаций -- когда охрана сложная, и ее часть нужна в дальнейших вычислениях.
Но как-то ограничить LOOP все равно нужно. Бы.

Автор:  GameHunter [ Воскресенье, 30 Сентябрь, 2007 23:18 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

Что такое сложная охрана?

Автор:  Илья Ермаков [ Воскресенье, 30 Сентябрь, 2007 23:25 ]
Заголовок сообщения:  Re: Так ли уж не нужен LOOP... ?

"Охрана цикла" - синоним "условие цикла". Более грамотный синоним. Т.к. условий, вообще говоря, у цикла два - условие продолжения и условие окончания. Охрана - это условие продолжения.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/