From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,86c750b8474bf6d5 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!club-internet.fr!feedme-small.clubint.net!newsfeed.arcor.de!newsspool3.arcor-online.net!news.arcor.de.POSTED!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: About String Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <484ABED3.8040909@obry.net> <484b802a$0$23844$4f793bc4@news.tdc.fi> <12uzegqkwihil.gi8iceyncrph.dlg@40tude.net> Date: Mon, 16 Jun 2008 10:31:03 +0200 Message-ID: <1v6vlmvr3u3dj.qtfnfe9fmxjm.dlg@40tude.net> NNTP-Posting-Date: 16 Jun 2008 10:31:03 CEST NNTP-Posting-Host: 824154e7.newsspool2.arcor-online.net X-Trace: DXC=kW=YYXo@0Od[F<50eo:0knA9EHlD;3Ycb4Fo<]lROoRa8kFio On Sun, 15 Jun 2008 18:06:00 -0400, Robert A Duff wrote: > I don't see why a loop needs a declarative part. > My idea is that every statement list is a scope. What is so special in statement lists? Pushing this idea further, we should also conclude that any sequence of expressions is a scope. For example, an aggregate: String'(X : constant Character := F(A(I)), 1 => X, 2 => 'a', 3 => X); a function call etc. [ That might be useful to overcome some silly limitations on discriminants: type T (S : Storage_Count) is record -- Buffer : Storage_Elements_Array (0..S-1); -- This would be illegal, so Buffer : Storage_Elements_Array (Last : constant Storage_Offset := S-1, 0..Last); end record; ] >> However I find nested declare/begin/end more readable because it clearly >> disambiguates between the scope of the loop and the scope of one iteration >> of. > > I don't get it. You declare something inside a loop body, or the 'then' > part of an 'if' -- it's local to that. Local in which sense? There are statical nesting and dynamic execution of the loop body upon iterations. It is not obvious (rather counterintuitive) that declarations have to be "executed." To me the purpose of Ada's "declare" was merely in conversion of "elaboration" to "execution." >> But what would happen if I said: >> >> begin >> raise Foo_Error; >> X : constant Character := F(A(I)); -- Not Ada! >> Do_Something (X); >> exception >> when Foo_Error => >> Do_Something_Interesting (X); >> end; > As I said earlier, exception-handler regions deserve their own syntax, > not connected with declaration blocks. So an exception handler attached to the statement list will see nothing from the scope of the list? I.e. everything in the list will be wound up before the handler gets fired. Then you would need additional nesting if you wished to handle exceptions from that list. Here we go: X : constant ...; Y : constant ...; begin Do_Something (X, Y); exception when Foo_Error => Do_Something_Interesting (X, Y); end; What is the gain? Just add "declare" in front of this and it becomes legal Ada. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de