@noreturn property

Nick Sabalausky a at a.a
Thu Oct 21 14:27:00 PDT 2010


"Iain Buclaw" <ibuclaw at ubuntu.com> wrote in message 
news:i9p9li$282u$1 at digitalmars.com...
>A few standard library functions, such as 'abort' and 'exit', cannot 
>return.
> However there is no way in DMD to let the compiler know about this.
> Currently in D2, you must either have a 'return' or 'assert(0)' statement 
> at
> the end of a function body. It would be nice however if you can give hints 
> to
> the compiler to let it know that a function is never going to return.
>
> Example:
>
> @noreturn void fatal()
> {
>    print("Error");
>    exit(1);
> }
>
> The 'noreturn' keyword would tell the compiler that 'fatal' cannot return, 
> and
> can then optimise without regard to what would happen if 'fatal' ever did
> return. This should also allow fatal to be used instead of a return or 
> assert
> statement.
>
> Example:
>
> int mycheck(int x)
> {
>    if (x > 1)
>        return OK;
>    fatal();
> }
>
>
> Thoughts?

A while ago someone mentioned a feature that some languages have that's a 
specific that indicates "never returns". (I'll just call it type 
"noreturn").

One of the nice things about that is you don't have to provide a "fake" 
return type. For instance, with your "@noreturn": "@noreturn int foo()" 
would be legal, but wouldn't make any sence. And in a way, even "@noreturn 
void foo()" isn't great since a "void" return value suggests that it at 
least returns.

So your "fatal" would be like this:

noreturn fatal()
{
   print("Error");
   exit(1);
}

And likewise, "exit" would be declared as "noreturn exit(int)" (otherwise 
the compiler would, presumably, complain that a "noreturn" function 
returns).

Since this "noreturn" would be an actual type, in the langauges that have 
it, it will often participate in arithmetic types, so you can have a 
function that may or may not return:

Arithmetic!(noreturn, int) foo(int num)
{
    if(num == 7)
        exit(1);
    else
        return num;
}

Or something like that anyway. (Although, AIUI, those languages generally 
have arithmetic types built into the langauge itself.)




More information about the Digitalmars-d mailing list