Re: Some thoughts on the 'reveal' operator Bill Frantz (frantz@communities.com)
Thu, 23 Sep 1999 17:44:58 -0700

At 04:59 PM 9/23/1999 -0700, Chip Morningstar wrote:
> define factorial(n) {
> ^if (n <= 0) {
> 1
> } else {
> n * factorial(n-1)
> }
> }
>
>is just wrong. I would expect it to (a) throw an exception (effectively
>crashing the program in this example), (b) silently do something wrong (very
>bad), or (c) get caught by the compiler (which will feel to the programmer
like
>one of those pedantic complilation errors where the compiler is objecting to
>some purely formal deviance rather than to something substantive, the kind of
>error where you tend to think "hey, if the compiler knew *that*, why
didn't it
>just do the right thing?" -- never mind that the right thing isn't actually
>100% obvious, that's what programmers will think).

To us old Algol68 fans (where __everything__ had a value), this form looks very familiar. However, Algol68 defined the value of a function/procedure/subroutine as the value of the last clause executed, which would make the ^ superfluous.

There is no way you can do secure programming in a language you don't know.