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.