How can we make it easier to experiment with the compiler?

Basile B. b2.temp at gmx.com
Thu May 27 09:05:49 UTC 2021


On Thursday, 27 May 2021 at 08:50:32 UTC, Basile B. wrote:
> On Thursday, 27 May 2021 at 08:41:49 UTC, Walter Bright wrote:
>> On 5/27/2021 12:14 AM, Mathias LANG wrote:
>>> Now to talk about what can be done to improve the DMD 
>>> codebase, it's fairly obvious: ELIMINATE ALL CASTS. But not 
>>> by replacing `cast(XXX)e` with `e.isXXX()`, but by actually 
>>> using proper encapsulation.
>>> 
>>> What I mean is that instead of switching on types, like this:
>>> ```D
>>> if (auto tf = t.isTypeFunction())
>>>      (cast(FunctionDeclaration)t.sym).something();
>>> else if (auto td = t.isTypeDelegate())
>>> (cast(FunctionDeclaration)(cast(TypeFunction)t).sym).something();
>>> else
>>>      // Something else
>>> ```
>>
>> The isXXX() functions also make for safe casting.
>
> And this is actually the only way to dyncast cast nodes as DMD 
> AST is extern(C++)... But TBH I think that all the isXXX family 
> of functions should be free functions, not members funcs. All 
> these isXXX calls are virtuals but they dont need to (although 
> often devirtualized).

Other advantage of module scope isXXX functions is that the base 
Expression node would not need to know about all the derived. We 
would have a real astbase module with just Type, Statement, 
DSymbol, Expression. The isXXXX would be in the module that 
declare the XXXX class.


More information about the Digitalmars-d mailing list