Здравствуйте, D. Mon, Вы писали:
DM>Я не про DOM. Я про сложность нормально компилировать в wasm нативные языки с GC, т.к. нельзя сканировать стек.
Это нейтивный стек вызовов нельзя сканировать, а стек данных можно:
For this C function:
void foo() {
int x;
bar(&x);
}
The asm.js code looks like this:
function _foo() {
var $x = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abort();
$x = sp;
_bar($x);
STACKTOP = sp;return;
}
В любом случае, в чистом нейтиве бывают только пессимистичные GC, т.е. если в стеке лежат только данные — это даже еще лучше.
А если брать что-то типа .Net/Java с точным GC, то для такого GC в любом случае надо размечать фреймы стека и связывать их с метаинформацией, поэтому, отсутствие доступа к адресам возвратов мешать не должно — указатель на текущий фрейм можно протягивать как неявный аргумент любого вызова.