Jump to page: 1 235  
Page
Thread overview
Final by default?
Mar 12, 2014
Walter Bright
Mar 12, 2014
Namespace
Mar 12, 2014
Namespace
Mar 13, 2014
deadalnix
Mar 13, 2014
Walter Bright
Mar 12, 2014
luka8088
Mar 12, 2014
Walter Bright
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Rikki Cattermole
Mar 13, 2014
luka8088
Mar 12, 2014
Ali Çehreli
Mar 12, 2014
Ali Çehreli
Mar 12, 2014
Walter Bright
Mar 13, 2014
Temtaime
Mar 13, 2014
Temtaime
Mar 13, 2014
Nick Treleaven
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Walter Bright
Mar 13, 2014
Walter Bright
Mar 14, 2014
Daniel Murphy
Mar 13, 2014
Timon Gehr
Mar 13, 2014
Walter Bright
Mar 13, 2014
Timon Gehr
Mar 14, 2014
Ethan
Mar 14, 2014
Ethan
Mar 14, 2014
1100110
Mar 14, 2014
Walter Bright
Mar 14, 2014
1100110
Mar 14, 2014
Iain Buclaw
Mar 14, 2014
Regan Heath
Mar 14, 2014
1100110
Mar 14, 2014
Regan Heath
Mar 14, 2014
Mike Parker
Mar 14, 2014
Johannes Pfau
Mar 14, 2014
Walter Bright
Mar 14, 2014
Iain Buclaw
Mar 14, 2014
Paulo Pinto
Mar 14, 2014
H. S. Teoh
Mar 14, 2014
Paulo Pinto
Mar 14, 2014
monarch_dodra
Mar 14, 2014
deadalnix
Mar 15, 2014
Michel Fortin
Mar 15, 2014
deadalnix
Mar 14, 2014
Joakim
Mar 14, 2014
Iain Buclaw
Mar 15, 2014
Johannes Pfau
Mar 16, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Sean Kelly
Mar 17, 2014
Walter Bright
Mar 17, 2014
Sean Kelly
Mar 17, 2014
Walter Bright
Mar 17, 2014
Sean Kelly
Mar 15, 2014
Jacob Carlborg
Mar 15, 2014
Iain Buclaw
Mar 15, 2014
Walter Bright
Mar 15, 2014
Johannes Pfau
Mar 17, 2014
Walter Bright
Mar 17, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Iain Buclaw
Mar 17, 2014
Walter Bright
Mar 17, 2014
Johannes Pfau
Mar 17, 2014
Walter Bright
Mar 17, 2014
Johannes Pfau
Mar 17, 2014
Walter Bright
Mar 17, 2014
Michel Fortin
Mar 14, 2014
Walter Bright
Mar 14, 2014
1100110
Mar 14, 2014
Regan Heath
Mar 14, 2014
Rikki Cattermole
Mar 14, 2014
Rikki Cattermole
Mar 14, 2014
Walter Bright
Mar 14, 2014
Walter Bright
Mar 12, 2014
bearophile
Mar 12, 2014
Mike
Mar 13, 2014
Chris Williams
Mar 13, 2014
Walter Bright
Mar 13, 2014
Chris Williams
Mar 13, 2014
Manu
Mar 13, 2014
Manu
Mar 13, 2014
Walter Bright
Mar 13, 2014
Manu
Mar 13, 2014
Chris Williams
Mar 13, 2014
Nick Sabalausky
Mar 13, 2014
Walter Bright
Mar 13, 2014
Vladimir Panteleev
Mar 13, 2014
Walter Bright
Mar 13, 2014
Manu
Mar 13, 2014
Walter Bright
Mar 13, 2014
Dicebot
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Peter Alexander
Mar 13, 2014
Dicebot
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
bearophile
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Paulo Pinto
Mar 13, 2014
Daniele Vian
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Paolo Invernizzi
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Steve Teale
Mar 13, 2014
deadalnix
Mar 13, 2014
Walter Bright
Mar 13, 2014
H. S. Teoh
Mar 13, 2014
Sean Kelly
Mar 13, 2014
Walter Bright
Mar 13, 2014
Abdulhaq
Mar 13, 2014
Paolo Invernizzi
Mar 13, 2014
Walter Bright
Mar 14, 2014
Daniel Murphy
Mar 14, 2014
captaindet
Mar 14, 2014
deadalnix
Mar 14, 2014
Walter Bright
Mar 14, 2014
Manu
Mar 14, 2014
deadalnix
Mar 14, 2014
monarch_dodra
Mar 14, 2014
Daniel Kozák
Mar 14, 2014
Dicebot
Mar 14, 2014
Daniel Murphy
Mar 14, 2014
Regan Heath
Mar 14, 2014
Jakob Ovrum
Mar 14, 2014
John Colvin
Mar 14, 2014
Namespace
Mar 14, 2014
ponce
Mar 16, 2014
Timon Gehr
Mar 14, 2014
Dmitry Olshansky
Mar 14, 2014
Michel Fortin
Mar 14, 2014
Daniel Murphy
Mar 14, 2014
Daniel Kozák
Mar 14, 2014
deadalnix
Mar 15, 2014
Daniel Kozák
Mar 16, 2014
Rainer Schuetze
Mar 16, 2014
Manu
Mar 16, 2014
Rainer Schuetze
Mar 17, 2014
Marco Leise
Mar 17, 2014
Rainer Schuetze
Mar 18, 2014
Marco Leise
Mar 18, 2014
Rainer Schuetze
Mar 14, 2014
Jonathan M Davis
Mar 14, 2014
Manu
Mar 14, 2014
Walter Bright
Mar 14, 2014
Walter Bright
Mar 14, 2014
Regan Heath
Mar 18, 2014
Nick Sabalausky
Mar 18, 2014
deadalnix
Mar 18, 2014
H. S. Teoh
Mar 14, 2014
Manu
Mar 15, 2014
Marco Leise
Mar 14, 2014
ed
Mar 13, 2014
Daniele Vian
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Walter Bright
Mar 13, 2014
Don
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Dicebot
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Daniel Murphy
Mar 14, 2014
Don
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
John Colvin
Mar 13, 2014
Walter Bright
Mar 14, 2014
Don
Mar 14, 2014
bearophile
Mar 14, 2014
Walter Bright
Mar 13, 2014
Paolo Invernizzi
Mar 13, 2014
Xavier Bigand
Mar 13, 2014
Xavier Bigand
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Vladimir Panteleev
Mar 13, 2014
Meta
Mar 13, 2014
Vladimir Panteleev
Mar 13, 2014
H. S. Teoh
Mar 13, 2014
Joseph Cassman
Mar 13, 2014
Manu
Re: Final by default? [Decided: No]
Mar 13, 2014
John Colvin
Mar 13, 2014
monarch_dodra
Mar 13, 2014
Dmitry Olshansky
Mar 13, 2014
Dmitry Olshansky
Mar 13, 2014
Dmitry Olshansky
Mar 16, 2014
Andrej Mitrovic
Mar 13, 2014
monarch_dodra
Mar 13, 2014
deadalnix
Mar 13, 2014
Vladimir Panteleev
Mar 13, 2014
Dmitry Olshansky
Mar 13, 2014
monarch_dodra
Mar 16, 2014
bearophile
Mar 13, 2014
Ziad Hatahet
Mar 13, 2014
Mike
Mar 13, 2014
Paulo Pinto
Mar 13, 2014
Xavier Bigand
Mar 13, 2014
Sarath Kodali
Mar 13, 2014
Mike
Mar 13, 2014
Xavier Bigand
Mar 13, 2014
Nick Sabalausky
Mar 13, 2014
Walter Bright
Mar 13, 2014
Chris Williams
Mar 13, 2014
Walter Bright
Mar 13, 2014
Sarath Kodali
Mar 13, 2014
Manu
Mar 13, 2014
Sarath Kodali
Mar 13, 2014
Jacob Carlborg
Mar 13, 2014
deadalnix
Mar 13, 2014
Mike
Mar 13, 2014
Kapps
Mar 13, 2014
Walter Bright
Mar 13, 2014
H. S. Teoh
Mar 13, 2014
Joseph Cassman
Mar 13, 2014
Manu
Mar 13, 2014
Sarath Kodali
Mar 13, 2014
Walter Bright
Mar 13, 2014
Xavier Bigand
Mar 13, 2014
Kapps
Mar 13, 2014
Walter Bright
Mar 14, 2014
Manu
Mar 13, 2014
deadalnix
Mar 13, 2014
Sean Kelly
Mar 13, 2014
Kapps
Mar 13, 2014
Andrej Mitrovic
Mar 13, 2014
Don
Mar 13, 2014
Daniel Kozák
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Brian Rogoff
Mar 13, 2014
Daniel Murphy
Mar 13, 2014
Adam D. Ruppe
Mar 13, 2014
Jerry
Mar 13, 2014
Don
Mar 13, 2014
Walter Bright
Mar 13, 2014
Manu
Mar 14, 2014
Walter Bright
Mar 14, 2014
Manu
Mar 15, 2014
Walter Bright
Mar 15, 2014
Manu
Mar 15, 2014
deadalnix
Mar 15, 2014
Araq
Mar 15, 2014
Paulo Pinto
Mar 15, 2014
deadalnix
Mar 15, 2014
Araq
Mar 15, 2014
deadalnix
Mar 16, 2014
Araq
Mar 17, 2014
Manu
Mar 17, 2014
Marco Leise
Mar 18, 2014
Marco Leise
Mar 18, 2014
dude
Mar 18, 2014
bearophile
Mar 19, 2014
Marc Schütz
Mar 15, 2014
Walter Bright
Mar 15, 2014
Daniel Murphy
Mar 15, 2014
Manu
Mar 15, 2014
Daniel Murphy
Mar 15, 2014
develop32
Mar 15, 2014
bearophile
Mar 15, 2014
bearophile
Mar 15, 2014
Daniel Murphy
Mar 16, 2014
bearophile
Mar 15, 2014
monarch_dodra
Mar 15, 2014
Paulo Pinto
Mar 15, 2014
Walter Bright
Mar 15, 2014
Michel Fortin
Mar 16, 2014
Walter Bright
Mar 15, 2014
Kapps
Mar 15, 2014
Marco Leise
Mar 16, 2014
Jacob Carlborg
Mar 15, 2014
Anonymouse
Mar 13, 2014
Paulo Pinto
Mar 13, 2014
Jonathan M Davis
Mar 13, 2014
Martin Krejcirik
Mar 13, 2014
Andrea Fontana
Mar 13, 2014
Jonathan M Davis
Mar 13, 2014
Martin Krejcirik
Mar 13, 2014
Suliman
Mar 13, 2014
Rikki Cattermole
Mar 13, 2014
Namespace
Mar 13, 2014
Suliman
Mar 13, 2014
bearophile
Mar 13, 2014
Dejan Lekic
Mar 13, 2014
Iain Buclaw
Mar 13, 2014
ixid
Mar 14, 2014
Jesse Phillips
March 12, 2014
The argument for final by default, as eloquently expressed by Manu, is a good one. Even Andrei agrees with it (!).

