Topazdocs
언어 정책

바인딩·스코프·클로저

값 바인딩, 가변성, 영역, 구조 분해, 클로저 캡기 규칙.

바인딩은 값에 이름을 붙이고 변경 가능 여부, 유효 범위, 클로저가 캡는 방식을 명시적으로 결정합니다.

정책

const는 컴파일 시점에 결정되는 값, let은 변경할 수 없는 런타임 값, let mut는 변경할 수 있는 값을 만듭니다. 각 바인딩은 어휘적 영역을 가지며 같은 영역에서 같은 이름을 다시 선언할 수 없습니다. 패턴을 이용한 선언은 형태가 맞을 때만 이름을 만듭니다.

명시된 동작

바인딩은 선언된 뒤부터 실행 흐름의 끝까지 사용할 수 있습니다. 하위 영역은 바깥 이름을 가릴 수 있지만 종료되면 원래 이름이 다시 보입니다. 클로저는 가변 여부를 포함한 실제 바인딩 셀을 캡으므로 클로저 안과 밖이 같은 변경을 보게 됩니다. 반복문의 각 회차는 서로 다른 바인딩을 만듭니다.

제약과 명시적 거부

mut let은 잘못된 표기입니다. 변경할 수 없는 바인딩에 대입하거나, 선언 전의 이름을 읽거나, 같은 영역에서 이름을 중복하거나, 불완전한 패턴을 할당에 사용하면 정적 오류입니다. 클로저 생명주기를 암묵적 복사로 바꾸지 않습니다.

유예 경계

명시적 참조 측처 모드, 사용자 지정 이동 캡기, 약한 참조, 클로저 수명 표기는 아직 언어에 포함되지 않습니다.

예제

TOPAZ
function makeAdder(base: int) -> (int) -> int {
    return value => value + base
}

const DEFAULT_STEP = 5
let addStep = makeAdder(DEFAULT_STEP)
let mut total = 0
total = addStep(total)

관련 정책