> Это в принципе невозможно сделать хорошо на уровне C API Надо же, мне казалось, это закрывается статическими функциями-стабами да передачей всего контекста отдельным параметром с типом void*, а оказывется, это невозможно.
Единственный способ - это таки руками собрать то, что захватывается и руками отследить, что все владение правильное. Примерно так оно и делается в С++.
> И что делать если в этом "всем контексте" ссылки, которые контролируются GC или даже ресурсы? Стабильная ссылка / рефкаунт +1 на время использования. С возможностью освободить.
> А как вы изолировать "весь контекст" собираетесь? Ась? Мы о передаче ссылок на функцию из какого мира в какой говорим? Из managed runtime в C, дабы вызвать на стороне сей управлемую функцию? А что именно там изолировать надо?
Никакой реф-каунт не будет работать в общем случае, если передается лямбда. Она может менять что-то в своем окружении. Мы про взаимодействие на уровне C API с чем бы то ни было высокоуровневым. Понятно, что если C API с C взаимодействует, то все ОК