[Rust] .expect 메소드는 왜 이름이 .expect일까?

전성훈·2022년 7월 28일
1

Rust

목록 보기
1/1

내용에 대한 출처: https://stackoverflow.com/a/66364221/13160750

Rust 프로그래밍을 하다 보면, 위 스크린샷처럼 ResultOption enum의 .expect 메소드를 사용해야 하는 경우가 종종 있다.

expect 메소드는 해당 enum이 Option::Some이면 안에 든 데이터를 리턴한다.
반대로 Option::None이면 .expect의 인자 내용을 가지고 패닉을 일으킨다.

그런데 왜 메소드 이름이 하필 .expect일까?

뭘 기대한다는 걸까?
프로그래머로써는 메소드로부터 패닉이 아닌 실제 데이터를 기대할 텐데...

Rust The Book이나 Result, Option enum의 설명 문서에도 expect의 이름의 기원은 찾을 수 없었다.

다만, Stack Overflow에서 신빙성 있는 의견을 찾을 수 있었다.
Rust 컴파일러의 개발 과정 속에서 expect 메소드의 기원을 찾을 수 있다는 내용이다.

Rust 언어의 공식 컴파일러rustc의 소스코드를 통해, .expect 메소드의 기원을 추측할 수 있다.

rustc 컴파일러의 소스코드Option struct 쪽 소스코드에는 expect와 비슷한 역할을 하는 함수가 이전부터 존재했다.

그 함수는

  • expect(p, token::SEMI)
    (= "SEMI" 토큰이 parse되기를 예상하기)
  • expect_word(p, "let")
    (= "let" 키워드가 parse되기를 예상하기)

...와 같은 꼴로 쓰였다. 만약 예상한 대로 parse되지 않으면, 컴파일을 실패시키고 "'let' 키워드를 예상했음" (expected keyword 'let') 라는 에러 메세지를 던졌다.

참으로 유용했던 이 함수는 이름을 유지한 채 기능이 "Option 변수가 Some인지" 확인하는 쪽으로 바뀌었고, 결국에는 Option의 메소드가 되었다. 그리고, 현재까지 유지되었다.

... 즉, (굳이 Rust가 아니더라도) 컴파일러 구문 해석 오류로 흔히 볼 수 있는 관용 문구인 expected keyword 'let' 에러를 컴파일러에서 처리하고 구현하는 데,
더 자연스럽게 코드가 읽힐 수 있도록 expect라는 단어를 차용한 것이었다. 그리고 그것이 굳어진 것이다.

Stack Overflow의 원 글에서도 "(expect 메소드의 지난 과정들을 봤을 때) 개인적으로 expect라는 이름이 유별난 이름까지는 아닌 것 같다. 자연스러운 이름처럼 보인다."라는 이름 평가를 말미에서 확인할 수 있다. 나도 이 평가에 동의하는 편이다.

1개의 댓글

comment-user-thumbnail
2022년 8월 14일

궁금했던 내용인데 재미있게 읽었습니다 :)

답글 달기