Rust에서 사용되는 기호의 의미 및 읽는 방법

Rust는 소유권, 빌림, 트레이트 등 문법도 복잡하지만, 기호도 처음 보는 것이 많아 헷갈리게 하는데 정리해봤습니다. 인쇄해놓고 보면 좋을 듯 합니다.

기호 / 표기의미설명예시영어 읽기한국어 읽기
!매크로이름 뒤에 붙어 해당 이름이 매크로임을 표시println!, dbg!, vec!macro / bang매크로
?에러 전파Result나 Option에서 에러를 즉시 반환let x = foo()?;question mark물음표
::경로 연산자모듈, 구조체, 함수 등의 경로 지정std::io::Resultdouble colon더블 콜론 / 경로 연산자
*역참조참조 값을 직접 접근*r = 10;asterisk / deref별 / 역참조
_와일드카드사용하지 않는 값, 이름 무시let _ = foo();underscore언더스코어 / 무시
->함수 반환 타입함수 반환을 표시fn foo() -> i32 { 5 }arrow화살표 / 반환
=>매칭 암시match에서 패턴 결과 지정match x { 1 => “one”, _ => “other” }fat arrow두꺼운 화살표 / →
::<turbofish제네릭 타입을 명시적으로 지정Vec::<i32>::new()turbofishturbofish / 제네릭 타입 명시
..범위 연산자일부 범위, 구조체 업데이트 등에 사용0..5, ..Default::default()dot dot범위 / 나머지 필드
..=포함 범위끝 값을 포함하는 범위0..=5dot dot equal포함 범위
&참조변수/값을 빌려오기let r = &x;reference참조
&mut가변 참조변수/값을 가변으로 빌려오기let mr = &mut y;mutable reference가변 참조
ref/ ref mut패턴용 참조패턴 매칭에서 참조를 얻음let Point { x: ref r, .. } = p;ref / ref mut참조 / 가변 참조 패턴
mut가변성변수 또는 참조를 변경 가능하게let mut x = 5;mut뮤트 / 가변
..(패턴)구조체/튜플 패턴일부 필드만 바인딩하고 나머지 무시Point { x, .. }dot dot범위 / 나머지 필드 무시
라이프타임참조가 유효한 범위를 지정&’static strsingle quote / tick라이프타임 / 스태틱 라이프타임

ChatGPT의 도움을 받았는데, ChatGPT도 헷갈려 하네요.
예를 들어 *를 asterisk라고 하고, !를 bang이라고 하고 헷갈리네요.

하나 더 참고

'Underscore'와 'underbar'는 같은 기호(_)를 가리키는 다른 이름으로, 'underscore'가 정식 명칭이고 'underbar'는 비정식적인 표현입니다.