explicitly-manage — 가비지 컬렉터의 손을 벗어나게 하기
explicitly-manage — 가비지 컬렉터의 손을 벗어나게 하기
NativeCall로 C 라이브러리를 부르다 보면, Raku 런타임이 만든 문자열을 C 쪽에 넘기고 싶은 경우가 있어요. 그런데 가비지 컬렉터(GC)가 그 문자열을 회수해 버리면 C 쪽에서는 이미 없어진 메모리를 가리키게 되겠죠. explicitly-manage는 이런 상황에서 메모리를 직접 관리하겠다고 선언하는 함수예요.
본문
In Native calling interface
sub explicitly-manage($str) is export(:DEFAULT)
주어진 Str에 대한 객체를 돌려줘요. 이 함수가 돌려준 문자열을 NativeCall 서브루틴에 넘기면, 런타임의 가비지 컬렉터가 그 문자열을 해제하지 않아요. 즉 생명주기를 내가 직접 관리하겠다는 뜻이에요. C 쪽 라이브러리가 그 문자열을 계속 들고 있어야 할 때 유용하죠.