Rust 쓰면서 느낀점

Kyu Yeon 'rebel' Lee·2022년 11월 20일
0

뭔가 알려주려는건 아니고, 개인적으로 Rust 프로그래밍을 해보면서 느낀 점을 적어두는 일기장 같은 것이라고 생각하면 될 듯 합니다.

개요

  • Rust를 개발해보면서 본 특징을 정리한다
  • 여기서 Rust로 대체 뭘 하고 싶었길래 언어를 만들었는지 느껴본다
  • Core Principal을 보면서 이 언어를 사용할때 접근해야하는 방식에 대해서 알아본다
  • 비디오 강의는 나중에 보고, 주요 Cookbook과 Getting Started로 먼저 시작해보고 어떤 느낌으로 짜야하는지 감을 잡도록 한다.
  • 그리고, 언어의 장점과 단점을 확실하게 알아보도록 하자.

Rust의 주요 특징

뭔가 다른 용어들

  • 포인터와 변수가 묘하게 다르게 사용된다
    • 정적/동적 변수의 구분이 매우 명확함. 변수가 조금이라도 바뀌어야 한다면 mutable속성을 꼭 넣어줘야 한다
      안넣어주면 변수를 바꿔달라 애원해도 안된다며 빠구를 먹임
      그래서 맨 처음에 이 말장난에 혼란스러운게 많다.
      • 이 말장난이 타입의 연관성도 의심스럽게 하는 경우가 많다. 특히 String과 같은 Atomic 수준의 타입의 취급이 이상한 느낌. Java도 string과 String이 있지만, Rust는 String&str가 있다.
        전자는 스코프가 소유한 변수의 원본이라는 느낌이고
        후자는 다른 스코프에서 소유한 카피본 아닌 카피본이라는 느낌이다.

예외 처리의 단순함

  • Golang과 같이 예외 처리는 오류의 존재 여부로 처리한다. 이것은 Golang의 select와 같은 느낌이라고 보면 될듯. Rust의 경우에는 match , OK/Some등을 이용한 분기처리 또는 inline처리를 한다.
    • 왜 이렇게 많은 방식이 있는지는 아직 불명. 함수형으로는 하기 싫은 듯 하다. 하지만, 함수형 비스므리하게 진행이 가능하도록 만들기는 가능

노골적인 설계 의도

  • C++보단 C에 가깝다. Golang과 같이 OOP에 대한 적대감이 조금 보이는 듯 하다. 메모리 관리나 변수 관리를 하면서 Garbage Collection을 하는데 있어서 (사실 Rust에는 GC가 없지만) OOP의 클래스형 접근은 뭔가 애로사항이 많은 듯 하다.
    • Class기반 언어같은 경우는 뭔가 Class의 Lifetime을 측정하고 버리는 것들에 대해서 애매한 것들이 많으니 어찌보면 당연한 것일지도?
  • 빌드가 쉽다.
  • Golang과 비슷하면서도 다른점이 많음

컴파일러 수준 메모리 관리

변수 Lifetime 관리

  • 변수가 부모 스코프로 빠져나가려면 반드시 복제를 해야 한다. 이걸 위해서 clone().toOwned()같은 패턴이 존재하는 듯
  • 변수가 유효한 범위가 제한되어서 그런지 그냥 포인터라는 말보다는 Borrowed, Owned라는 말로 바뀐게 특징.

기타 특징

최근 만들어진 CLI도구들의 언어

  • 최근에 만들어진 CLI 프로그램들이 GO 또는 Rust로 만들어진 것을 볼 수 있음.
    특히, 복잡한 계산을 요구하거나 시스템 자원을 요구하는 경우는 Rust로
    병렬 처리를 요구하는 것은 Golang으로 만들어진 것을 볼 수 있음
  • 바이너리 빌드 용이성이나 패키지 관리 측면에서 기존의 C++나 C같이 static link또는 dynamic linked library등을 첨부하는 것과 비교해서 같은 성능에 더 나은 관리성을 보여주니, 인기가 많다고 생각됨

논란이 많은 언어

  • 이상하리만큼 공격을 많이 받는 언어.
    바퀴는 두번 발명할 필요가 없다는 등 많은 이야기거리가 있지만, C와 비슷한 성능을 보여주면서 개발에 용이하고 패키징하기에도 편한 언어라는점에서는 따로 말할 필요가 없음

  • 초보자가 배우기 어려운 언어
    용어라던가 여러가지가 꼬여있어서 초보자가 처음으로 시작하기에는 알맞지 않은 언어로 보임.
    처음에는 C/C++/Python으로 시작했다가 현대 언어로 넘어가는 것도 나쁘지 않은 것으로 보임

참조 문서

기본기 참조

사용 도구

  • NeoVIM
    • 1-3개의 소스코드만 사용하는 작은 프로젝트에 알맞다.
    • LSP와 Plugin을 통하여 Jetbarin사의 IDE와 맞먹는 수준의 파워를 가진다.
    • 소규모 프로젝트에는 Jetbrain보다 더 빠르고 효율적인 수준으로 프로그래밍이 가능.
  • CLion
    • Rust 지원이 생각보다 잘 되어있다, 큰 프로젝트 진행시에 유용할 것으로 보임

이슈

하다가 발견한 이슈

  • 일본어 유니코드 문제 (게시글 참조)
  • UTF-8이 아닌 파일은 무조건 읽지 않는다 (의도됨)

0개의 댓글