The trouble, however, was illuminated most recently by the std.json regression that broke existing code. The breakage wasn't even intentional; it was a mistake. The user fix was also simple, just a tweak here and there to user code, and the compiler pointed out where each change needed to be made.

But we nearly lost a major client over it.

We're past the point where we can break everyone's code. It's going to cost us far, far more than we'll gain. (And you all know that if we could do massive do-overs, I'd get rid of put's auto-decode.)

Instead, one can write:

   class C { final: ... }

as a pattern, and everything in the class will be final. That leaves the "but what if I want a single virtual function?" There needs to be a way to locally turn off 'final'. Adding 'virtual' is one way to do that, but:

1. there are other attributes we might wish to turn off, like 'pure' and 'nothrow'.

2. it seems excessive to dedicate a keyword just for that.

So, there's the solution that has been proposed before:

   !final
   !pure
   !nothrow
   etc.
March 12, 2014
As long as it works like the opposite and can be labeled as they, I like it. It's a smart idea.
March 12, 2014
Would it mean that we would deprecate "nothrow" and replace it with "!throw"?
March 12, 2014
On 12.3.2014. 23:50, Walter Bright wrote:
> But we nearly lost a major client over it.

How do you nearly lose a client over a change in a development branch which was never a part of any release? (or am I mistaken?)

You seem to have a very demanding clients :)

On a side thought, maybe there should also be a stable branch?

March 12, 2014
On 12/03/14 23:50, Walter Bright wrote:
> The trouble, however, was illuminated most recently by the std.json regression
> that broke existing code. The breakage wasn't even intentional; it was a
> mistake. The user fix was also simple, just a tweak here and there to user code,
> and the compiler pointed out where each change needed to be made.
>
> But we nearly lost a major client over it.

I think for clarity it might be good to understand: was this near-loss because the client felt the language might have breaking changes in future, or because this breaking change had happened suddenly and with no warning?

A well-signposted and well-policed deprecation path is after all very different from what happened with std.json.

> So, there's the solution that has been proposed before:
>
>    !final
>    !pure
>    !nothrow
>    etc.

These sound nice to have for themselves, whatever is decided about final-by-default.
March 12, 2014
On 03/12/2014 03:50 PM, Walter Bright wrote:

> So, there's the solution that has been proposed before:
>
>     !final
>     !pure
>     !nothrow
>     etc.

The same issue came up with 'version' recently. It is possible to start a version block like this:

    version(something):

However, it is not possible to get to the "else" part of that version block using the above syntax. Would the same syntax work for version as well?

    version(something):
        // ...

    !version(something):
        // ...

