# [SAoC 2021] Replace druntime Hooks with Templates: Milestone 3, Week 3

Teodor Dutu teodor.dutu at gmail.com
Fri Dec 3 21:34:09 UTC 2021


Hi,

This week, I concluded that the best approach for `_d_arrayctor`, 
based on the performance calculated in [this 
post](https://forum.dlang.org/thread/hajlsppmugslhinluzos@forum.dlang.org) is to change its purity from strong to weak by adding a third, unused, pointer-type parameter. This new signature was implemented in [this PR](https://github.com/dlang/druntime/pull/3587) and the PR for lowering to `_d_arrayctor` is waiting to be merged. So it seems the `_d_arrayctor` saga is over for now.

Other than this, I started working on `_d_delstruct`, which I 
converted to a template in druntime 
[here](https://github.com/dlang/druntime/pull/3639). I was also 
able to update its lowering in the compiler. The only 
inconvenience now is that the call to `_d_delstruct` is also 
subject to semantic analysis, as opposed to the old hook, which 
was introduced in a later phase, by e2ir.d. Because the new hook 
is analysed semantically, some compiler tests in 
`fail_compilation/` also output `@safe`-ty, purity and `nogc` 
errors related to `_d_delstruct`, and not just those coming from 
the dtor that's being called by `delete`. I am currently working 
on a way to filter out the errors that mention `_d_delstruct`, as 
lowerings should be transparent to programmers.

Also this week I spent some time fixing the multiple calls to 
`_d_arrayappendcTX` that were created by the compiler for tests 
such as `(a ~= 1) ~= 2`. The reason is that the lowering of `a ~= 
x` is actually this:
```d
__ctfe ? a ~= x : _d_arrayappendcTX(a, 1), a[$ - 1] = x, a;
```
Because `a` is used literally, as an expression, in case it's 
something more complex, such as, in this case, `a ~= 1`, the 
concatenation is made each time `a` appears in the second term of 
the conditional statement. I am now trying to solve the error by 
saving the result of `a` in a temporary variable, in case it's 
not a regular array.

Thanks,
Teodor


More information about the Digitalmars-d mailing list