Sujet : Re: bye with exit status
De : ruvim.pinka (at) *nospam* gmail.com (Ruvim)
Groupes : comp.lang.forthDate : 08. Nov 2024, 13:48:21
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vgl1al$369hb$2@dont-email.me>
References : 1 2 3 4 5
User-Agent : Mozilla Thunderbird
On 2024-11-08 12:29, Anton Ertl wrote:
mhx@iae.nl (mhx) writes:
Same as remarked by minforth: there is a exit-handler chain in
which the user can plug arbitrary routines.
In Gforth BYE is a deferred word, with the intention that it can be
extended with cleanup actions.
The disadvantage of this approach in connection with the non-0 exit is
that we probably also want to do the same cleanup in those cases. The
best way to deal with that is probably the "EXIT-CODE !" approach.
I think, this variable, if it is required, should be internal.
For example:
variable _system-exit-status 0 _system-exit-status !
: kernel-bye ( -- never )
... \ other actions
_system-exit-status @ (bye)
;
defer bye ' kernel-bye is bye
: bye-with-status ( n -- never )
_system-exit-status ! bye
;
Thus, the old interface is not changed. And `bye-with-status` also does the same cleanup sequence (if any).
Concerning the usual discussion about the name: I find that the system
is left in the error case with an uncaught THROW in script-execution
mode; in that case an exit code of 1 is returned by Gforth, so it's
not sufficient for communicating more than a binary result to the
calling script. But I have not used non-binary exit codes for
non-Forth programs, either, and I do quite a bit of shell scripting.
Does it mean that "bye" and "bye-failure" is enough?
In any case, while we have (BYE), I don't use it in application
programs.
As an example, when a script is used in Make, it is important to return nonzero exit status on error.
Sometimes people ask about that, for example:
<
https://stackoverflow.com/questions/71616920/how-can-i-exit-forth-with-a-non-zero-exit-status>
-- Ruvim