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: a07f3367d7,14aa27db81ce3b40 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news2.google.com!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!cyclone1.gnilink.net!gnilink.net!wn14feed!worldnet.att.net!bgtnsc05-news.ops.worldnet.att.net.POSTED!53ab2750!not-for-mail Newsgroups: comp.lang.ada From: anon@anon.org (anon) Subject: Re: How to exit an Ada program with (unix shell) error code? Reply-To: anon@anon.org (anon) References: <49ba30c9-a1e6-4346-8618-d256f87ac301@s31g2000vbp.googlegroups.com> <948d6a6b-d603-4e38-add2-50016c2dcc9d@s20g2000vbp.googlegroups.com> X-Newsreader: IBM NewsReader/2 2.0 Message-ID: Date: Wed, 06 May 2009 08:41:59 GMT NNTP-Posting-Host: 12.64.198.132 X-Complaints-To: abuse@worldnet.att.net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1241599319 12.64.198.132 (Wed, 06 May 2009 08:41:59 GMT) NNTP-Posting-Date: Wed, 06 May 2009 08:41:59 GMT Organization: AT&T Worldnet Xref: g2news2.google.com comp.lang.ada:5702 Date: 2009-05-06T08:41:59+00:00 List-Id: By your logic, who said procedures are portable! Using RM 10.2 (29), a vendor could easily restrict the "main subprograms" to functions only. And there is no definition in the RM that states a "main subprograms" subroutine must be a parameterless library procedure, either. So, its better to have and state that both subprogram types are portable. Then one can point out that the "main subprograms" that are procedures are more widely used in Ada. In <948d6a6b-d603-4e38-add2-50016c2dcc9d@s20g2000vbp.googlegroups.com>, Martin writes: >On May 5, 9:31=A0pm, a...@anon.org (anon) wrote: >> Martin. >> >> =A0 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" ) withi= >n >> a function called "main" within a package called "ada_main". =A0And if th= >e >> "main" subprogram is a procedure, the binder function "main" calls this >> procedure and returns the exit status which is normally set to zero unles= >s 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~.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. =A0It just that most programmers pr= >efer >> the "Procedure" type of partitions design. >> >> -- >> -- main subprograms as a procedure >> -- >> procedure main is >> =A0 begin -- main >> =A0 =A0 =A0null ; >> =A0 end main ; >> -- >> -- or main subprograms as a public parameterless function >> -- >> function main return integer is >> =A0 begin -- main >> =A0 =A0 =A0return ( 0 ) ; -- 0 :=3D normal exit status. >> =A0 end main ; >> >> Ada RM -- quoted >> >> =A0 RM 10.2 Program Execution >> =A0 =A0... >> >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Implementation Permiss= >ions >> =A0 =A0... >> >> 29 =A0 =A0An implementation may restrict the kinds of subprograms it supp= >orts as >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ------------ >> main subprograms. However, an implementation is required to support all m= >ain >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = >=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ---------------- >> subprograms that are public parameterless library procedures. >> ----------- >> >> =A0 RM 10.1 Separate Compilation >> >> 1 =A0 =A0 A program unit is either a package, a task unit, a protected un= >it, a >> protected entry, a generic unit, or an explicitly declared subprogram oth= >er >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = >=A0 =A0------------------------------ >> than an enumeration literal. Certain kinds of program units can be separa= >tely >> 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 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