부록 B: 연산자와 기호

이 부록은 Rust 문법의 용어집을 담고 있다. 단독으로 사용되거나 경로, 제네릭, 트레이트 바운드, 매크로, 속성, 주석, 튜플, 괄호 등의 문맥에서 사용되는 연산자와 기호를 설명한다.

연산자

표 B-1은 Rust의 연산자, 연산자가 사용되는 예제, 간단한 설명, 그리고 해당 연산자가 오버로드 가능한지 여부를 보여준다. 연산자가 오버로드 가능한 경우, 해당 연산자를 오버로드하기 위해 사용할 수 있는 트레이트를 함께 표시했다.

표 B-1: 연산자

연산자예제설명오버로드 가능?
!ident!(...), ident!{...}, ident![...]매크로 확장
!!expr비트 단위 또는 논리적 보수Not
!=expr != expr비동등 비교PartialEq
%expr % expr산술 나머지Rem
%=var %= expr산술 나머지 및 할당RemAssign
&&expr, &mut expr참조
&&type, &mut type, &'a type, &'a mut type참조된 포인터 타입
&expr & expr비트 단위 ANDBitAnd
&=var &= expr비트 단위 AND 및 할당BitAndAssign
&&expr && expr단락 논리 AND
*expr * expr산술 곱셈Mul
*=var *= expr산술 곱셈 및 할당MulAssign
**expr역참조Deref
**const type, *mut type원시 포인터
+trait + trait, 'a + trait복합 타입 제약
+expr + expr산술 덧셈Add
+=var += expr산술 덧셈 및 할당AddAssign
,expr, expr인수 및 요소 구분자
-- expr산술 부정Neg
-expr - expr산술 뺄셈Sub
-=var -= expr산술 뺄셈 및 할당SubAssign
->fn(...) -> type, |…| -> type함수 및 클로저 반환 타입
.expr.ident필드 접근
.expr.ident(expr, ...)메서드 호출
.expr.0, expr.1, etc.튜플 인덱싱
...., expr.., ..expr, expr..expr오른쪽 제외 범위 리터럴PartialOrd
..=..=expr, expr..=expr오른쪽 포함 범위 리터럴PartialOrd
....expr구조체 리터럴 업데이트 구문
..variant(x, ..), struct_type { x, .. }“그 외” 패턴 바인딩
...expr...expr(더 이상 사용되지 않음, 대신 ..= 사용) 패턴 내에서 포함 범위 패턴
/expr / expr산술 나눗셈Div
/=var /= expr산술 나눗셈 및 할당DivAssign
:pat: type, ident: type제약 조건
:ident: expr구조체 필드 초기화
:'a: loop {...}루프 레이블
;expr;문장 및 아이템 종결자
;[...; len]고정 크기 배열 구문의 일부
<<expr << expr왼쪽 시프트Shl
<<=var <<= expr왼쪽 시프트 및 할당ShlAssign
<expr < expr작음 비교PartialOrd
<=expr <= expr작거나 같음 비교PartialOrd
=var = expr, ident = type할당/동등성
==expr == expr동등 비교PartialEq
=>pat => expr매치 암 구문의 일부
>expr > expr큼 비교PartialOrd
>=expr >= expr크거나 같음 비교PartialOrd
>>expr >> expr오른쪽 시프트Shr
>>=var >>= expr오른쪽 시프트 및 할당ShrAssign
@ident @ pat패턴 바인딩
^expr ^ expr비트 단위 배타적 ORBitXor
^=var ^= expr비트 단위 배타적 OR 및 할당BitXorAssign
|pat | pat패턴 대안
|expr | expr비트 단위 ORBitOr
|=var |= expr비트 단위 OR 및 할당BitOrAssign
||expr || expr단락 논리 OR
?expr?오류 전파

연산자가 아닌 심볼들

다음은 연산자로 동작하지 않는 심볼들의 목록이다. 즉, 이들은 함수나 메서드 호출처럼 동작하지 않는다.

표 B-2는 다양한 위치에서 유효한 독립적인 심볼들을 보여준다.

표 B-2: 독립적인 문법

심볼설명
'ident명명된 라이프타임 또는 루프 레이블
...u8, ...i32, ...f64, ...usize, etc.특정 타입의 숫자 리터럴
"..."문자열 리터럴
r"...", r#"..."#, r##"..."##, etc.원시 문자열 리터럴, 이스케이프 문자 처리 안 됨
b"..."바이트 문자열 리터럴; 문자열 대신 바이트 배열 생성
br"...", br#"..."#, br##"..."##, etc.원시 바이트 문자열 리터럴, 원시와 바이트 문자열 리터럴의 조합
'...'문자 리터럴
b'...'ASCII 바이트 리터럴
|…| expr클로저
!발산 함수를 위한 항상 비어 있는 바닥 타입
_“무시된” 패턴 바인딩; 정수 리터럴을 읽기 쉽게 만드는 데도 사용

