Add some predefined descriptors, values, and a copying collector (adapted from the ABC interpreter)
The native run time system currently used for Clean is written in Assembly. The idea here is to take the run time system from the ABC interpreter, which is written in C, and cross-compile it to native code and Wasm, to avoid duplicating work.
The code mainly comes from:
- https://gitlab.com/clean-and-itasks/abc-interpreter/-/blob/main/src/gc.c
- https://gitlab.com/clean-and-itasks/abc-interpreter/-/blob/main/src/interpret.c
There are outstanding issues with the interpreter RTS, with arrays:
- Packed arrays (
{32# 1,2,3}
), with typesINT32
/REAL32
and descriptors_ARRAY_INT32_
/_ARRAY_REAL32_
, are not supported (abc-interpreter#89) - There may be bugs in the handling of arrays by the GC (abc-interpreter#130)
In this MR, garbage collection is added to the native RTS but not to Wasm: !17 (comment 2448414249)
Edited by Camil Staps