January 15, 2017
On Sunday, 15 January 2017 at 15:42:19 UTC, Dsby wrote:
> On Saturday, 14 January 2017 at 17:35:09 UTC, Nordlöw wrote:
>> On Friday, 13 January 2017 at 16:50:37 UTC, Dsby wrote:
>>> I write the ref count pointer and the scoped point in D.
>>
>> How do two of these differ from
>>
>> - https://dlang.org/phobos/std_typecons.html#.RefCounted
>> - https://dlang.org/phobos/std_typecons.html#.Unique
>>
>> under
>>
>> https://dlang.org/phobos/std_typecons.html
>>
>> ?
> The RefCount not support class or inteface, and the ref count is not atomic , it not thread safe.
> The Unique is base of GC. It can not @nogc. And it use the 'delete' keyword , it will be deprcated(http://dlang.org/deprecate.html).
>
> The SmartRef is Base std.experimental.allocator. You can control where the memony allocator.
> And the smartref.sharedref use the atomic default, you alse can not use atomic。 And have the smartref.weakref with sharedref to fix circular reference.

Sorry,In the new phobos, THe Unique is not used the 'delete' keyword.
But , it only destroy, not free the memony.

and : In https://github.com/dlang/phobos/blob/master/std/typecons.d#L147
    ~this()
    {
        debug(Unique) writeln("Unique destructor of ", (_p is null)? null: _p);
        if (_p !is null) destroy(_p);
        _p = null;
}
 if the 'T' is a struct, it will not exec the Destory function. Is it a bug?
January 15, 2017
On Sunday, 15 January 2017 at 15:56:30 UTC, Dsby wrote:
> and : In https://github.com/dlang/phobos/blob/master/std/typecons.d#L147
>     ~this()
>     {
>         debug(Unique) writeln("Unique destructor of ", (_p is null)? null: _p);
>         if (_p !is null) destroy(_p);
>         _p = null;
> }
>  if the 'T' is a struct, it will not exec the Destory function. Is it a bug?

What do you mean? This works for me:
---
import std.stdio, std.typecons;

struct Foo {
    ~this() {
        writeln("I'm destroyed");
    }
}

void main() {
    Unique!Foo foo = new Foo;
} // Prints "I'm destroyed"
---

January 16, 2017
On Sunday, 15 January 2017 at 17:24:25 UTC, biozic wrote:
> On Sunday, 15 January 2017 at 15:56:30 UTC, Dsby wrote:
>> and : In https://github.com/dlang/phobos/blob/master/std/typecons.d#L147
>>     ~this()
>>     {
>>         debug(Unique) writeln("Unique destructor of ", (_p is null)? null: _p);
>>         if (_p !is null) destroy(_p);
>>         _p = null;
>> }
>>  if the 'T' is a struct, it will not exec the Destory function. Is it a bug?
>
> What do you mean? This works for me:
> ---
> import std.stdio, std.typecons;
>
> struct Foo {
>     ~this() {
>         writeln("I'm destroyed");
>     }
> }
>
> void main() {
>     Unique!Foo foo = new Foo;
> } // Prints "I'm destroyed"
> ---

the "writeln("I'm destroyed");" not run the ~this in the Unique destroy function.
it run in the app exit , THe GC distroy all memony.
it example can show :
import std.stdio;
import std.typecons;

 struct Foo {
     ~this() {
         writeln("I'm destroyed");
     }
 }

 void fun(){
    Unique!Foo foo = new Foo;
    writeln("exit the fun.");
 }

 void main() {
     fun();
      writeln("exit the Main.");
 }

It is the printf:
 ~/tmp  rdmd ./type.d                                                                                                                                                                              2017年01月16日 星期一 09时50分00秒
exit the fun.
exit the Main.
I'm destroyed
 ~/tmp 

if you use the struct in Unique, the struct's Destory function is not run in the Unique destroy, it is also run in the GC collet.
I think it is not the Unique should be.
January 16, 2017
On Monday, 16 January 2017 at 01:54:35 UTC, Dsby wrote:
> On Sunday, 15 January 2017 at 17:24:25 UTC, biozic wrote:
>> On Sunday, 15 January 2017 at 15:56:30 UTC, Dsby wrote:
>>> and : In https://github.com/dlang/phobos/blob/master/std/typecons.d#L147
>>>     ~this()
>>>     {
>>>         debug(Unique) writeln("Unique destructor of ", (_p is null)? null: _p);
>>>         if (_p !is null) destroy(_p);
>>>         _p = null;
>>> }
>>>  if the 'T' is a struct, it will not exec the Destory function. Is it a bug?
>>
>> What do you mean? This works for me:
>> ---
>> import std.stdio, std.typecons;
>>
>> struct Foo {
>>     ~this() {
>>         writeln("I'm destroyed");
>>     }
>> }
>>
>> void main() {
>>     Unique!Foo foo = new Foo;
>> } // Prints "I'm destroyed"
>> ---
>
> the "writeln("I'm destroyed");" not run the ~this in the Unique destroy function.
> it run in the app exit , THe GC distroy all memony.
> it example can show :
> import std.stdio;
> import std.typecons;
>
>  struct Foo {
>      ~this() {
>          writeln("I'm destroyed");
>      }
>  }
>
>  void fun(){
>     Unique!Foo foo = new Foo;
>     writeln("exit the fun.");
>  }
>
>  void main() {
>      fun();
>       writeln("exit the Main.");
>  }
>
> It is the printf:
>  ~/tmp  rdmd ./type.d
> 
>                                                                 2017年01月16日 星期一 09时50分00秒
> exit the fun.
> exit the Main.
> I'm destroyed
>  ~/tmp 
>
> if you use the struct in Unique, the struct's Destory function is not run in the Unique destroy, it is also run in the GC collet.
> I think it is not the Unique should be.

Right, good point. This behaviour is indeed caused by destroy() and is not specific to Unique. But it the case of Unique, relying on this (undefined?) behaviour of destroy is a bug (a regression).

January 23, 2017
On Saturday, 14 January 2017 at 15:41:01 UTC, Dmitry Olshansky wrote:
> That is C++ smart_ptr has to be atomic, while its D counter part may safely be non-atomic because everything is TLS be default.

I assume you mean std::shared_ptr. The reference counting semantics are atomic, but the I don't think the compiler is required to if it provably isn't shared. There are also ways to get around it if needed (you only need atomic count when you enter or leave a context, e.g. thread).

Of course, there are C++ single threaded alternatives with intrusive ref counting, which I believe is what D is going for. shared_ptr is non-intrusive (doesn't affect allocation or object types).
May 30, 2018
On Friday, 13 January 2017 at 16:50:37 UTC, Dsby wrote:
> I write the ref count pointer and the scoped point in D.
> it just Like cpp's shared_ptr , waek_ptr and unique_ptr .
> Now, it is  Developing.
> I will write more test before the frist release.
> And the docs is null.
> It on github: https://github.com/huntlabs/SmartRef

Very nice. Do you have a dub package for this?
June 08, 2018
On Friday, 13 January 2017 at 16:50:37 UTC, Dsby wrote:
> I will write more test before the frist release.
> And the docs is null.
> It on github: https://github.com/huntlabs/SmartRef

I hope you know https://code.dlang.org/packages/automem.
1 2
Next ›   Last »