RUST SYMBOLS

Rust 기호 읽기

Rust 코드를 읽을 때 ::, &, *, ?, =>, .. 같은 기호를 따로 외우면 금방 흐려진다. 각 기호가 이름 공간, borrowing, deref, 오류 전파, 패턴 분기, 범위 생략 중 어떤 문맥에서 쓰였는지 함께 읽어야 실제 의미가 보인다.

01

왼쪽 문맥

기호 앞에 타입, 값, 모듈, 패턴 중 무엇이 오는지 먼저 본다.

같은 기호도 위치에 따라 의미가 달라진다
02

이름 해석

::는 모듈 경로, 타입의 associated item, generic 인자 지정에 쓰인다.

Vec::<u8>::new처럼 둘이 함께 나온다
03

참조 해석

&와 &mut는 빌림을 만들고, *는 deref 또는 raw pointer 문맥에서 값을 따라간다.

소유권 이동인지 빌림인지가 핵심이다
04

흐름 해석

?는 Result/Option 실패를 호출자에게 넘기고, =>는 match arm의 조건과 결과를 잇는다.

return처럼 보이지만 타입 변환이 함께 걸린다
05

패턴 해석

.., _, @, lifetime 표기를 구조 분해, 생략, 이름 붙이기, 참조 수명 문맥에서 읽는다.

패턴 안과 식 안의 ..는 쓰임이 다르다
::
경로와 associated item 모듈, 타입, trait 구현의 항목을 찾아간다.
generic 지정은 ::<> 형태로 보인다
& / *
빌림과 역참조 값을 넘기는지, 잠시 빌리는지, 포인터를 따라가는지 구분한다.
&mut는 단 하나의 가변 접근을 뜻한다
?
오류 전파 Err나 None이면 현재 함수에서 빠져나가 호출자에게 넘긴다.
함수 반환 타입이 맞아야 쓸 수 있다
=> / ..
패턴과 범위 match arm, range, 구조체 나머지 필드 생략에서 다른 역할을 한다.
문맥 없이 기호만 외우면 오독한다

읽기 연습

타입 먼저 기호가 붙은 값의 타입과 함수 반환 타입을 먼저 추적한다.
소유권 표시 move, borrow, mutable borrow가 발생하는 줄을 표시한다.
match 분기 패턴에서 값을 꺼내는지, 조건을 검사하는지, 나머지를 버리는지 구분한다.