Note: Yes, it is possible to use curly braces for the same effect:

    version(something) {
        // ...

    } else {
        // ...
    }

The question is whether it makes sense to be consistent for version (and debug, etc.) as well.

Ali

March 12, 2014
On 13/03/14 00:14, Ali Çehreli wrote:
> However, it is not possible to get to the "else" part of that version block
> using the above syntax. Would the same syntax work for version as well?
>
>      version(something):
>          // ...
>
>      !version(something):
>          // ...

In that context, doesn't it make more sense:

    version(!something):
        // ...

March 12, 2014
On 03/12/2014 04:34 PM, Joseph Rushton Wakeling wrote:
> On 13/03/14 00:14, Ali Çehreli wrote:
>> However, it is not possible to get to the "else" part of that version
>> block
>> using the above syntax. Would the same syntax work for version as well?
>>
>>      version(something):
>>          // ...
>>
>>      !version(something):
>>          // ...
>
> In that context, doesn't it make more sense:
>
>      version(!something):
>          // ...
>

Agreed.

Ali
March 12, 2014
On 3/12/2014 4:01 PM, luka8088 wrote:
> How do you nearly lose a client over a change in a development branch
> which was never a part of any release? (or am I mistaken?)

The change went into a release.


> You seem to have a very demanding clients :)

Many clients have invested a great deal into D. They're entitled to be demanding.
March 12, 2014
On 3/12/2014 4:14 PM, Ali Çehreli wrote:
> The same issue came up with 'version' recently. It is possible to start a
> version block like this:
>
>      version(something):
>
> However, it is not possible to get to the "else" part of that version block
> using the above syntax. Would the same syntax work for version as well?
>
>      version(something):
>          // ...
>
>      !version(something):
>          // ...

Yes, this has come up before, in various forms. The short answer is unequivocably "no". I've expounded on this extensively in this n.g., but don't have a reference handy.

« First   ‹ Prev
1 2 3 4 5 6 7 8 9 10 11