RFC: scope and borrowing

Marco Leise via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 26 16:01:36 PDT 2014


Am Sun, 24 Aug 2014 13:14:43 +0000
schrieb "Marc Schütz" <schuetzm at gmx.net>:

> In the "Opportunities for D" thread, Walter again mentioned the 
> topics ref counting, GC, uniqueness, and borrowing, from which a 
> lively discussion developed [1]. I took this thread as an 
> opportunity to write down some ideas about these topics. The 
> result is a rather extensive proposal for the implementation of 
> borrowing, and its implementations:
> 
> http://wiki.dlang.org/User:Schuetzm/scope

The amount of possible use-cases you listed for this extension is
staggering. It surely carries its own weight.
scope!(ident1, ident2, ...) was quite clever. inout could
borrow from this.

> This is not a real DIP, but before I put more work into 
> formalizing it, I'd like to hear some thoughts from the languages 
> gurus here:
> 
> * Is this the general direction we want to go? Is it acceptable 
> in general?
> * Is the proposal internally consistent?

Can anyone tell without actually implementing it? :)
You could try to formalize some error messages and how the
compiler's reasoning would go. What happens when I pass
identifiers to scope!(…) return types?
- Can the compiler look up the identifiers' types and scopes
  in all cases?
- Will the compiler deduce the return type from these
  identifiers? E.g. "scope!(someString) ref getString();" will
  work like in your example? I don't think so, because the
  "lifetime identifiers" could be structs containing the
  returned type.
- What if we used incompatible types like
  "scope!(someString, someIntPtr)" there?
- What about variables?

  static int someInt = 32;
  string someString;
  scope!(someString, someInt) int* x;
  x = &someInt;

  Is the declaration of x in error? Strings don't contain
  integers unless unsafe casts are used, so why would they
  narrow the lifetime of an integer reference?

- Is it necessary to keep around all declared lifetime
  identifiers? In the snippet above (assuming it is valid), it
  looks like the shorter lived `someString' is enough to
  establish the semantics.

> * How big would the effort to implement it be? (I suspect it's a 
> large amount of work, but relatively straightforward.)
> 
> [1] http://forum.dlang.org/thread/lphnen$1ml7$1@digitalmars.com

-- 
Marco



More information about the Digitalmars-d mailing list