8. 기능 플래그
기능 플래그
Section titled “기능 플래그”달빛약속 런타임은 기능 플래그(Feature Flags) 를 통해 런타임의 동작을 세밀하게
제어할 수 있습니다. 기능 플래그는 YaksokSession 생성 시 flags 옵션으로
설정합니다.
기능 플래그 설정하기
Section titled “기능 플래그 설정하기”import { YaksokSession } from '@dalbit-yaksok/core'
const session = new YaksokSession({ flags: { 'skip-validate-break-or-return-in-loop': true, 'disable-bracket-first-parsing': true, },})사용 가능한 기능 플래그
Section titled “사용 가능한 기능 플래그”skip-validate-break-or-return-in-loop
Section titled “skip-validate-break-or-return-in-loop”반복 구문 내에 멈춤 코드(약속 그만, 반복 그만, 돌려주기)가 없어도 유효성
검사에 실패하지 않습니다.
기본적으로 달빛약속은 무한 반복을 방지하기 위해, 반복 구문 안에 반드시 멈춤
코드가 있어야 합니다. 이 플래그를 활성화하면 해당 유효성 검사를 건너뜁니다.
const session = new YaksokSession({ flags: { 'skip-validate-break-or-return-in-loop': true, },})
session.addModule( 'main', `반복 "무한 반복" 보여주기`,)
// 유효성 검사 오류 없이 실행됩니다 (무한 반복에 주의하세요)await session.runModule('main')disable-bracket-first-parsing
Section titled “disable-bracket-first-parsing”대괄호를 우선하여 파싱하지 않습니다. 파싱 오류가 발생할 경우 이 옵션이 도움이 될 수 있습니다.
달빛약속의 파서는 기본적으로 대괄호([, ])를 우선 파싱합니다. 복잡한 표현식에서
파싱 오류가 발생하는 경우, 이 플래그를 활성화하면 문제가 해결될 수 있습니다.
const session = new YaksokSession({ flags: { 'disable-bracket-first-parsing': true, },})disable-call-stack-depth-limit
Section titled “disable-call-stack-depth-limit”약속 호출 스택 깊이 제한을 비활성화합니다. 활성화할 시
CallStackDepthExceededError가 발생하지 않습니다.
달빛약속은 재귀 호출로 인한 스택 오버플로를 방지하기 위해 호출 스택 깊이에 제한을 두고 있습니다. 이 플래그를 활성화하면 해당 제한이 해제됩니다.
::: warning 이 플래그를 활성화하면 깊은 재귀 호출 시 메모리 부족이나 성능 저하가 발생할 수 있습니다. :::
const session = new YaksokSession({ flags: { 'disable-call-stack-depth-limit': true, },})disable-variable-events
Section titled “disable-variable-events”변수 설정/읽기 이벤트를 비활성화합니다. 활성화할 시 variableSet,
variableRead 이벤트가 발생하지 않습니다.
변수 이벤트가 불필요한 경우 이 플래그를 활성화하면 약간의 성능 향상을 기대할 수 있습니다.
const session = new YaksokSession({ flags: { 'disable-variable-events': true, },})FEATURE_FLAG 열거형 사용하기
Section titled “FEATURE_FLAG 열거형 사용하기”문자열 대신 FEATURE_FLAG 열거형을 사용하여 타입 안전하게 플래그를 설정할 수도
있습니다.
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, },})