Rust 언어와의 첫만남


우연찮게 러스트(Rust)라는 프로그래밍 언어를 접하고 난 뒤, 마치 무언가에 홀린듯 이것 저것 찾아보다가 지금은 가이드북을 따라가며 이것저것 예제도 실행해보고 이 언어가 가지고 있는 철학은 무엇인지 하나씩 배우고 있다. 기본적인 문법은 뭐 크게 괴상하다거나 하진 않은데, 일단 파이썬(Python)과 달리 시스템 프로그래밍 언어라서 역시나 타입에 대해 강경하고 컴파일 에러가 굉장히 빈번하게 난다. (에러는 뭐 내가 코딩을 못하는 탓…이지만 근데 너무 많이 나는걸???)

시스템 프로그래밍 언어라고 하면 C와 C++이 바이블이라 할 수 있는데, C에서는 포인터, C++에서는 템플릿이 난적이라고 한다면 러스트에서는 단연 소유권 개념이 강적이라 할 수 있다. 모든 값은 변수의 이름에 귀속되고, 그 이름은 자기가 가진 값에 대해서 소유권을 가진다. 이 소유권은 동시점에 오직 하나만 존재한다. 또한 소유자(변수의 이름)가 스코프 밖을 벗어나는 순간 자동으로 메모리에서 “drop” 된다. 이런 개념은 C++에서도 있었다고 하는데 솔직히 강타입 언어에 익숙하지 않은 나로서는 정말이지 생소하다.

또한 안쓰는 메모리를 자동으로 정리해주는 가비지 콜렉터(Garbage Collector)가 없다보니 프로그래머가 스스로 메모리 관리를 해야 하는데, C/C++에서와는 달리 앞서 얘기한 소유권 개념을 이해해야 어느 시점에 메모리가 해제되는지 등을 정확히 알고 관리할 수 있어서 보다 생각을 많이 하게 만든다. 다행히 컴파일러의 피드백은 친절하고 정확한 편이라 나같은 코딩 잼민이도 컴파일 에러를 무서워하지 않게 도와준다.

사실 무엇보다 당황스러운 건, 러스트에서 변수는 기본적으로 불변(immutable)이라는 점이다. a 라는 변수에 10을 넣었다가 “code” 라는 문자열을 넣는 건 당연히 안될거라 생각했지만, 10을 넣었다가 20을 넣는게 안될줄은 몰랐다. 그냥 let a = 10; 이라고 선언하면 그 순간 a 는 죽을때까지 10이라는 값을 소유하게 된다. 이 러스트라는 언어를 설계한 분이 안정성을 위해 얼마나 고심했는지 알 수 있는 대목이었다. (물론 let mut a = 10; 으로 하면 추후 a = 20; 으로 값 변경은 가능하다. 하지만 변수의 가변성에 너무 의존하는 걸 이 언어는 권장하지 않는 듯하다)

인생은 짧고 나는 파이썬이 필요했다. 지금도 회사 업무의 상당 부분을 파이썬으로 하고 있고 아마 앞으로도 그럴 것이다. 하지만 이 러스트는 그 짧은 인생에서 정말 배워볼만한 “현대적인” 시스템 프로그래밍 언어라는 생각이 든다. 프로그래머가 제대로 코드를 작성하고 의도한대로 동작 시킬 수 있도록 마치 엄격한 스승이 곁에서 나의 허접한 코드를 바로잡아주는 느낌이다. 거기다 성능도 포기하지 않았다. 파이썬은 일단 동작하기까지 시간은 얼마 걸리지 않지만, 그 이후부터는 시간이 많이 필요하다. 그동안 처리 속도가 고민된다면 C/C++ 외엔 사실 대안이 없었는데, 이제 나에겐 러스트라는 대안이 생겼다.

글을 마치며 (내 글과는 달리) 읽어볼만한 다른 글을 추천하고자 한다. 우연찮게 이 글을 접하고 러스트라는 언어에 나처럼 조금이라도 호기심이 생겼다면, 부디 읽어보시길 바란다.


답글 남기기

이메일 주소는 공개되지 않습니다.