TRPL - Getting Started

EN·2023년 12월 7일
0

Rust

목록 보기
1/2
post-thumbnail

러스트를 처음 배우면서 쓰는 글입니다.

저는 컴공과를 졸업했고, iOS 앱개발을 지망하고 있으며
현재 수준으로는 일정 수준의 CS + 알고리즘 문해 다수 그리고 C++, Swift에 이미 익숙해 있는 수준으로 글을 정리했다는 점 참고해주시면 감사하겠습니다.

공부 환경
macOS Ventura 13.0
2.6 GHz 6-Core Intel Core i7

TRPL사이트

위 링크를 참고하면서, 고등학교 때 수학의 정석을 본다는 느낌으로 한글자 한글자 천천히 보고
제가 핵심이라고 생각하는 것들만, 간단하게 기록할 것입니다.
혹시나 같이 공부하시면서
이 글을 읽으시면서 중요해 보이는데 빠진 내용들은 댓글로 적어주시면 정보 공유의 장이 될 것 같습니다.

1-1

기본적인 설치 과정에서 겪었던 이슈

  • rust 설치 후, 버전을 확인하는 명령어가 동작하지 않으면 쉘 프로그램을 껐다 키면 대부분 해결된다.
  • zsh를 사용하는 사람이 일부 에러를 겪는걸 봤는데, 환경변수 문제일 가능성이 크다.

rustup doc

  • 내 로컬에 저장된 오프라인 도큐멘트이다. 대중교통 이용할 때 러스트 배우고싶으면 이 명령어로 하면 될 것 같다.

1-2

Rust의 네가지 특징

main

  • 러스트에서 메인이라는 키워드는 특별하다. 프로그램의 시작점.

{}

  • 러스트 함수는 괄호를 사용한다.

!

  • println()!
  • 함수 뒤에 느낌표가 붙어있었는데, 이걸 매크로라고 한다.
  • 함수의 룰을 따르지 않고, 매크로라는 룰이 따로 있는가 보다. 19장에서 자세히 설명해준다고 한다.
  • For now, you just need to know that using a ! means that you’re calling a macro instead of a normal function and that macros don’t always follow the same rules as functions.

;

  • 러스트는 대부분 세미콜론을 명령의 끝에 달아놓는다. C++과 똑같다.

RustC

  • 컴파일러이다.
  • 컴파일을 하면 .rs 라는 확장자 파일이 생긴다. 바이너리 파일.

AOT

  • Rust는 Ahead Of Time Compile language이다.
  • 실행 전에 바이트코드를 기계어로 바꿔준다는 것이다.
  • Rust is an ahead-of-time compiled language, meaning you can compile a program and give the executable to someone else, and they can run it even without having Rust installed. If you give someone a .rb, .py, or .js file, they need to have a Ruby, Python, or JavaScript implementation installed (respectively). But in those languages, you only need one command to compile and run your program. Everything is a trade-off in language design.
  • 참고 링크

1-3

Creating a Project with Cargo

Cargo

  • 러스트의 빌드 시스템
  • 패키지 매니저
  • cargo new hello_cargo <- 똑같이 디렉토리 생성하는 명령어. mkdir이랑 유사.
  • 단 차이점은? 깃 레포도 생성 된다는 점. gitignore파일도 같이 생성됨.
  • 만약 기존에 있는 깃 레포 파일에다가 cargo new를 하면 생성안됨.
  • 근데 오버라이드 하고 싶으면 new —vcs==git명령어 추가하면 된다.

Cargo.toml


TOML이라는 파일은 Tom`s Obvious, Minimal Language라는 것의 줄임말임.
Cargo의 configuration format

[package] = 패키지 구성 요소인듯(section heading that indicates that the following statements are configuring a package)

카르고를 구성하는 name, version, edition들.. edition에서는 나중에 또 배운다고 한다.(The next three lines set the configuration information Cargo needs to compile your program: the name, the version, and the edition of Rust to use.)

[dependencies] = the start of a section for you to list any of your project’s dependencies. (spm을 예시로 들면 패키지 나열하는걸듯)
챕터 2장에서 created라고 하는(러스트에서는 패키지를 crates 라고 하는듯) 것을 추가해서 사용할 예정이라고 함.

src 디렉토리


여기에 소스파일이 들어가는 듯 하다.

Building and Running a Cargo Project


이렇게 빌드해도 되고, 아니면 그냥 VSCode에서 run 해도 되고.
Cargo.lock파일은 건들지 말자. cargo에서 알아서 관리해준다고 한다.
Cargo run이라는 명령어를 다시 돌려보면

Compiling과정을 거친다!
If you had modified your source code, Cargo would have rebuilt the project before running it, and you would have seen this output(프로그램이 running되기 이전에 카르고는 프로젝트를 rebuilt한다.)

Cargo check -> This command quickly checks your code to make sure it compiles but doesn’t produce an executable:(이 명령어는 그냥 compile만 하고 executable한 코드는 만들지 않는다.)

질문: 왜 exécutable 이 필요하지 않을 수 있을까?
단순히 내 코드가 compile할 수 있다고 확신을 주기 위해, 주기적으로 체크하곤 한다.

Building for Release

Cargo build —release라는 명령어 치면 최적화와 함께 컴파일 할 수 있다.
Target/release 그룹 안에 executable이 생성될 것임.

Cargo as Convention

Git 클론할 때 얘기인듯.
커맨드 창에 git clone …
이건 그냥 원래대로 하면 될듯 싶음.

profile
iOS/JUJITSU

0개의 댓글