May 04, 2017 Re: Blog post on automem | ||||
---|---|---|---|---|
| ||||
Posted in reply to ANtlord | On Wednesday, 3 May 2017 at 12:43:26 UTC, ANtlord wrote: > On Friday, 28 April 2017 at 14:40:03 UTC, Mike Parker wrote: >> Atila was kind enough to do a write up on his automem library for the D Blog, talking about why he did it and showing some of the implementation details. This is officially part of the GC series. The next post in the series will be my @nogc post (I've pushed it back to after DConf). >> >> When I publish the next one, I'll add a page to the blog with each post in the series linked under two categories: 'GC Fundamentals' and 'Memory Management Strategies'. Atila's post sits squarely in the latter. If you have a particular strategy you use for working with D's GC, please let me know and we can talk about a post (guest post or otherwise). >> >> Blog: >> https://dlang.org/blog/2017/04/28/automem-hands-free-raii-for-d/ >> >> Reddit: >> https://www.reddit.com/r/programming/comments/682xzc/automem_a_library_for_cstyle_raii_in_d/ > > Does it possible to use the library with classes? I have a simple code that can't be compiled due to GC calling. > > import automem.unique : Unique; > import std.experimental.allocator.mallocator: Mallocator; > > class MyClass { > int a; > this(int a) @nogc { > this.a = a; > } > ~this() @nogc { > > } > } > void main() @nogc > { > auto obj = Unique!(MyClass, Mallocator)(1); > } > > > Text of error is @nogc function 'D main' cannot call non-@nogc destructor 'automem.unique.Unique!(MyClass, Mallocator).Unique.~this' I took a look at this. It's a druntime problem. Unique.~this calls std.experimental.allocator.dispose, which calls destroy in object.d which calls rt_finalize: extern (C) void rt_finalize(void *data, bool det=true); Notice the lack of `@nogc` in the declaration. Adding the annotation should fix the problem, assuming the implementation is in fact `@nogc`. I'll file a bug and PR to fix it. Atila |
May 04, 2017 Re: Blog post on automem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Atila Neves | On Thursday, 4 May 2017 at 08:41:55 UTC, Atila Neves wrote: > I took a look at this. It's a druntime problem. Unique.~this calls std.experimental.allocator.dispose, which calls destroy in object.d which calls rt_finalize: > > extern (C) void rt_finalize(void *data, bool det=true); > > Notice the lack of `@nogc` in the declaration. Adding the annotation should fix the problem, assuming the implementation is in fact `@nogc`. I'll file a bug and PR to fix it. Bug: https://issues.dlang.org/show_bug.cgi?id=17297 |
May 04, 2017 Re: Blog post on automem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Atila Neves | On Thursday, 4 May 2017 at 08:41:55 UTC, Atila Neves wrote: > On Wednesday, 3 May 2017 at 12:43:26 UTC, ANtlord wrote: >> [...] > > I took a look at this. It's a druntime problem. Unique.~this calls std.experimental.allocator.dispose, which calls destroy in object.d which calls rt_finalize: > > extern (C) void rt_finalize(void *data, bool det=true); > > Notice the lack of `@nogc` in the declaration. Adding the annotation should fix the problem, assuming the implementation is in fact `@nogc`. I'll file a bug and PR to fix it. > > Atila There already is a bug, apparently: https://issues.dlang.org/show_bug.cgi?id=17297 Atila |
Copyright © 1999-2021 by the D Language Foundation