From: Martin <martin.dowie@btopenworld.com>
Subject: Re: How to exit an Ada program with (unix shell) error code?
Date: Tue, 5 May 2009 14:27:31 -0700 (PDT)
Date: 2009-05-05T14:27:31-07:00 [thread overview]
Message-ID: <948d6a6b-d603-4e38-add2-50016c2dcc9d@s20g2000vbp.googlegroups.com> (raw)
In-Reply-To: Im1Ml.27500$941.27128@bgtnsc04-news.ops.worldnet.att.net
On May 5, 9:31 pm, a...@anon.org (anon) wrote:
> Martin.
>
> You misread RM 10.2 (29), its quoted below.
>
> Both of the subprograms types are valid and portable and even though
> RM 10.2 (29) allows a vendor to restrict the main subprogram. Adacore
> (GNAT) and IBM which follow the RM to the letter have decided to allow
> and support both main subprograms types in Ada 83/95/2005 specs.
>
> Note: At this time Adacore and IBM are the only ones supporting Ada 2005.
>
> Now, in the GNAT design the "GNATBIND" process actually wraps the main
> subprogram ( "procedure main" or a "function main return integer" ) within
> a function called "main" within a package called "ada_main". And if the
> "main" subprogram is a procedure, the binder function "main" calls this
> procedure and returns the exit status which is normally set to zero unless it
> is altered by "Ada.Command_Line.Set_Exit_Status". But if main subprogram
> is a function type of partition, then the binder function "main" returns the
> value returned from the partition "function main" to the OS as the exit
> status. To see this, just compile any program and then bind it. Check the
> resulting output files "b~<name>.adb" and its spec file before linking.
>
> Note: normally during linking the linker "GNATLINK" deletes the
> binder source/object files.
>
> So both of these are valid in the RM. It just that most programmers prefer
> the "Procedure" type of partitions design.
>
> --
> -- main subprograms as a procedure
> --
> procedure main is
> begin -- main
> null ;
> end main ;
> --
> -- or main subprograms as a public parameterless function
> --
> function main return integer is
> begin -- main
> return ( 0 ) ; -- 0 := normal exit status.
> end main ;
>
> Ada RM -- quoted
>
> RM 10.2 Program Execution
> ...
>
> Implementation Permissions
> ...
>
> 29 An implementation may restrict the kinds of subprograms it supports as
> ------------
> main subprograms. However, an implementation is required to support all main
> ----------------
> subprograms that are public parameterless library procedures.
> -----------
>
> RM 10.1 Separate Compilation
>
> 1 A program unit is either a package, a task unit, a protected unit, a
> protected entry, a generic unit, or an explicitly declared subprogram other
> ------------------------------
> than an enumeration literal. Certain kinds of program units can be separately
> compiled. Alternatively, they can appear physically nested within other
> program units.
You forgot to underline the important bit - "procedures". Not
"subprograms", not "functions or procedures" - just "procedures". The
_only_ subprogram that _must_ be supported is:
procedure <Main_Subprogram_Name> is
...
Yes an implementation is free to support other forms (including
functions) but they are not portable.
Lord only know why your quoting 10.1 - it's nothing to do with main
procedures.
Cheers
-- Martin
next prev parent reply other threads:[~2009-05-05 21:27 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-04 9:08 How to exit an Ada program with (unix shell) error code? reinkor
2009-05-04 9:17 ` Samuel Tardieu
2009-05-04 9:26 ` reinkor
2009-05-04 9:31 ` Ludovic Brenta
2009-05-04 9:47 ` reinkor
2009-05-04 9:54 ` Martin
2009-05-04 11:38 ` sjw
2009-05-04 10:07 ` stefan-lucks
2009-05-04 13:42 ` Robert A Duff
2009-05-04 16:19 ` Martin
2009-05-07 9:48 ` anon
2009-05-04 16:09 ` anon
2009-05-05 10:49 ` Rob Norris
2009-05-05 11:15 ` Georg Bauhaus
2009-05-05 11:43 ` Martin
2009-05-05 14:57 ` Adam Beneschan
2009-05-05 15:34 ` Jean-Pierre Rosen
2009-05-06 15:28 ` Adam Beneschan
2009-05-06 22:10 ` Randy Brukardt
2009-05-07 9:08 ` anon
2009-05-07 10:01 ` Georg Bauhaus
2009-05-07 11:22 ` anon
2009-05-07 12:08 ` Martin
2009-05-07 13:34 ` Georg Bauhaus
2009-05-07 16:26 ` Adam Beneschan
2009-05-08 10:17 ` anon
2009-05-12 22:55 ` Adam Beneschan
2009-05-14 2:55 ` anon
2009-05-14 8:04 ` Martin
2009-05-14 8:39 ` Martin
2009-05-14 8:45 ` Martin
2009-05-14 9:34 ` Ludovic Brenta
2009-05-14 10:05 ` Martin
2009-05-14 12:38 ` Georg Bauhaus
2009-05-14 15:34 ` Adam Beneschan
2009-05-15 10:20 ` anon
2009-05-15 11:19 ` Martin
2009-05-05 20:48 ` anon
2009-05-05 21:01 ` Adam Beneschan
2009-05-06 11:30 ` Hibou57 (Yannick Duchêne)
2009-05-05 20:31 ` anon
2009-05-05 21:27 ` Martin [this message]
2009-05-06 8:41 ` anon
2009-05-06 9:14 ` Martin
2009-05-06 11:41 ` Georg Bauhaus
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox