On Sat, 01 Feb 2014 16:07:20 -0800, Frank Bauer <y...@z.com> wrote:

Granted, low latency apps are the minority. C++ apps are a minority compared to C# and Java combined. Beyond any doubt there is merit to a GC in all apps that don't have to squeeze the last bit of performance out of the machine, yes, the vast majority, I know.

But maybe we should ask ourselves if it makes sense to get the low latency developers on board, especially if D's syntax remains basically unchanged in the process. Heck, we could even keep 'new' instead of Rusts '~' for owning pointers.

On Saturday, 1 February 2014 at 19:40:20 UTC, Adam Wilson wrote:
On Sat, 01 Feb 2014 06:33:15 -0800, Frank Bauer <x...@y.com> wrote:
ARC would be a plus for heavily interdependent code. But it doesn't beat unique_ptr semantics in local use that free their memory immediately as they go out of scope or are reassigned.

So you want C++ back then? Got it.

Ahem ... no you don't. I tried to make my point as clear as possible. Unique_ptr *semantics*, e.g. Rusts 'let x = ~X' *without* GC is as easy to use as 'auto x = new X' *with* GC. In both cases the runtime takes care of freeing the object without user intervention.

So newbies should not be turned off, if that is your concern.

In general, I don't understand your arguments against dumping the GC if it does not make much difference in your code anyways? Getting rid of mandatory GC would not take away one iota of your D expressiveness. It means more work on the part of D's implementers, to be sure.

I'm close to Stuttgart and Ingolstadt where Mercedes Benz and Audi produce their flagship cars for a tiny minority of customers. Yet their reputation with the average buyer relies heavily on how well their top of the line products fare.

Do we want D to be the flagship?

The problem isn't syntax, it's semantics. It's not 'new' versus '~' (which by the way is not easy to type on a standard US keyboard, it's a shift+key that's in an an uncomfortable position). It's the number of rules and special cases around what happens when I do something. You're right, you are not asking for a big syntactic change, and I know that. What you are asking for is a massive semantics change, and that means new rules and most likely, more of them.

Let's look at some numbers. TIOBE, Go is #36, Rust does not even make the Top 100. On TIOBE, there are three non-GC languages in the entire top 20 (C, C++, Obj-C) the rest feature a non-ARC GC of some form. I am not concerned with how the languages manage memory under-the-hood, only how they present their memory management semantics to the user.

It's interesting that you bring up Mercedes and Audi. Yes, their reputation is defined by their high-end products. But how many people actually buy an R8 or an SLK Black? The vast majority or everyday don't buy a completely bonkers super-car, they by cars that get the job done. Why do Toyota and Volkswagen produce the most cars in the world? Not because either company (yes, I am aware of VW's 13 name-plates, I'm talking about the VW name-plate here) is particularly renowned for producing supercars, but because their cars reliably get the job done. A Corolla is not the fastest, it's not the prettiest, and it's certainly not the most expensive. More Corolla's have been sold world-wide (40 million) than any other single car model in history.

You want a super-car, with all the fancy buttons and knobs and options, and ARC is very analogous to a super-car in this respect. In fact many of the complaints I see about Obj-C's ARC have to do with the semantics of it. ARC is by definition semantically more complex than a GC. But most people don't want those options, they just want to put the key in and have the car reliably do what they ask within reasonable boundaries and that is what a GC does best. The semantics of a good GC are nearly transparent.

But that's where the analogy breaks down. You can stratify car models. You can't deliver multiple exclusive strata in a programming language. A language is what it is, there are no multiple levels.

You say, let's bring on the low-latency developers to prove how fast D is and how it has all these great options. The problem is most programmers don't need those options on a day to day basis, but having to carry around the semantics for them everywhere is wearying. I say, let's fix the GC to so that the masses can do what they need to do without any fuss.

Most car drivers aren't Jeremy Clarkson. And most programmers aren't real-time embedded developers. A friend of mine has a saying "Sell to the masses, eat with the classes. Sell to the classes, eat with the masses." It's a catchy way of saying, you don't make money or gain popularity by catering to the most demanding of users or the most wealthy of clients. You gain popularity by catering to the NEEDS of the everyday user, or the middle-class client.

The reason I am being to vehement, is that I unlike most people here, I see D as needing to focus on making the experience better for the every day programmer, NOT the experience of the most demanding users. And as C++ has proven, the two are distinct, writing a language that caters to the high-end often precludes the semantics that appeal to the everyday precisely because those semantics are too slow.

--
Adam Wilson
GitHub/IRC: LightBender
Aurora Project Coordinator

Reply via email to