표 B-3은 모듈 계층 구조를 통해 아이템에 이르는 경로와 관련된 심볼들을 보여준다.

표 B-3: 경로 관련 문법

심볼설명
ident::ident네임스페이스 경로
::path외부 프렐루드에 상대적인 경로, 모든 크레이트가 루트됨 (즉, 크레이트 이름을 포함한 명시적 절대 경로)
self::path현재 모듈에 상대적인 경로 (즉, 명시적 상대 경로).
super::path현재 모듈의 부모에 상대적인 경로
type::ident, <type as trait>::ident연관 상수, 함수, 타입
<type>::...직접 명명할 수 없는 타입의 연관 아이템 (예: <&T>::..., <[T]>::..., 등)
trait::method(...)메서드 호출을 정의한 트레이트를 명시하여 모호함 제거
type::method(...)메서드 호출을 정의한 타입을 명시하여 모호함 제거
<type as trait>::method(...)메서드 호출을 정의한 트레이트와 타입을 명시하여 모호함 제거

표 B-4는 제네릭 타입 매개변수를 사용하는 맥락에서 나타나는 심볼들을 보여준다.

표 B-4: 제네릭

심볼설명
path<...>타입에서 제네릭 타입에 매개변수 지정 (예: Vec<u8>)
path::<...>, method::<...>표현식에서 제네릭 타입, 함수, 또는 메서드에 매개변수 지정; 종종 터보피시라고 함 (예: "42".parse::<i32>())
fn ident<...> ...제네릭 함수 정의
struct ident<...> ...제네릭 구조체 정의
enum ident<...> ...제네릭 열거형 정의
impl<...> ...제네릭 구현 정의
for<...> type고차 라이프타임 바운드
type<ident=type>하나 이상의 연관 타입이 특정 값으로 할당된 제네릭 타입 (예: Iterator<Item=T>)

표 B-5는 트레이트 바운드로 제네릭 타입 매개변수를 제한하는 맥락에서 나타나는 심볼들을 보여준다.

표 B-5: 트레이트 바운드 제약

심볼설명
T: U제네릭 매개변수 TU를 구현하는 타입으로 제한됨
T: 'a제네릭 타입 T가 라이프타임 'a보다 오래 살아야 함 (즉, 타입이 'a보다 짧은 라이프타임을 가진 참조를 포함할 수 없음)
T: 'static제네릭 타입 T'static 이외의 빌린 참조를 포함하지 않음
'b: 'a제네릭 라이프타임 'b가 라이프타임 'a보다 오래 살아야 함
T: ?Sized제네릭 타입 매개변수가 동적 크기 타입일 수 있도록 허용
'a + trait, trait + trait복합 타입 제약

표 B-6은 매크로를 호출하거나 정의하는 맥락, 그리고 아이템에 속성을 지정하는 맥락에서 나타나는 심볼들을 보여준다.

표 B-6: 매크로와 속성

심볼설명
#[meta]외부 속성
#![meta]내부 속성
$ident매크로 치환
$ident:kind매크로 캡처
$(…)…매크로 반복
ident!(...), ident!{...}, ident![...]매크로 호출

표 B-7은 주석을 생성하는 심볼들을 보여준다.

표 B-7: 주석

심볼설명
//라인 주석
//!내부 라인 문서 주석
///외부 라인 문서 주석
/*...*/블록 주석
/*!...*/내부 블록 문서 주석
/**...*/외부 블록 문서 주석

표 B-8은 괄호가 사용되는 맥락을 보여준다.

표 B-8: 괄호

심볼설명
()빈 튜플 (즉, 유닛), 리터럴 및 타입
(expr)괄호로 묶인 표현식
(expr,)단일 요소 튜플 표현식
(type,)단일 요소 튜플 타입
(expr, ...)튜플 표현식
(type, ...)튜플 타입
expr(expr, ...)함수 호출 표현식; 튜플 struct 및 튜플 enum 변형 초기화에도 사용

표 B-9는 중괄호가 사용되는 맥락을 보여준다.

표 B-9: 중괄호

맥락설명
{...}블록 표현식
Type {...}struct 리터럴

표 B-10은 대괄호가 사용되는 맥락을 보여준다.

표 B-10: 대괄호

맥락설명
[...]배열 리터럴
[expr; len]exprlen번 복사한 배열 리터럴
[type; len]type의 인스턴스를 len개 포함한 배열 타입
expr[expr]컬렉션 인덱싱. 오버로드 가능 (Index, IndexMut)
expr[..], expr[a..], expr[..b], expr[a..b]Range, RangeFrom, RangeTo, 또는 RangeFull을 “인덱스”로 사용해 컬렉션 슬라이싱처럼 동작하는 컬렉션 인덱싱