I have made a discovery

Rikki Cattermole via Digitalmars-d digitalmars-d at puremagic.com
Sat Apr 18 17:29:45 PDT 2015


On 19/04/2015 3:24 a.m., w0rp wrote:
> The following code almost compiles.
>
> --------
> import core.stdc.stdlib;
>
> class Foo : Exception {
>      @nogc pure nothrow @safe
>      this(string msg, string file = __FILE__, size_t line = __LINE__,
> Throwable next = null) {
>          super(msg, file, line, next);
>      }
>
>      @nogc
>      new(size_t size) {
>          return malloc(size);
>      }
> }
>
> @nogc
> void main() {
>      throw new Foo("Oh no!");
> }
> --------
>
> That's right. An unofficially deprecated feature of the language and a
> newer feature of the language coming together in an interesting way. The
> only thing stopping this code from actually working is a trivial change
> to druntime to mark the Throwable, Exception, and Error constructors as
> @nogc, which I just created a pull request for directly through GitHub.
>
> https://github.com/D-Programming-Language/druntime/pull/1223
>
> Now imagine that instead of just a malloc which leaks memory like the
> above, other allocation schemes are used here instead. Consider also the
> coming addition to the language for class reference counting methods
> opAddRef and opRelease. Then let your imagination run wild.
>
> Enjoy!

Awesome! Although we may need to "undeprecate" that feature.


More information about the Digitalmars-d mailing list