[Rust] 러스트의 장/단점
써보면서 느낀 점을 정리해본다.
언어적 장점
- 키워드가 간결하고 적으며, 문법이 명료하다.
- 기본 인코딩으로 UTF-8을 사용한다.
- 정적(static) 타입 시스템을 갖춰 타입 안정적이다.
- 객체지향 언어다. 객체지향적 설계가 용이하다.
- C/C++ 스타일의 명령형 구조를 기반하므로, 접근성이 괜찮다.
- 대입 시도는 기본적으로 복사가 아닌 이동을 수행한다. 훨씬 효율적이다.
- 소유권 기반의 자원관리를 사용해서, 성능의 저하 없이 자원의 누수를 최소화할 수 있다.
- 모든 구문이 식으로 취급된다.
- 풍부한 매크로 시스템을 가지고 있어, 이런저런 확장이 용이하다.
- FFI를 사용하면 C/C++로 작성된 정적 라이브러리나 동적 라이브러리를 갖다쓸 수 있다.
- 람다식이나 패턴매칭 등의 모던하고 멋진 구문들을 제공한다.
- unsafe를 사용하지 않는다면, Undefined Behavior가 존재하지 않는다.
- unsafe를 사용하면 저수준 접근도 가능하다.
- 모든 변수는 상수가 기본이다. 가변성을 부여하려면 mut를 붙여야 한다.
- 모나드 기반의 예외처리시스템을 사용한다. 때문에 null이 없고 성능 부하가 적다.
언어적 단점
- 생소한 개념이 있어 좀 어려울 수 있다. 소유권+라이프타임에 관한 문제가 특히나 까다롭다.
- 상속이 없고 일종의 인터페이스(trait)만 존재한다. 때문에 기존의 디자인패턴을 그대로 사용하기에는 좀 불편할 수 있다.
외적 장점
- 성능이 아주 좋다. C/C++과 동등한 시스템 수준 퍼포먼스를 보인다.
- 백엔드 시스템으로 LLVM을 사용해서, 이식성이 아주 좋다.
- cargo라는 멋진 패키지&의존성 관리자가 있어서 라이브러리를 땡겨쓰는 것이 아주 쉽고 편리하다.
- 웹어셈블리 환경이 가장 잘 되어있다. 정말로.
- 컴파일러가 친절하다.
- 테스트 도구가 통합되어있다.
- 문서화 도구가 잘 되어있고, 라이브러리 배포시 자동으로 문서가 생성되며, 배포된다.
외적 단점
- 아직 현업에서는 널리 쓰이지 않는다.
- 웹어셈블리나 웹백엔드 등을 제외하면 생태계가 그리 비옥하진 않다.