들어가며...

Rust언어를 들어 보기는 했지만, 그나마 최근에 Linux 6.1에서 채용하기 시작한다는 기사[1]를 보고 다시 보기 시작했다. 최근에는 새롭게 시작한 프로젝트와 관련한 Open Source가 Rust를 채용하고 있어서 더 관심을 가지게 되었다. 최근에 살펴본 TIOBE Index[2]에서 보면 20위에 진입했다. 올해 말, 내년까지는 조금 씩은 보게 될 것이라 생각되니 익숙해 져보자는 생각에 이 것 저 것 뒤져 보다가, 바이블이라고 하는 The book[3]도 찾아 보고 읽어 보았다. 총 20장까지 있는데 현재는 10장 정도까지 어렵게 읽은 상태이다. 부족하지만, 기억나는 것을 정리하고 우선 멈추려고 한다. 이 후에, 정말 필요할 때 더 읽어 보려고 한다.

 

변수, 스코프 그리고 소유 

Hello World 프로그램을 보고 몇 가지 예제를 보고 가장 먼저 눈에 띄는 것은 mutable, immutable 개념이다. Rust에서는 변수를 만들면 값의 변경이 불가능한 immutable이 된다. 상수(constant)와는 다르다. 다시 같은 이름으로 선언할 수 있기 때문이다. 변경하기 위해서는 let mut x = 1;과 같이 mutable로 만들어야 한다. 쉐도우잉이라는 개념도 있는데 이는 Python등과 유사한 것 같다. 이는 같은 이름의 변수를 다시 선언해서 사용하는 것이다. 즉, let x = 1; let x = x +1;과 같이 사용한다는 것이다.


그 다음에 새로웠던 것이 소유권(Ownership)이다. Rust가 메모리 관리에 우수하다고 해서 Java 처럼 가비지 컬렉터가 있는가 했다. 하지만, 다른 방법으로 이 부분을 강화 했는데 그 중 하나가 소유권이라는 것이다. 이 것이 C나 다른 언어에서 알고 있는 스코프(Scope)과 관련이 있다. 즉, 변수의 Visibility와 관련된 것으로 같은 레벨이나 그 하위에서 보이는 것이라 알고 있을 것이다. 그런데, Rust에서는 Heap에 관리하는 변수의 경우 얕은 복사(Shallow Copy)의 경우는 같은 스코프라고 하더라도 유효하지 않을 수 있다.

 

또한 함수의 인자로 전달된 변수의 인자의 소유권이 넘어가 다시 복귀하게 되더라도 유효하지 않을 수 있다. 좀 더 상세히 이야기 하면, 메소드가 인자를 단순히 읽기만 하여 함수 처리 후 복귀했을 때 유효하기도 하다 (&self). 혹은 함수 내부에서 변형시키기도 하다(&mut self). 여전히 복귀 후에 사용이 가능하다. 아니면 소유권을 호출하는 함수에 넘겨 함수가 소비하고 함수 호출 이후에는 유효하지 않게 하기도 (self)한다. 즉, 인자를 어떻게 사용할지 결정론적으로 정하게 되는 것이다. 

 

Android와 Rust

Google도 Rust를 지원하는 큰 기업 중에 하나이고, Android에도 적용한다고 한다[4]. 이 부분도 관심과 시간을 가지고 살펴 볼 부분이다. Android에 Sandboxing이 도입되고 있음에도 메모리 관련 관리에 어려움이 있는 것[5]으로 보인다. 2019년도 부터 채용되고 있는 것으로 보아 조금이라도 적용되는 부분이 증가하지 않을까 생각된다. 

 

정리하며...

여전히 성능적 측면의 우려와 학습 곡선이 가파르다는 비판도 있는 것으로 보이지만, 2022년도에 Linux 커널에 도입되는 것을 보았을 때에는 추이를 계속 지켜봐야할 부분으로 보인다. 한국에서도 채용이 되고 있고 사용자 모임[5]이 있다. Discord도 상당히 활발해 보인다.

 

참고 내용

[1] Linus Torvalds: Rust will go into Linux 6.1, https://www.zdnet.com/article/linus-torvalds-rust-will-go-into-linux-6-1/?taid=6329bce71c8e3300010028ae&utm_campaign=trueAnthem%3A%20Trending%20Content&utm_medium=trueAnthem&utm_source=twitter

[2] TIOBE Index for November 2022, https://www.tiobe.com/tiobe-index/

[3] 러스트 공식 안내서 "The Rust Programming Language", https://rinthel.github.io/rust-lang-book-ko/ch00-00-introduction.html

[4] Android Rust 소개, https://source.android.com/docs/setup/build/rust/building-rust-modules/overview?hl=ko 

[5] Rust in Android Platform, https://security.googleblog.com/2021/04/rust-in-android-platform.html

[6] 한국 러스트 사용자 그룹, https://rust-kr.org/

 

+ Recent posts