Difference between revisions of "Language issues"
(→Null References) |
(Add #Virtual by default) |
||
Line 42: | Line 42: | ||
* [http://forum.dlang.org/post/vhtcmmnihixpmaqtakmg@forum.dlang.org September 2012 discussion] | * [http://forum.dlang.org/post/vhtcmmnihixpmaqtakmg@forum.dlang.org September 2012 discussion] | ||
* [http://d.puremagic.com/issues/show_bug.cgi?id=4595 Issue 4595 - <nowiki>[tdpl]</nowiki> Accessing non-static member of a null reference compiles] | * [http://d.puremagic.com/issues/show_bug.cgi?id=4595 Issue 4595 - <nowiki>[tdpl]</nowiki> Accessing non-static member of a null reference compiles] | ||
+ | |||
+ | == Virtual by default == | ||
+ | |||
+ | In D, methods are virtual by default. Although this approach does have benefits from the point of view of extensibility, it has been criticized that this default incurs a considerable performance impact and harms forward compatibility in user code, unless explicitly disabled everywhere as appropriate using the <tt>final</tt> keyword. | ||
+ | |||
+ | Although at one point Walter Bright intended to change the default (see [[DIP51]]), ultimately this proposal [http://forum.dlang.org/post/lfqoan$5qq$1@digitalmars.com has been rejected]. |
Revision as of 17:47, 13 March 2014
Like any programming language, D is not perfect. This page lists some potential problems that have been brought up and debated throughout the language's history. Fixing these is not straight-forward or may not justify breaking backwards-compatibility. As of the moment of writing this, there are no plans for a major revision of D which would allow such breaking changes, but this list may also be useful for other programming languages which wish to learn from D's experience.
See also: Language design discussions
Contents
Properties
Design of properties has been an oft-discussed topic. This language feature has evolved throughout D's history (e.g. the addition and removal of the -property switch. There are numerous DIPs with proposals on improving the design:
See also:
Unicode and ranges
D's ranges currently treat strings in a special way: they present them as a range of code points, thus implicitly performing UTF decoding. Algorithms that do not require working with decoded code points, and which would gain a performance advantage by treating the input as a range of code units (or an array of code units), must incorporate D strings as a special case. This approach complicates the implementation by some degree, and only solves a certain subset of problems for a subset of written languages.
See also:
Signed/unsigned comparisons
(What's the status of this? Issue 259 is open and has an open pull request.)
Null References
{Please add summary}
See also:
- February 2014 discussion
- September 2012 discussion
- Issue 4595 - [tdpl] Accessing non-static member of a null reference compiles
Virtual by default
In D, methods are virtual by default. Although this approach does have benefits from the point of view of extensibility, it has been criticized that this default incurs a considerable performance impact and harms forward compatibility in user code, unless explicitly disabled everywhere as appropriate using the final keyword.
Although at one point Walter Bright intended to change the default (see DIP51), ultimately this proposal has been rejected.