Unmanaged Language
October 03, 2024
최근에 Rust
를 공부하면서 GC 와 managend, unmanaged 에 대해 조금 찾아봤다.
이 두 분류를 구분할때 GC (garbage collector) 의 유무에 따라 managed 와 unmanaged 를 구분하기도 하고, 해당 언어가 네이티브로 컴파일 되는지, 바이트코드로 컴파일 되는지에 대해서도 분류 하기도 한다.
이렇게 분류하면 Java
, C#
, Python
, Js
등은 managed 가 되고, C
, C++
같이 개발자에게
메모리에 대한 모든 제어권을 주는 언어는 unmanaged 라고 볼수 있다.
어 Go
같은 경우에는 GC 가 있던데요? 하지만 네이티브로 컴파일도 된다.
Go
는 그럼 managed 인가?
개인적으로 managed 와 unmanaged 의 개념을 GC 의 존재 유무로 구분하기로 생각중이라
(Java
나 C#
도 네이티브 코드로 컴파일 할 수 있다.)
GO
도 managed 라고 생각하고 싶다.
그럼 Rust
는 어떨까
Rust
는 Ownership
이라는 독특한 방법을 통해 메모리를 관리한다.
이게 참 신기한게 개발자가 직접 명시적으로 메모리를 할당하고 해제하는 것 보다
Rust
가 나에게 자동으로 메모리를 관리할 수 있도록 유도한다고 할까?
실제로 Rust
에서 메모리 할당을 해제하는 drop
도 존재하지만
거의 쓰이질 않는다. (아마도?)
그럼 unmanaged 로 분류할 수 있나? 그런 것 같다.
이 Ownership
의 규칙을 따라 개발하다보면 자연적으로 메모리 관리를 생각하며
개발하게 된다.
Rust
컴파일러가 정말 끝내주기는 한다.
GC 를 탑재한다는 것은 성능과 생산성의 트레이드오프가 있지만, (Go?)
최근에는 뭐 하드웨어 사양들이 워낙 좋아서
게임이나 임베디드 같이 하드웨어 성능을 극한으로 최적화 시켜야 하는 경우가 아니라면
꼭 unmanaged 를 사용해야 할 이유가 많이 줄었다고 생각한다.
그럼에도 unmanaged language
는 공돌이라면 꼭 공부해야 하는 분야라고 생각한다.
우리 친구 전자계산기의 OS 나 하드웨어의 동작방식에 더 깊은 이해를 가져다 주고,
개발할때 생각하는 방향이 달라진다.
개인적으로 Rust
에서 가져오고 싶은 개념들이 많다.
추천하는 언어는 Rust
이긴 하지만, unmanaged 를 처음 접한다면 러닝커브가 조금 클 것이다.
추가로 예전에 글에서 적었지만 현재 Js
의 전성기가 다시 오고 있는 시점에서
그 뒤에는 Rust
가 큰 역할을 하고 있다.
흥미가 가는 부분이다.
코드 하나 없는 재미없는 일기는 여기까지 적고
다음 글은 Rust
로 만든 서버와 웹서비스 예제를 가지고 살펴 보자.아마도.