컴파일러 입장에서 생각해보기

Kurt·2023년 9월 16일
0

[Rust Language]

목록 보기
19/24

개요

컴파일러의 입장에서 생각해보며 오류를 줄여보기


내용

매우 간단한 내용이지만 재미있는 내용이 나와서 정리를 해본다

Empty Tuple을 기대하는 컴파일러

Empty Tuple이란 ()와 같이 비어있는 Tuple을 의미한다.

예시 코드

fn give() {
}

위 코드의 보이지 않는 부분까지 보이게 되면 다음과 같다

fn give() -> () {
}

해당 코드에서 컴파일러는 어떤 것을 기대하고 있을까??
바로 give라는 함수를 호출하게 되면 Empty Tuple 값이 return 된다는 것을 기대하고 있을 것이다.

실망한 컴파일러

사람도 무엇인가를 기대하고 있는데 뜻대로 되지 않으면 실망하게 된다.
그리고 컴파일러도 마찬가지다. 다음 코드를 보자

fn give() {
    3
}

fn main() {
    let my_tuple = give();
    println!("{my_tuple}")
}

결과:

error[E0308]: mismatched types
 --> src\main.rs:2:5
  |
1 | fn give() {
  |           - help: try adding a return type: `-> i32`
2 |     3
  |     ^ expected `()`, found integer

Empty Tuple을 기대하고있었는데 정작 i32 타입이 나와서 에러를 출력한다.
아마 매우 실망했을 것이다.

바로잡기

위 코드에서 3이라는 숫자를 return 하는 함수를 제대로 이용해서 바로잡아보자.

fn give() -> i32 {
    3
}

fn main() {
    let my_i32 = give();
    println!("{my_i32}")
}

위 코드에서 fn give() -> i32 { 부분에 컴파일러에게 give 함수를 사용하면 i32 타입이 return 된다는 것을 알려준다

아마 컴파일러는 give를 호출하게 되면 i32 가 나온다는 것을 기대하고 있을 것이다.

결과는 다음과 같다.

    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target\debug\cat.exe`
3

Process finished with exit code 0

내용 출처:
> mithradates - 프로그래밍 언어 러스트를 배웁시다!


profile
내 인생이라는 프로젝트의 최고 버전을 만들기 위해

0개의 댓글