Skip to content

기능 플래그

달빛약속 런타임은 기능 플래그(Feature Flags) 를 통해 런타임의 동작을 세밀하게 제어할 수 있습니다. 기능 플래그는 YaksokSession 생성 시 flags 옵션으로 설정합니다.

기능 플래그 설정하기

typescript
import { YaksokSession } from '@dalbit-yaksok/core'

const session = new YaksokSession({
    flags: {
        'skip-validate-break-or-return-in-loop': true,
        'disable-bracket-first-parsing': true,
    },
})

사용 가능한 기능 플래그

skip-validate-break-or-return-in-loop

반복 구문 내에 멈춤 코드(약속 그만, 반복 그만, 돌려주기)가 없어도 유효성 검사에 실패하지 않습니다.

기본적으로 달빛약속은 무한 반복을 방지하기 위해, 반복 구문 안에 반드시 멈춤 코드가 있어야 합니다. 이 플래그를 활성화하면 해당 유효성 검사를 건너뜁니다.

typescript
const session = new YaksokSession({
    flags: {
        'skip-validate-break-or-return-in-loop': true,
    },
})

session.addModule(
    'main',
    `
반복
    "무한 반복" 보여주기
`,
)

// 유효성 검사 오류 없이 실행됩니다 (무한 반복에 주의하세요)
await session.runModule('main')

disable-bracket-first-parsing

대괄호를 우선하여 파싱하지 않습니다. 파싱 오류가 발생할 경우 이 옵션이 도움이 될 수 있습니다.

달빛약속의 파서는 기본적으로 대괄호([, ])를 우선 파싱합니다. 복잡한 표현식에서 파싱 오류가 발생하는 경우, 이 플래그를 활성화하면 문제가 해결될 수 있습니다.

typescript
const session = new YaksokSession({
    flags: {
        'disable-bracket-first-parsing': true,
    },
})

disable-call-stack-depth-limit

약속 호출 스택 깊이 제한을 비활성화합니다. 활성화할 시 CallStackDepthExceededError가 발생하지 않습니다.

달빛약속은 재귀 호출로 인한 스택 오버플로를 방지하기 위해 호출 스택 깊이에 제한을 두고 있습니다. 이 플래그를 활성화하면 해당 제한이 해제됩니다.

이 플래그를 활성화하면 깊은 재귀 호출 시 메모리 부족이나 성능 저하가

발생할 수 있습니다. :::

typescript
const session = new YaksokSession({
    flags: {
        'disable-call-stack-depth-limit': true,
    },
})

disable-variable-events

변수 설정/읽기 이벤트를 비활성화합니다. 활성화할 시 variableSet, variableRead 이벤트가 발생하지 않습니다.

변수 이벤트가 불필요한 경우 이 플래그를 활성화하면 약간의 성능 향상을 기대할 수 있습니다.

typescript
const session = new YaksokSession({
    flags: {
        'disable-variable-events': true,
    },
})

FEATURE_FLAG 열거형 사용하기

문자열 대신 FEATURE_FLAG 열거형을 사용하여 타입 안전하게 플래그를 설정할 수도 있습니다.

typescript
import { FEATURE_FLAG, YaksokSession } from '@dalbit-yaksok/core'

const session = new YaksokSession({
    flags: {
        [FEATURE_FLAG.SKIP_VALIDATE_BREAK_OR_RETURN_IN_LOOP]: true,
        [FEATURE_FLAG.DISABLE_CALL_STACK_DEPTH_LIMIT]: true,
    },
})