@live questions
IGotD-
nise at nise.com
Wed Nov 25 11:18:24 UTC 2020
On Wednesday, 25 November 2020 at 10:42:02 UTC, Walter Bright
wrote:
>
> It shouldn't as nameLookup and idLoopup are globals. Looks like
> you found a bug!
>
> Sorry if I gave that impression. It will only be so at your
> discretion with where you place @live.
Yes, but you get the idea. If I would put nameLookup and idLookup
in a struct for example which is usually the case, then I'm not
sure what applies.
struct MyStruct
{
int s;
}
struct LookUp
{
@live void addStruct(MyStruct* s, const string name, int id)
{
nameLookup[name] = s;
idLookup[id] = s;
}
private:
MyStruct*[string] nameLookup;
MyStruct*[int] idLookup;
}
void main()
{
MyStruct* s = new MyStruct;
LookUp l;
l.addStruct(s, "id1", 1);
}
Putting nameLookup and idLoopup in a struct also works with the
DIP1000 preview which contradicts you presentation but I guess
this is only a prototype. If I'm going to interpret your
presentation, then an assignment of a pointer is a move with
change of ownership just like Rust. Then you mention in this
thread that you want to make @live default, and this really
worries me. Basically forced single ownership makes the common
design pattern in the example above impossible and this is
something people who use Rust must battle all the time (I guess
they just use reference counted objects which is GC).
If want to implement lifetime analysis then you need to go the
full way which includes single ownership otherwise it isn't
solvable. A half variant, the question is here is how useful such
implementation would be. One possibility is that you make
functions the barrier where the data flow analysis works, so
addStruct would not be allowed to be @live and inside that
function is "do whatever you want" territory. This of course
contradicts making @live default.
More information about the Digitalmars-d
mailing list