티스토리 뷰

rewritten in 2023.12.14

좋아요 1위의 언어, 안전한 거 말고 다른 건?

Rust 진짜 좋아요. 정말 좋습니다.

스택오버플로우에서 5년 연속으로 가장 사랑받는 언어 1위가 되기도 하고, 업계 도입률과 순위도 점차 올라가고 있습니다. 아직은 살짝은 이르지만요.

저는 매번 Rust가 좋다고 얘기하고 싶어합니다. 하지만 많은 글들이 "메모리 안전성"에 중점을 두고 설명하고 있습니다.

하지만 그게 전부는 아닙니다. 그래서 저는 다른 부분에 우선 초점을 맞춰서 설명하고 싶었습니다.

C++에서 할만한 실수들이 방지된다

Rust를 사용하면 C++에서 할만한 실수들의 많은 수를 미연에 방지할 수 있습니다. 그건 당연한 겁니다. 입 아플 정도로 많은 곳에서 설명하고 있죠. 저는 굳이 설명하지 않겠습니다.

제로 코스트 추상화로 높은 생산성과 성능을 동시에

Rust는 매우 추상화 수준이 높으며, 필요하면 낮은 추상화 수준에서도 작업할 수 있습니다. 추상화 수준이 높다는 건 생산성이 높다는 것을 뜻합니다.

추상화 수준을 높여서 작업하면 느려지지 않냐구요? 아뇨, 몇몇 경우에는 추상화 수준이 더 높은 게 더 빠릅니다. 배열을 이터레이터로 순회했는데 for문보다 빠른 언어는 Rust가 거의 유일할 겁니다. Rust의 컴파일러는 LLVM 툴체인을 쓰는데 LLVM의 최적화 때문에 for문보다 iterator가 더 빠를 수 있습니다.

이 영역이 C++이 해결하려고 했던 영역이며, 개발자는 Rust가 안전을 위해 요구하는 규칙만 잘 지킨다면 대체로 공짜로 추상화를 달성할 수 있습니다. 날먹 최고!!!

익숙한 개념인 클로저나 이터레이터를 사용할수도 있고, 함수형 언어에 있던 Maybe 같은 개념이 녹아있는 뛰어난 Enum을 사용할수도 있습니다. 상속 대신 Trait이 있어서, 다이아몬드를 고민하는 대신에 구조체에 내 함수를 덧붙일 고민만 하면 됩니다. 경우에 따라 다르겠지만 대부분이 제로 코스트이므로 열심히 추상화한다고 해서 성능이 떨어질 걱정은 좀 덜 해도 됩니다.

Go는 비교대상이 아니다

Go는 네트워크 프로그래밍에 강하다고 알려져있죠. Go에는 GC가 있습니다. Garbage Collector. 메모리 할당을 관리해주는 청소부죠. 이것 때문에 한 끗 차이의 성능이 중요한 곳에서는 Go를 쓰기 어렵습니다. 이것도 원래 C++이 사용되던 영역이죠. 메모리 관리를 감당할 수 없다면 Go를 쓰는 게 낫습니다.

라이브러리를 가져다 쓰기 편하다

Node.js 나 Python, Go 같은 다른 최신 언어들을 써보신 분들이라면 패키지 매니저에 익숙하실 겁니다.

소스코드 복사 붙여넣기는 이제 안녕. Cargo.toml 에 버전이나 Git URL 등을 명시하면 cargo가 crates.io 등등에서 소스코드를 가져와서 빌드까지 해줍니다.

어려워도, 컴파일러가 도와주니까.

C++에서 메모리 때문에 실수할만한 요소들이 Rust에서는 컴파일이 안 된다는 말은, C++에서 실수할 만한 부분들이 뭔지 알고 이해하고 있어야 하며 그것이 Rust 언어에 녹아있다는 뜻입니다. 다시 말해, C++을 기존에 어느정도 써보지 않았다면 어렵다는 말입니다.

어렵다는 걸 개발진들도 인지하고 있어서, Rust 컴파일러는 초창기부터 오류 메시지를 친절하게 만드려고 노력했습니다. 자주 나오는 문제는 어디가 문제이고 어디를 이렇게 수정해야한다... 까지 알려주죠. C++의 템플릿 오류 메시지와 비교해보면 천국입니다.

매크로, 컴파일러와 IDE 친화적인.

C++의 매크로는 전처리기가 코드를 1:1로 대치하는 것이었다면, Rust의 매크로는 컴파일러가 인지하는 코드의 단위인 토큰 단위로 동작합니다. 머리아픈 건 다를 바 없지만 IDE 지원 등의 면에서 좀 더 유리합니다.

C++보다 좀 더 제약이 걸려있는 건 단점?이지만요. 애초에 전처리기에서 미리 처리한다는 발상부터가 관리하기 힘들어지는 주요 원인이 아닐까요.

간단한 매크로는 선언형으로 만들 수 있고, 복잡한 매크로는 별도의 라이브러리를 만들어서 마치 컴파일러의 플러그인처럼 돌아가게 할 수 있습니다.

문서화와 테스트조차도 내장

현대적인 언어 답게, 유닛 테스트는 코드와 같은 파일에 바로 쓸 수도 있고, 문서로는 마크다운이 기본입니다. docs.rs 에서 오픈소스 라이브러리의 문서를 둘러볼수도 있고, 명령어로 내 코드의 문서를 만들어볼수도 있습니다.

날로 먹는 크로스 컴파일

툴체인을 관리해주는 "rustup" 프로젝트를 공식에서 제공해주며, 툴체인만 추가해주면 크로스 컴파일도 손쉽게 달성할 수 있습니다.

넓은 범위의 이용성

GC 없이, C++에서 할 만한 실수를 피하고, C++급의 생산성을 달성할 수 있는 언어는 Rust가 거의 유일합니다. 필요하다면 unsafe이지만 C언어 급의 로우레벨 엑세스도 가능하죠. 이렇게 된 이상, 이용 범위가 넓어지는 건 당연한 수순입니다.

기타등등...


이렇게 유용한 언어인데, 오늘 한 번 Rust를 배워보는 건 어떨까요?

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함