www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Proposal: Reference Variables

reply S. Chancellor <dnewsgr mephit.kicks-ass.org> writes:
I would like to suggest the following variable type added to D as a 
supplement to pointers.  Please review the following code and suggest 
modifications and additions as you see.

Thanks!

-S.

Oh yes, and please assume all the following asserts PASS.


long x = 2;
long& y = &x;

assert(y == 2);

y = 4;

assert(x == 4);

assert(&y == &x);  //Notice the change in the operation of &.  Not a 
handle to x!

long z = 5;

&y = &z;  //& Allows l-value assignment,

assert( y == 5 );

assert( &y == &z );

assert(y.sizeof == z.sizeof);  //Sizeof gives information on referenced 
type, not reference.  Ditto for other properties
Apr 06 2006
next sibling parent reply Hasan Aljudy <hasan.aljudy gmail.com> writes:
S. Chancellor wrote:
 I would like to suggest the following variable type added to D as a 
 supplement to pointers.  Please review the following code and suggest 
 modifications and additions as you see.
 
 Thanks!
 
 -S.
 
 Oh yes, and please assume all the following asserts PASS.
 
 
 long x = 2;
 long& y = &x;
 
 assert(y == 2);
 
 y = 4;
 
 assert(x == 4);
 
 assert(&y == &x);  //Notice the change in the operation of &.  Not a 
 handle to x!
 
 long z = 5;
 
 &y = &z;  //& Allows l-value assignment,
 
 assert( y == 5 );
 
 assert( &y == &z );
 
 assert(y.sizeof == z.sizeof);  //Sizeof gives information on referenced 
 type, not reference.  Ditto for other properties
 

While I like the idea of references and refernce semantics for things like structs and whatnot, I think the C++ & operator is the *wrong* way to do it.
Apr 07 2006
parent reply Bruno Medeiros <brunodomedeirosATgmail SPAM.com> writes:
Hasan Aljudy wrote:
 S. Chancellor wrote:
 I would like to suggest the following variable type added to D as a 
 supplement to pointers.  Please review the following code and suggest 
 modifications and additions as you see.

 Thanks!

 -S.

 Oh yes, and please assume all the following asserts PASS.


 long x = 2;
 long& y = &x;

 assert(y == 2);

 y = 4;

 assert(x == 4);

 assert(&y == &x);  //Notice the change in the operation of &.  Not a 
 handle to x!

 long z = 5;

 &y = &z;  //& Allows l-value assignment,

 assert( y == 5 );

 assert( &y == &z );

 assert(y.sizeof == z.sizeof);  //Sizeof gives information on 
 referenced type, not reference.  Ditto for other properties

While I like the idea of references and refernce semantics for things like structs and whatnot, I think the C++ & operator is the *wrong* way to do it.

What do you mean "reference semantics"? "References" (as in "reference variables, "alias references", or "c++ references") do not give "reference semantics", (as in "reference types"). -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Apr 09 2006
parent Hasan Aljudy <hasan.aljudy gmail.com> writes:
Bruno Medeiros wrote:
 Hasan Aljudy wrote:
 
 S. Chancellor wrote:

 I would like to suggest the following variable type added to D as a 
 supplement to pointers.  Please review the following code and suggest 
 modifications and additions as you see.

 Thanks!

 -S.

 Oh yes, and please assume all the following asserts PASS.


 long x = 2;
 long& y = &x;

 assert(y == 2);

 y = 4;

 assert(x == 4);

 assert(&y == &x);  //Notice the change in the operation of &.  Not a 
 handle to x!

 long z = 5;

 &y = &z;  //& Allows l-value assignment,

 assert( y == 5 );

 assert( &y == &z );

 assert(y.sizeof == z.sizeof);  //Sizeof gives information on 
 referenced type, not reference.  Ditto for other properties

While I like the idea of references and refernce semantics for things like structs and whatnot, I think the C++ & operator is the *wrong* way to do it.

What do you mean "reference semantics"? "References" (as in "reference variables, "alias references", or "c++ references") do not give "reference semantics", (as in "reference types").

Maybe I don't understand the meaning of "semantics"! What I mean by "Reference semantics" is reference behavior applied to pointers. (if that makes it any clearer ..)
Apr 10 2006
prev sibling parent reply Bruno Medeiros <brunodomedeirosATgmail SPAM.com> writes:
S. Chancellor wrote:
 I would like to suggest the following variable type added to D as a 
 supplement to pointers.  Please review the following code and suggest 
 modifications and additions as you see.
 
 Thanks!
 
 -S.
 
 Oh yes, and please assume all the following asserts PASS.
 
 
 long x = 2;
 long& y = &x;
 
 assert(y == 2);
 
 y = 4;
 
 assert(x == 4);
 
 assert(&y == &x);  //Notice the change in the operation of &.  Not a 
 handle to x!
 
 long z = 5;
 
 &y = &z;  //& Allows l-value assignment,
 
 assert( y == 5 );
 
 assert( &y == &z );
 
 assert(y.sizeof == z.sizeof);  //Sizeof gives information on referenced 
 type, not reference.  Ditto for other properties
 

I would moderately prefer a syntax with "ref" instead of "&", as: long x = 1; ref long z = &x; Also, "ref" (or "&") would supersede the functionality of "inout", since they do the same, only that "inout" only works for parameter variables. -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Apr 09 2006
parent Hong <Hong_member pathlink.com> writes:
ref/alias/inout are possible choices. It seems impossible to write proper
containers without C++ like reference type

I would moderately prefer a syntax with "ref" instead of "&", as:
   long x = 1;
   ref long z = &x;
Also, "ref" (or "&") would supersede the functionality of "inout", since 
they do the same, only that "inout" only works for parameter variables.

-- 
Bruno Medeiros - CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D

Apr 10 2006