comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: How to exit an Ada program with (unix shell) error code?
Date: Wed, 6 May 2009 08:28:38 -0700 (PDT)
Date: 2009-05-06T08:28:38-07:00	[thread overview]
Message-ID: <356247f9-4a83-44aa-a412-4500e6af19cf@f1g2000prb.googlegroups.com> (raw)
In-Reply-To: 2amptg.bg7.ln@hunter.axlog.fr

On May 5, 8:34 am, Jean-Pierre Rosen <ro...@adalog.fr> wrote:
> Adam Beneschan a écrit :> Right; and even if your Ada compiler *does* support functions that
> > return integers as main programs, and you're compiling for some
> > operating system with an "x" in its name (or Solaris), this does *not*
> > mean that the Ada compiler will treat the function result as the
> > status code.  The compiler could decide that the function result is
> > something to be formatted and spit out onto standard output.  If an
> > Ada implementation supports parameters and/or function results on main
> > programs, the language leaves it up to the implementation how those
> > are interpreted.  There's no rule that says that the interpretation
> > has to mimic the behavior of the C language (thank God).  So anon's
> > solution may work on GNAT, but it can't be assumed to work anywhere
> > else.
>
> That's right from a legalistic point of view, but don't forget that
> compiler writers are not masochists.

That last statement might be tautologically false.  :) :) :)

In any case, if you're implying that writing the extra code needed to
get the program to display the function result on the standard output
is an act of self-inflicted pain---trust me, it's nowhere near as
painful as trying to understand and implement 3.10.2.


> If an implementation supports
> functions returning integers as main programs, I would be very surprised
> if it was not interpreted as the return code, since this is what the
> consumer would expect...

Irvine Compiler's Ada compiler (the one I masochistically work on
maintaining) does behave in the way I described.  Main subprograms can
be procedures or functions; they can take parameters that are scalars
or String (which are parsed from the command line); and they can be
functions that return scalars or String, with the result being
formatted and displayed on the standard output.  The compiler was
originally written to run on Unix and VMS---and, by the way, I'm not
sure that VMS supports the convention that a main program's function
result becomes the return status (which is not a simple zero or non-
zero as it is on Unix, if I recall correctly).  The compiler also runs
on a variety of other targets, although the parameters and function
result aren't supported in most cases.

Surprised?  Well, the compiler is consistent across platforms and with
respect to allowing various types to be used as function results.  It
wouldn't make any sense to break consistency and make integer-
returning functions on Unix-type platforms behave differently.  And
nobody has ever complained about it.  As for whether it's what I'd
expect if I were a consumer...  I'm not much of a C hack, but when I
do use C I use exit() to set the status code, not "return", which
seems to me to pervert the meaning of what a "function" and a function
result should be; or as Georg said it, it's "playing tricks" with the
language.  I don't feel any particular need to expect Ada compilers to
support the same sort of trickery C programmers are used to.

But that's just my opinion.

                              -- Adam






  reply	other threads:[~2009-05-06 15:28 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 [this message]
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
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