D dropped in favour of C# for PSP emulator

Jonathan M Davis jmdavisProg at gmx.com
Sat May 12 11:22:36 PDT 2012


On Saturday, May 12, 2012 15:17:22 Manu wrote:
> On 12 May 2012 14:03, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > On Saturday, May 12, 2012 13:39:54 Manu wrote:
> > > Awesome, although it doesn't end there. Local references are also very
> > > important.
> > 
> > Never going to happen. Walter doesn't like them (they also cause issues
> > with
> > the proposal to let ref take rvalues in D IMHO), but I don't remember the
> > details. Regardless, I'd be shocked if they were ever introduced into D.
> 
> So what's the work around then?
> Using pointers pollute your usage with pointer assignment problems,
> and leads to many redundant instances of &, *, and parentheses all over the
> place.
> 
> Another scenario to consider:
> given: ref X someFunc();
> 
> ref X t = someFunc(); // fail
> 
> Without ref locals, there is no way to hold a local reference to something
> returned by a function, which defeats the purpose...
> And if ref is not a type constructor, auto and templates will never work
> properly either.

I believe that you can do it with a pointer.

auto t = &someFunc();

And as long as you don't try to increment the pointer, it's @safe. It doesn't 
even require different semantics when calling member functions, unlike C++ 
(though you'd still have to dereference it if you want to copy it, so the code 
would still differ somewhat from what you want in terms of syntax).

Regardless, unfortunately, I don't remember why Walter doesn't want ref local 
variables. You'd have to get him to explain that. I just remember that he 
doesn't want them and I don't think that it wasn't really up for discussion. 
Maybe you can find an argument to convince him. I don't know. But from what I 
recall, there isn't much chance of that.

> Well, while I'm sure that your use cases are very important and may be
> 
> > normal
> > in your industry, I don't think that they're normal in the programming
> > world
> > in general.
> 
> I've never met a C++ programmer (other than yourself apparently) that
> doesn't pass structs/classes by ref.
> That's generally considered absurd. And if you want evidence, just look at
> the STL, Boost, or any other C++ library you care to pick.

C++ is not D. The semantics of passing arguments are not the same (thanks 
primary to postblit vs copy constructors). D creates fewer copies than C++. 
And actually, with C++'s move constructors, as I understand it, the advice is 
to no longer use const& for passing objects because it screws up the 
compiler's ability to optimize out temporaries (and the C++11 situation is 
much closer to D's situation than C++98 was).

But regardless, I was never advocating that you _always_ pass structs by 
value. I was pointing out that for smaller structs (those with only a few 
members), it generally works just fine - except maybe in cases where you're 
worrying about absolutely every CPU cycle.

- Jonathan M Davis


More information about the Digitalmars-d mailing list