DIP 1021--Argument Ownership and Function Calls--Final Review

a11e99z black80 at bk.ru
Mon Sep 16 10:46:41 UTC 2019

On Monday, 16 September 2019 at 09:13:48 UTC, Mike Parker wrote:
> DIP 1021, "Argument Ownership and Function Calls", is now ready 
> for Final Review. This is the last chance for community 
> feedback before the DIP is handed off to Walter (the author in 
> this case) and Átila for the Formal Assessment.

does help this DIP with next situation or another option already 
exists in D?

dmd -dip1000 ....
import std;

struct Data {
     private void[10] buf;
     private void* ptr; // some data

     //TODO. OT
     // should it be possible to initialize pointers to internals 
in the default constructor for structs? does DIP-xxxx(idr) solve 
it? whether its necessary?
     // this() { ptr = buf.ptr; }

     // I want that data can be used only at block { that 
requested it }
    	void[] data() @trusted return scope {
        	return ptr[0..10]; // returns some internals

// user func that work with Data internals that shouldn't run away
// user can forget to use "scope"
void[] userFunc( ref Data d ) @safe {
     auto tmp = d.data;
     // FIXME
     // tmp shouldn't run away.
     // "scope" in user hands is not solution. (scope ref Data d)
     // lib should control access to lib internals not the user.
     return tmp;

void main() {
     Data d;
     userFunc( d );
     "data runs away. and dip1000 is enabled.".writeln;

More information about the Digitalmars-d mailing list