avva: (Default)
[personal profile] avva
(только программистам интересно, наверное)

Почему в процедуральных языках, как правило, нет оператора досрочного выхода из блока? Как break в C, но чтобы работал не только из циклов, а также внутри if-then или вообще любого блока.

Постоянно приходится делать глупые вложенные цепочки условий или некрасивые трюки типа while(1) и выполза по break'у (ну или, понятно, их аналоги в других языках).

Есть какая-то глубокая причина этому?

Date: 2003-04-12 09:29 am (UTC)
From: [identity profile] ex-ilyavinar899.livejournal.com
В Аде можно сказать "L: loop ... M: loop... exit loop L; ... end loop; end loop;" (не смотрел на Аду лет 14, может, ошибаюсь в синтаксисе). Также, по-моему, что-то подобное есть в PL/I.

cleanup есть в расширениях Visual C++: __try / __finally. Также в Visual C++ есть подобная структура: names[0];.

Re:

Date: 2003-04-12 09:36 am (UTC)
From: [identity profile] avva.livejournal.com
Я когда-то сделал reverse engineering того, как в Visual C++ работают exceptions, для одного проекта. Обнаружил, что они требуют любопытной недокументированной кооперации между компилятором и ОС. Продокументировал это и послал, кажется, в ньюсгруппу какую-то (а может, забыл).

Re:

Date: 2003-04-12 09:47 am (UTC)
From: [identity profile] ex-ilyavinar899.livejournal.com
О да. В Microsoft Outlook для exceptions используются собственные ассемблерные макросы, и мой сосед по оффису когда-то портировал Office 97 на DEC Alpha, и совсем заколебался с этими макросами.

Date: 2003-04-12 08:26 pm (UTC)
From: [identity profile] oblomov-jerusal.livejournal.com
_try/_finally соответствует exceptions в C++? Я имел в виду что-нибудь более легковесное, что отслеживает выходы по return, break, goto и т.д. т.е то, что можно отследить во время компиляции.

Re:

Date: 2003-04-12 08:27 pm (UTC)
From: [identity profile] ex-ilyavinar899.livejournal.com
Тогда деструкторы.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 30th, 2025 08:01 am
Powered by Dreamwidth Studios