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