proposed @noreturn attribute
Nicholas Wilson via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jul 8 03:52:10 PDT 2017
On Saturday, 8 July 2017 at 10:15:39 UTC, Walter Bright wrote:
> C compilers (and by extension C++ compilers) usually have an
> extension which allows a function to be marked as one that
> never returns. The point of this is it enables improved data
> flow analysis and better code being generated.
>
> Noreturn functions crop up in things like assert's and
> enforce's. DMD internally hardcodes a few functions it knows
> about that are noreturn, and the DMD optimizer and codegen take
> advantage of it.
>
> But when people write their own assert's and enforce's, this
> falls apart. While the programs will still work, they won't be
> as efficient as they could be.
>
> Having an @noreturn attribute will take care of that:
>
> @noreturn void ThisFunctionExits();
>
> Yes, it's another builtin attribute and attributes are arguably
> a failure in language design.
On the contrary I think attributes are wonderful, and I have a
DIP in the pipeline to address some the the problems
(https://github.com/dlang/DIPs/pull/75)
>
> Has anyone a better idea? Does anyone want to write a DIP for
> this?
>
> Example:
>
> DMC uses a pragma to do it:
>
> void ThisFunctionExits();
> #pragma noreturn(ThisFunctionExits);
>
> GCC uses an attribute:
>
> void ThisFunctionExits() __attribute__ ((__noreturn__));
>
> VC uses:
>
> __declspec(noreturn) void ThisFunctionExits();
consider that GDC and LDC already both have that attribute
courtesy of their backends (@attribute("noreturn") and
@llvmAttr("noreturn") respectively).
While it may seem a good idea to unify them, if people want
performance then they will use either GDC or LDC, which already
have that attribute. So I would question the usefulness of such
an attribute but won't go so far as to discourage anyone from
trying. However it should be a compiler dependant alias in
core.attribute if it is to become a thing.
More information about the Digitalmars-d
mailing list