On Thursday, 15 February 2024 at 23:46:10 UTC, andy wrote:
On Thursday, 15 February 2024 at 15:24:37 UTC, IchorDev wrote:

You can make a scope with `nothrow`, `@nogc`, etc.:

I've been setting `@safe @nogc pure nothrow:` at the top of (almost) every module, but then I still have to do it at the top of each struct in the module (if it has functions) and after each delegate type.

`@safe` permeates into structs, the others do not.


If you make global variables `immutable`, you can access them in `pure` functions.

Is it as simple as that? I'd have to cast away the `immutable` when adding a new interned string though. Is that still the correct way to do it?

No, this is not correct.

What you are doing is something that is logically immutable, but not actually immutable.

What you need to do is to section this off into its own module, and then use language tricks to lie to the compiler. For instance, cast a function pointer that is not pure to a pure function. Then you need to carefully review the module for correctness from an API standpoint.

The language does something similar with memory allocation, which uses a global data structure to allocate memory, but effectively is giving you back memory that is unique while it is valid.

-Steve
  • Crow programm... andy via Digitalmars-d-announce
    • Re: Crow... IchorDev via Digitalmars-d-announce
      • Re: ... andy via Digitalmars-d-announce
        • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-announce
          • ... andy via Digitalmars-d-announce
            • ... Richard (Rikki) Andrew Cattermole via Digitalmars-d-announce
            • ... andy via Digitalmars-d-announce
        • ... Steven Schveighoffer via Digitalmars-d-announce
        • ... IchorDev via Digitalmars-d-announce

Reply via email to