comp.lang.ada
 help / color / mirror / Atom feed
From: "Mark A. Biggar" <mark@biggar.org>
Subject: Re: terminate applications
Date: Thu, 17 Jul 2003 20:55:26 GMT
Date: 2003-07-17T20:55:26+00:00	[thread overview]
Message-ID: <23ERa.75454$OZ2.12362@rwcrnsc54> (raw)
In-Reply-To: <bf6upn$b2m7q$1@ID-25716.news.uni-berlin.de>

Nick Roberts wrote:
> "Riccardo" <rfulcoli@amsjv.it> wrote in message
> news:bf5uks$8n0$1@e3k.asi.ansaldo.it...
> 
> 
>>is present a function that terminated applications?
>>if yes what's?
>>
>>for example: exit(0); // language C
> 
> 
> You should transfer control to the end of the main subprogram. For example:
> 
>    with Ada.Text_IO;
>    procedure Main is
>       Count: Natural := 0;
>       procedure Some_Inner_Procedure is
>          use Ada.Text_IO;
>       begin
>          Put_Line("Hello World");
>          if Count = 100 then
>             -- we want to terminate program here
>             goto End_of_Program;
>          end if;
>       end Some_Inner_Procedure;
>    begin
>       loop
>          Some_Inner_Procedure;
>          Count := Count + 1;
>       end loop; -- infinite loop
>    <<End_of_Program>> -- this is how you write a goto label in Ada
>    end Main;
> 
> This example doesn't necessarily show the most elegant technique, but it is
> generally acceptable, and illustrates the idea.
> 
> Of course, the best technique is always to let the program flow naturally to
> the end of the main subprogram, if it is reasonable to do so. To illustrate
> this, the above example would certainly be better rewritten like this:
> 
>    with Ada.Text_IO;
>    procedure Main is
>       procedure Some_Inner_Procedure is
>          use Ada.Text_IO;
>       begin
>          Put_Line("Hello World");
>       end Some_Inner_Procedure;
>    begin
>       for i in 1..100 loop
>          Some_Inner_Procedure;
>       end loop;
>    end Main;
> 
> I think it is quite important that, normally, you do not use any other
> method to terminate an Ada program, since using another method could prevent
> library packages (e.g. Ada.Text_IO, used in my examples) from finalizing
> ('cleaning up') properly.

If you really need to abort an Ada program form some deeply nested code,
raising an exception is a reaaonable way to do it.  All clean up actions
are guarenteed to happen and you can add a handler to the main procedure
to do any last gasp stuff cleanly.



