What features of D you would not miss?
Quirin Schroll
qs.il.paperinik at gmail.com
Tue Sep 20 16:05:09 UTC 2022
On Saturday, 17 September 2022 at 19:58:24 UTC, 0xEAB wrote:
> On Thursday, 15 September 2022 at 08:40:22 UTC, Dukc wrote:
>> What features could be removed from D if it were up to you?
>
> The (already deprecated) «body» keyword.
> BUT: only because it’s already been superseded by «do»
>
>
>> Please consider the breakage that would result from the removal
>
> Legacy code (that doesn’t compile without warnings anymore).
> Also it’s one step towards more ambiguity (because «do» got
> several meanings now).
It’s no problem whatsoever when a keyword has multiple meanings
if those meanings are reasonably distinct. Best example is `in`:
It serves as a storage class (`in` parameter), it serves as a
precondition contract, and it serves as an operator (in tango
with `!in`).
Sometimes, people complain that `static` is too overloaded. It
means “needs no context” or “runs at compile-time” or “(variable
value) survives through calls”.
I’ve gone through all the keywords. Apart from special tokens and
fundamental types (except `void`), there are 36 with a unique
semantics and 40 with multiple semantics. Note that those with
“unique” are those for which I don’t know of multiple. It could
be that I missed some.
The full list:
| Keyword | Uses | Notes
|
|-----------------------|--------------:|-------------------------------------------------------------------------------------------------------------------------------|
| `abstract` | 2 | abstract method,
abstract class
|
| `alias` | 2 | alias,
alias – this
|
| `align` | 1 |
|
| `asm` | 1 |
|
| `assert` | 2 | assert,
static assert
|
| `auto` | 2 | storage class,
auto ref
|
| `body` | 0 |
|
| `bool` | type |
|
| `break` | 1 |
|
| `byte` | type |
|
| `case` | 2 | switch – case,
goto case
|
| `cast` | 1 |
|
| `catch` | 1 |
|
| `cdouble` | type |
|
| `cent` | type |
|
| `cfloat` | type |
|
| `char` | type |
|
| `class` | 2 | class declaration,
anonymous class object
|
| `const` | 2 | type ctor,
storage class
|
| `continue` | 1 |
|
| `creal` | type |
|
| `dchar` | type |
|
| `debug` | 2 | debug (v),
debug = v
|
| `default` | 2 | switch – default,
goto default;
|
| `delegate` | 2 | lambda introducer,
function ptr type
|
| `delete` | 0 |
|
| `deprecated` | 1 |
|
| `do` | 2 | do – while,
function body introducer
|
| `double` | type |
|
| `else` | ≥ 4 | if – else,
static if – else, version – else, debug –
else |
| `enum` | 2 | enumeration types,
enum values
|
| `export` | 1 |
|
| `extern` | 1 |
|
| `false` | 1 |
|
| `final` | 2 | final class,
final method
|
| `finally` | 1 |
|
| `float` | type |
|
| `for` | 1 |
|
| `foreach` | 2 | statement,
static foreach
|
| `foreach_reverse` | 2 | statement,
static foreach_reverse
|
| `function` | 2 | lambda introducer,
function ptr type
|
| `goto` | 2 | goto label,
goto case/default
|
| `idouble` | type |
|
| `if` | 3 | statement,
static if, template constraint
|
| `ifloat` | type |
|
| `immutable` | 2 | type ctor,
storage class
|
| `import` | 1 |
|
| `in` | 3 | storage class,
contract, operator
|
| `inout` | 2 | type ctor,
storage class
|
| `int` | type |
|
| `interface` | 2 | interface type
declaration, is(T ==interface)
|
| `invariant` | 1 |
|
| `ireal` | type |
|
| `is` | 2 | is operator,
is expression
|
| `lazy` | 1 |
|
| `long` | type |
|
| `macro` | 0 |
|
| `mixin` | 2 | string mixin,
mixin template
|
| `module` | 1 |
|
| `new` | 1 |
|
| `nothrow` | 1 |
|
| `null` | 1 |
|
| `out` | 2 | storage class,
contract
|
| `override` | 1 |
|
| `package` | 2 | package declaration,
visibility attribute
|
| `pragma` | 1 |
|
| `private` | 1 |
|
| `protected` | 1 |
|
| `public` | 1 |
|
| `pure` | 1 |
|
| `real` | type |
|
| `ref` | 2 | storage class,
auto ref
|
| `return` | 2 | statement,
storage class
|
| `scope` | 2 | storage class,
scope guards
|
| `shared` | 2 | type ctor,
storage class
|
| `short` | type |
|
| `static` | ≥ 5 | static variable,
static if, static foreach, inner
type/function w/o context, static assert |
| `struct` | 3 | struct type
declaration, is(T == struct), unnamed struct
components |
| `super` | 2 | super subobject,
ctor call
|
| `switch` | 1 |
|
| `synchronized` | 1 |
|
| `template` | 2 | template,
mixin template
|
| `this` | 3 | this object,
typeof(this), forwarding ctor
|
| `throw` | 2 | throw expression,
attribute
|
| `true` | 1 |
|
| `try` | 1 |
|
| `typeid` | 1 |
|
| `typeof` | 1 |
|
| `ubyte` | type |
|
| `ucent` | type |
|
| `uint` | type |
|
| `ulong` | type |
|
| `union` | 3 | union type declaration,
is(T == union), unnamed union components
|
| `unittest` | 2 | unit tests,
version (unittest)
|
| `ushort` | type |
|
| `version` | 2 | version (v),
version = v
|
| `void` | 2 | type,
void init
|
| `wchar` | type |
|
| `while` | 1 | while loop,
do – while loop
|
| `with` | 1 |
|
| `__FILE__` | special token |
|
| `__FILE_FULL_PATH__` | special token |
|
| `__MODULE__` | special token |
|
| `__LINE__` | special token |
|
| `__FUNCTION__` | special token |
|
| `__PRETTY_FUNCTION__` | special token |
|
| `__gshared` | 1 |
|
| `__traits` | 1 |
|
| `__vector` | 1 |
|
| `__parameters` | 1 |
|
(Anyone here is free to improve on this list. Use it for whatever
you want.)
More information about the Digitalmars-d
mailing list