[SAoC 2021] Replace druntime Hooks with Templates: Milestone 2, Week 1

Teodor Dutu teodor.dutu at gmail.com
Fri Oct 22 22:18:22 UTC 2021


Hi,

The objectives of this milestone is to reach and implement a 
decision for the `_d_arrayctor` lowering and to translate the 
lowerings to `_d_arrayappendT` and `_d_arrayappendcTX` into 
templates.

This week, I picked up Dan's 
[work](https://github.com/dlang/dmd/pull/9982/) and started 
fixing the tests it fails. The issue i'm working on now is 
related to CTFE.
Dan's original work avoided rewriting any expressions to the CTFE 
stack in dinterpret.d, but this lead to compilation errors. I am 
currently working on adding CTFE support for lowerings to 
`_d_arrayappendcTX`, in a similar fashion to how Dan [handled 
`_d_arraysetlengthT`](https://github.com/dlang/dmd/blob/fe8cd9d09ef682a458ac6392042e660959e2778b/src/dmd/dinterpret.d#L4788-L4806).

In addition, my mentor Razvan has suggested a new approach for 
solving the issue caused by `_d_arrayctor`'s purity. I mentioned 
this issue earlier in [this 
post](https://forum.dlang.org/post/simesvkancmscrtsciwq@forum.dlang.org). This possible fix is to change `_d_arrayctor`'s definition so as to lower expressions such as:
```d
struct S {};
S[2] a;
immutable S[2] b = a;
```
to
```d
immutable S[2] b = _d_arrayctor!(immutable(S[2]))(a)
```
instead of
```d
immutable S[2] b;
_d_arrayctor(b, a);
```

This solution would keep `_d_arrayctor` pure while also making 
use of the value it returns. There are, however, still some 
points to talk clarify about this change.
For example, one is with regards to the length and overlap 
[checks](https://github.com/dlang/druntime/blob/6a3cf6608b7ec7e238c2484f5ef858c8afa725f3/src/core/internal/array/construction.d#L35-L49) that the current implementation is performing. We're still unsure how to proceed about those.

Next week, my mentors and I will explore this new approach to 
`_d_arrayctor` further and I'll proceed to implement it once all 
questions have been answered. In addition, I will try to finish 
adding CTFE support for `_d_arrayappendcTX` and then move on to 
fixing the other failing tests.

Thanks,\
Teodor



More information about the Digitalmars-d mailing list