-- 
mark@biggar.org
mark.a.biggar@comcast.net




  reply	other threads:[~2003-07-17 20:55 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-17 10:39 terminate applications Riccardo
2003-07-17 19:54 ` Nick Roberts
2003-07-17 20:55   ` Mark A. Biggar [this message]
2003-07-17 22:44     ` Nick Roberts
2003-07-18  3:55 ` sk
  -- strict thread matches above, loose matches on Subject: below --
2003-07-18  9:36 christoph.grein
2003-07-18 10:54 ` Jeffrey Creem
2003-07-18 11:51   ` Marin David Condic
2003-07-18 13:26     ` Nick Roberts
2003-07-18 15:18     ` Jeffrey Creem
2003-07-19 15:44       ` Marin David Condic
2003-07-20  2:03         ` Robert I. Eachus
2003-07-20 11:04           ` Marin David Condic
2003-07-20 17:53             ` Robert I. Eachus
2003-07-21 12:02               ` Marin David Condic
2003-07-21 20:31                 ` Robert I. Eachus
2003-07-22 12:11                   ` Marin David Condic
2003-07-22 12:26                     ` Arnaud Charlet
2003-07-22 12:36                       ` Marin David Condic
2003-07-22 13:23                         ` Arnaud Charlet
2003-07-22 23:23                           ` Marin David Condic
2003-07-22 23:46                             ` Samuel Tardieu
2003-07-23 12:22                               ` Marin David Condic
2003-07-23 22:17                                 ` Randy Brukardt
2003-07-24  1:47                                   ` Hyman Rosen
2003-07-24  3:36                                     ` tmoran
2003-07-24  3:44                                       ` Hyman Rosen
2003-07-24  8:02                                         ` Samuel Tardieu
2003-07-24 19:54                                         ` Randy Brukardt
2003-07-24  7:45                                     ` Dmitry A. Kazakov
2003-07-24 14:54                                       ` Warren W. Gay VE3WWG
2003-07-24 15:46                                         ` Dmitry A. Kazakov
2003-07-26  2:58                                           ` Warren W. Gay VE3WWG
2003-07-28  8:17                                             ` Dmitry A. Kazakov
2003-07-28 21:08                                               ` Warren W. Gay VE3WWG
2003-07-29 10:42                                                 ` Marin David Condic
2003-07-29 13:47                                                   ` Hyman Rosen
2003-07-29 17:04                                                     ` Warren W. Gay VE3WWG
2003-07-24 12:01                                     ` Marin David Condic
2003-07-24 20:12                                     ` Randy Brukardt
2003-07-24 23:11                                       ` Robert I. Eachus
2003-07-26 12:52                                         ` Marin David Condic
2003-07-26  3:28                                       ` Warren W. Gay VE3WWG
2003-07-24 11:51                                   ` Marin David Condic
2003-07-24 20:32                                     ` Randy Brukardt
2003-07-26  3:16                                       ` Warren W. Gay VE3WWG
2003-07-26 13:16                                         ` Marin David Condic
2003-07-26 15:23                                           ` Nick Roberts
2003-07-26 15:48                                             ` Warren W. Gay VE3WWG
2003-07-27 11:36                                             ` Marin David Condic
2003-07-26 19:52                                           ` rleif
2003-07-26 13:01                                       ` Marin David Condic
2003-07-24 14:46                                   ` Warren W. Gay VE3WWG
2003-07-24 18:50                                     ` tmoran
2003-07-26 13:21                                       ` Marin David Condic
2003-07-23  4:02                             ` Robert I. Eachus
2003-07-23 12:28                               ` Marin David Condic
2003-07-24 16:06                                 ` Robert I. Eachus
2003-07-26 13:33                         ` Larry Kilgallen
     [not found]                         ` <Pine.LNX.4.44.0307221518190.26977-10000Organization: LJK Software <$TwrUBtoh25l@eisner.encompasserve.org>
2003-07-26 15:07                           ` Warren W. Gay VE3WWG
2003-07-27 11:43                           ` Marin David Condic
2003-07-26 17:27                         ` Larry Kilgallen
     [not found]                         ` <Pine.LNX.4.44.0307221518190.26977-10000Organization: LJK Software <etldVqgp8sE1@eisner.encompasserve.org>
2003-07-26 20:18                           ` Warren W. Gay VE3WWG
2003-07-26 20:24                         ` Larry Kilgallen
     [not found]                         ` <Pine.LNX.4.44.0307221518190.26977-10000Organization: LJK Software <q5jLYypXp6Yg@eisner.encompasserve.org>
2003-07-27 21:52                           ` Warren W. Gay VE3WWG
2003-07-28  2:45                         ` Larry Kilgallen
2003-08-01 17:00                           ` Warren W. Gay VE3WWG
2003-08-01 17:56                         ` Larry Kilgallen
2003-08-01 18:17                           ` Warren W. Gay VE3WWG
2003-08-01 18:48                         ` Larry Kilgallen
2003-07-22 12:59                       ` Lutz Donnerhacke
2003-07-22  5:16                 ` Randy Brukardt
2003-07-22 12:02                   ` Marin David Condic
2003-07-22 14:45                     ` Nick Roberts
2003-07-23  1:08 ` Dave Thompson
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox