가장 사랑받는 언어, Rust - 왜 러스트 인가?



작년에 StackOverflow(stackoverflow.com)에서 설문조사를 65,000명 에게 했습니다. 


현재 사용하는 언어 중, 내년에도 사용하고 싶은언어는?


86.1%를 차지한 1등은 당연 Rust. 그리고 이게 5년 연속 1등이라는 대기록이라는 것. 

왜 이렇게 열광하는 건지..



저 역시도 언제나 시간이 없다는 핑계로 새로운 언어가 나오면 한참동안 지켜만 보는 현업 개발자라서, Rust를 심도있게 파 본적은 없습니다. Rust 라는 것이 있다는 것은 알고, 아직 나온지 얼마 안되었고, 현대적 언어 (Modern Language) 라는 것 정도.. 그리고 단순한게 해보았던 테스트 정도 였습니다. 여러 특징이 있지만, 다른 언어.. 특히 제가 프로덕션 레벨로 프로그래밍 할 수 있는 최고 빠른언어인 Go 보다 빠른 언어라는 특징이 있습니다.


다른 특징들도 좀 나열해 보자면

  • 컴파일 언어 입니다.  **1
  • 다중 패러다임 언어입니다. **2
  • LLVM(Low Lever Virtual Machine : 저레벨 가상머신) 을 사용합니다. **3



**1 : 참조 : https://dingrr.com/blog/post/compiled-vs-interpreted-언어
**2 : 절차지향, 병렬형, 함수형, 객체지향 등등등 모두 가능한. 언어
**3 : LLVM은 원래 저레벨 가상머신의 약자이지만, LLVM이 성정하고 다양한 목적을 가지게 되면서 현재는 그이름을 약자로 사용하는 거시 아니라 그냥 프로젝트의 이름으로 사용하고 있습니다.(참조 : https://ko.wikipedia.org/wiki/LLVM)



러스트는 안전하고, 빠르고, 병렬성에 초점을 둔 시스템 프로그래밍 언어이다.

 - Rust 공식문서


러스트는 다른 언어에 존재하는 고충을 해결하면서 더욱 적은 단점으로 확실하게 러스트가 다른언어보다 한 발 앞서해 해준다.

 - 스택오버플로우 Rust Top 컨트리뷰터 Jake Goulding



1. 영향을 받은 언어

C언어가 B에게 영향을 받은것 처럼 러스트 역시 혼자 생겨나진 않았습니다. 러스트는 아래와 같은 언어의 영향을 받았습니다.

  • Abstract Machine Model: C
  • Data types: C, SML, OCaml, Lisp, Limbo
  • Optional Bindings: Swift
  • Hygienic Macros: Scheme
  • Functional Programming: Haskell, OCaml, F#
  • Attributes: ECMA-335
  • Memory Model and Memory Management: C++, ML Kit, Cyclone
  • Type Classes: Haskell
  • Crate: Assembly in the ECMA-335 CLI model
  • Channels and Concurrency: Newsqueak, Alef, Limbo
  • Message passing and Thread failure: Erlang


출처 : https://learning-rust.github.io/docs/a1.why_rust.html




2. 가비지 컬렉터(GC)가 있는 C++?

GC는 시시때때로 또는 시스템이 콜렉팅을 요청할 때 (예, Heap 영역이 점점 차오르고 있을 때) 작동됩니다. 

그런 의미에서 Rust는 엄밀히 말해 가비지 컬렉터가 있다고 이야기 할 수는 없습니다. GC를 이용하지 않은 GC 를 실행하는 느낌입니다.


방법은,

Rust는 컴파일을 할때 코드를 정리된 코드를 삽입해 줍니다. C언어는 이 클린업 코드를 개발자가 직접 삽입해야 하지만, Rust는 런타임 오류를 없애기 위해 컴파일러가 알아서 삽입해 주고 있습니다. 예를 들어 변수가 더이상 사용되지 않는다거나 하면 메모리는 바로 해제 됩니다. 이런 방법으로 Memory Safety를 구현합니다. 널 포인터 에러 Good bye!



3. Rust 만의 특이한 개념, 소유권 (Ownership)

소유권은 Rust의 가장 독특한 특징이며, Rust는 GC가 없어도 메모리 안전을 보장할 수 있습니다.

러스트의 주요 특징은 소유권이다. 이 기능은 쉽게 설명할 수 있지만, 나머지 언어에 깊은 영향을 미칩니다. 모든 프로그램은 실행하는 동안 컴퓨터는 메모리를 관리해야 합니다. 일부 언어에는 프로그램이 실행될 때 더 이상 사용되지 않는 메모리를 지속적으로 찾는 GC가 있습니다. 

또다른 언어에서는 프로그래머가 직접 메모리를 명시적으로 할당하고 해제해야 합니다.(대표적으로 C언어)
하지만, Rust는 완전히 다른 접근방식을 사용합니다. 메모리는 컴파일러가 컴파일 시간에 확인하는 일련의 규칙으로 소유 시스템을 통해 관리됩니다. 

소유권은 많은 프로그래머들에게 새로운 개념이기 때문에, 익숙해지는데 시간이 좀 걸릴 수 있지만. 러스트와 소유권 시스템의 규칙에 대해 더 많은 경험을 할수록 안전하고 효율적인 코드를 자연스럽게 개발할 수 있다는 것입니다. 소유권을 이해하면 Rust를 고유하게 만드는 기능을 이해할 수 있는 견고한 기반을 확보할 수 있습니다.


스택과 힙에 관련된 공식 문서 글 참조 : https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html

러스트는 모든 값에 ownership이라는 변수가 있습니다. 각 값은 한번에 하나의 소유자만 있을 수 있고, 소유자가 범위를 벗어나면 값이 삭제되면서 메모리를 다시 재사용할 수 있습니다. 어려운 개념이라기 보다 다른 개념이라 가슴에 팍! 오진 않지만, 익히는데 그렇게 오랜 시간이 걸리지는 않습니다.




4. 도전적인 언어

파이썬을 주로 다르고 있는 저 같은 사람에게 도전적인 언어임에는 분명한 것 같아요. 상당한 러닝커브가 있고 사용자의 실수를 막기위한 제약사항도 많고 특이한 개념인 소유권 같은 개념도 있기 때문입니다. 특히 제약사항에 대해 이야기 해보자면, 러스트는 개발자들에게 안전한 코드를 쓰도록 강요(?) 하고 있습니다.

대부분 상당한 시간동안 오래 사용했던 사람들은 대부분 좋은 점을 추종하기 보다 적은 단점을 추종했습니다. 이미 탁월한 성능과 메모리 관리 그리고 의존성 관리 기능(Cargo) 들을 바탕에 깔고 있고, 단점만 적으면 되는 상황에 놓인 Rust 인데 적은 단점이야 말고 최고의 장점이 된 언어입니다. 실제로 우리가 개인 프로젝트를 만드는데 흥미와 즐거움이 제일 중요하고 (그것이 배우는 즐거움이라도) 성능과, 코드는 언제나 두 번째 문제입니다. 아무도 개인 프로젝트에서 성능을 걱정하진 않습니다.

해서, 배우기는 어려워도 사용하기는 쉬운 언어가 되었습니다. 



5. 사용자가 많지 않지만..

러스트를 사용하는 사람은 스택오버플로우 설문에서 약 5%내외인 것으로 나타났다. 

그러니까 실질적으로 다시 Rust를 사용하고 싶다고 말한 개발자의 절대적인 수는 많지 않다는 것. 그럼에도 불구하고, C++ 이나 C 언어 처럼 직접 메모리를 관리해야 하는 부담을 갖지 않아도 되고, 언어 자체가 매우 통제적이기 때문에 독학으로도 가능합니다. 자유분방한 언어는 좋은 코드의 예시라는 것이 있는데 Rust는 대부분 좋은 코드가 자동으로 만들어 지게 되니까요. 특히 다른 저레벨 언어에는 없는 의존성 관리 도구 Cargo 까지 갖추면서, 그래도 할수 있는 저레벨 언어 1가지로 Rust를 시작해 보면 어떨까 합니다.



도움될만한 링크 : 

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

러스트의 멋짐을 모르는 당신은 불쌍해요 : https://parksb.github.io/article/35.html

2021년에 러스트를 배워야 하는 이유 : https://serokell.io/blog/rust-guide#rust-and-webassembly











  • [[a.original_name]] ([[a.file_size | fileSizer]])
좋아요[[ postLike | likePlus ]]
공유
라이언

“Lead Python Engineer”

댓글 [[totalCommentCount]]
[[ comment.author__nick_name ]] [[ comment.datetime_updated | formatDate]] (수정됨)

[블라인드 처리된 글 입니다.]

답장
[[ sub.author__nick_name ]] [[ sub.datetime_created | formatDate ]] (수정됨)

취소
댓글을 남겨주세요.
'데브옵스' 관련 최신 포스트
[[ post.title ]]
[[ post.datetime_published_from | DateOnly ]]