전에 러스트는 매니지드 언어라고 주장하는 분이 깃헙갤에 계시길래 바로 뒤로가기 눌렀엇는데
오늘 떡밥을 또 보고 생각해보니 헷갈리기 시작함
기존에는 데이터를 힙할당 할지 스택할당 할지 프로그래머 맘대로 할 수 있다
정도로 생각하고 있었는데 이것도 잘 생각해보니까 엄밀한 정의가 아닌 것 같음
조금 더 생각해보니 컴파일 했을때 결과가 기계어로 나오냐 중간 다른 코드로 나오냐 차이?
이것도 llvm 이후로는 안통하는 정의 같다
golang이 gc는 있으면서 vm은 없이 기계어로 바이너리를 뱉어내니 gc vm 기준으로도 안될 것 같음
그래서 검색해보니 애초에 managed code 라는 개념 자체가 마소가 닷넷 밀면서 나온 말
닷넷 CLR 위에서 돌아가는걸 마소가 매니지드 코드라고 표현했고 한국에서는 왠지 managed langauge가 쓰이고 있다
마소 왈
Code that executes under the control of the runtime is called managed code. Conversely, code that runs outside the runtime is called unmanaged code.
결론
기술적 의미가 있지만 애초에 엄밀한 정의라고 하긴 애매하고 마소가 만든 마켓팅 용어에 더 가까운 것 같으니 깊게 생각할 필요 없는 주제다
GC를 trigger하는게 아니라 원하는 객체의 메모리 해제가 가능하면 unmanaged 아닐까
매니지드 그 자체인 c#도 강제도 객체 메모리 해제해버릴 수 있으니 unmanaged "langauge" 라는 개념은 애초에 말이 안되고 unmanged code 가 맞는 표현 같음
그냥 궁금해서 물어보는간데 C#은 원하는 시점에 원하는 객체만 해제할 수 있음? 안써봐서 모르겠네
매모리 관리해주면 매니지드 개발자가하면 언매니지드
https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/unmanaged
위에
댓글에서 C# 에서도 강제로 메모리 해제가능하다는거 이거 말하는 건가
그거 unsafe 키워드 써서 포인터 쓸때 이야기 같음
gc가 있냐없냐