Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
March 20, 2015 final methods by default | ||||
---|---|---|---|---|
| ||||
Why aren't methods of class final by default? |
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote:
> Why aren't methods of class final by default?
Because of a design choice to maximise usage flexibility that is questionable but not likely to change.
|
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote: > Why aren't methods of class final by default? See: http://forum.dlang.org/thread/lfqoan$5qq$1@digitalmars.com |
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
Posted in reply to ref2401 | On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote: > Why aren't methods of class final by default? history use final class, it should devirtualize all methods. see: https://github.com/D-Programming-Language/dmd/pull/4427 |
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
Posted in reply to weaselcat | On Fri, 20 Mar 2015 22:11:51 +0000 weaselcat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote: > > Why aren't methods of class final by default? > > history > > use final class, it should devirtualize all methods. > see: https://github.com/D-Programming-Language/dmd/pull/4427 Yes, but you can not extend final class. Ok you can still use UFCS but it is not elegand solution. |
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
On Friday, March 20, 2015 23:53:14 Daniel Kozak via Digitalmars-d-learn wrote:
>
> On Fri, 20 Mar 2015 22:11:51 +0000
> weaselcat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
>
> > On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote:
> > > Why aren't methods of class final by default?
> >
> > history
> >
> > use final class, it should devirtualize all methods.
> > see: https://github.com/D-Programming-Language/dmd/pull/4427
>
> Yes, but you can not extend final class. Ok you can still use UFCS but it is not elegand solution.
Then you can just do
class Foo
{
final:
// methods...
}
or
class Foo
{
final
{
// methods...
}
}
And even if you couldn't do that, you could always mark each function with final individually.
Yes. final should probably be the default, but unfortunately, that's not the choice that was made early on, and it was decided later that the change wasn't worth the breakage. But it can be worked around easily enough.
- Jonathan M Davis
|
March 20, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
On Fri, 20 Mar 2015 16:27:04 -0700 Jonathan M Davis via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > On Friday, March 20, 2015 23:53:14 Daniel Kozak via Digitalmars-d-learn wrote: > > > > On Fri, 20 Mar 2015 22:11:51 +0000 > > weaselcat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > > > > > On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote: > > > > Why aren't methods of class final by default? > > > > > > history > > > > > > use final class, it should devirtualize all methods. > > > see: https://github.com/D-Programming-Language/dmd/pull/4427 > > > > Yes, but you can not extend final class. Ok you can still use UFCS but it is not elegand solution. > > Then you can just do > > class Foo > { > final: > // methods... > } > > or > > class Foo > { > final > { > // methods... > } > } > > And even if you couldn't do that, you could always mark each function with final individually. > Yes I know that and use it. Not often because I use struct and templates so I need to marks methods as final occasionally ;-) |
March 21, 2015 Re: final methods by default | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozak | On Friday, 20 March 2015 at 23:47:37 UTC, Daniel Kozak wrote: > > On Fri, 20 Mar 2015 16:27:04 -0700 > Jonathan M Davis via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> > wrote: > >> On Friday, March 20, 2015 23:53:14 Daniel Kozak via Digitalmars-d-learn wrote: >> > >> > On Fri, 20 Mar 2015 22:11:51 +0000 >> > weaselcat via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: >> > >> > > On Friday, 20 March 2015 at 14:25:22 UTC, ref2401 wrote: >> > > > Why aren't methods of class final by default? >> > > >> > > history >> > > >> > > use final class, it should devirtualize all methods. >> > > see: https://github.com/D-Programming-Language/dmd/pull/4427 >> > >> > Yes, but you can not extend final class. Ok you can still use UFCS but it >> > is not elegand solution. >> >> Then you can just do >> >> class Foo >> { >> final: >> // methods... >> } yes only if I want all methods be virtual and without any other members: class C { final: string field; } does not work. >> or >> >> class Foo >> { >> final >> { >> // methods... >> } >> } Not usefull, I rarely have more than a few final function following one by one. >> >> And even if you couldn't do that, you could always mark each function with >> final individually. >> Definitely the best way (in my cases). |
Copyright © 1999-2021 by the D Language Foundation