Learning Rust #1

TAEJUN KIM·2021년 8월 30일
1

Rust

목록 보기
1/4
post-thumbnail

모질라 재단에서 개발한 프로그래밍 언어 RUST에 대해 정리하기.
내용은(Contents) 는 이 책을 참고하고 있다. 오픈 소스 정신 만세!

설치같은 부분은 넘어가고 문법적인 부분만 빠르게 다룰 예정이다.
IDE는 intelliJ 를 사용한다.

Introduce

fn main(){
    println!("Hello, World!");
}

-main 함수는 rust executable program에서 가장 먼저 실행된다.

-Rust는 Indentation 할때 Tab이 아닌 Space 4칸으로 들여쓰기한다.

-println! 에서 !는 Macro를 호출한다. 만약 println() 으로 쓴다면 함수를 호출하는 것이다.

-rustc main.rs 를 컴파일 하면 Binary executable 이 나온다. 윈도우 환경에선 main.exe 이고 추가로 디버그를 위한 .pdb 파일도 생성된다.

Cargo

-Cargo는 Rust의 Build System / Package Manager 이다. dependencies 들을 자동으로 설정해준다.

Toml

  • Tom's Obvious Minimal Language 의 약자로 Cargo Configuration Format 이다.

[package]

  • [package] 선언 밑에 오는게 Configuration 이다.
    예를들어
[package]
name = "hello world"
version = "0.1.0"
author = ["dev <dev@gmail.com>"]
edition = "2018" 

이라면

name 엔 Project 의 이름이 , version 에는 Cargo의 버전이 , author에는 작성자의 이름과 이메일 , edition에는 Rust의 에디션이 들어간다.

Cargo build , Cargo run, Cargo check

  • Cmd 에서 프로젝트의 src폴더에 위치시킨다음 Cargo build를 실행하면 .exe 파일이 target/debug 폴더에 생성된다. 소스 폴더와 다른 디렉터리에 따로 생성됨을 기억하자.

  • Cargo run을 하면 빌드 하고 실행한다.

  • Cargo check를 하면 Compile이 가능한지 확인한다. Build 와 차이점은 Check는 가능한지 확인만 하기 떄문에 실제로 빌드해서 .exe 파일을 만들지 않는다.

  • Cargo build --release 는 배포용으로 빌드하는거라 Build 와 Optimization을 해준다.

  • rustc보다 Cargo를 사용하는것이 좋은 점은 프로젝트가 복잡해질수록 명확해진다. 여러 패키지상자 (Crates)들을 끌어다 쓰기 때문이다(dependencies)

.toml 파일의 dependencies 항목

  • toml 파일을 보면 [dependencies]가 있다 여기 아래 예시로
[dependencies]
rand = "0.8.3"

이라고 한다면
rand 는 어떤 crate(package)를 포함할 것인지,
"0.8.3"은 그 crate의 어떤 semantic version을 포함할 것인지 알려주는 것이다.

"^0.8.3" 은 0.8.3 버전보다 높고 0.9.0 미만인 것을 의미한다.
0.8.3 <= version <0.9.0

dependencies가 해석되는 과정

  • Cargo는 먼저 Registry 라는 곳에 있는 모든 것의 최신 버전을 가져온다.

-Registry는 Crate.io 라는 곳의 Data를 Copy 해놓은 것이다.

-Crate.io는 Rust Ecosystem의 사용자들이 가져다 쓰라고 만든 Open source project들을 올려놓는 곳이다. ( 오픈소스 만세)

  • Cargo가 Registry를 업데이트하고 [dependencies] 섹션을 체크해서 내 프로젝트에 포함되어있지 않은(없는) 애들은 다운로드 받아준다.

Cargo.lock 파일

  • Cargo build 를 처음 실행하면 그 빌드 당시에 사용된 Package 버전들을 적어놓는 곳이다.

  • 나중에 패키지들이 버전업이 되어서 충돌이 일어나거나 문제가생겨도 이를 피할 수 있다.

-버전업이 되어도 Cargo 가 Registry를 가져올때 lock 파일에 있는 알맞는 version을 가져오기 때문이다.

Cargo update

  • 그럼 업데이트된 버전을 쓰고 싶을 땐 어떻게 해야하나? 다 Cargo.lock에 잠겨있는데

-Cargo update를 하면 최신 버전을 확인해준다, 이를 기반으로 toml 파일의 Version을 수정해주면 된다.

(start..end)

-range를 지정할때 start..end 는 [start, end)를 의미한다. 즉 start는 포함하고 end는 포함하지 않는다. 예를들어 1~100을 선언하고 싶다면 (1..101) 처럼 선언해야한다. 다른 방법으로는 (1..=100)이 있다. end 앞에 = 를 붙여주면 end도 포함해준다.

Programming 에서 주석 --snip--

  • rust와 관련된건 아닌데 프로그래밍 예제 코드들을 보면
// --snip-- 

이라고 되어있는 샘플코드들을 발견할 수 있다.

이는 이해하는것에 지장없는 불필요한 코드들을 잘랐놨다 라는 말이다.
예를들어 1~100을 반복문으로 출력한 결과를 쓰고있는데
12345678910......100 이라고 쓸 수도 있지만

123 //--snip-- 99 100 처럼 쓸 수도 있는 것이다.

profile
前) 컴퓨터 공학과 학생 現)취준 백수

0개의 댓글