Skip to content

현재 실행중인 코드의 위치 가져오기(코드 실행 속도 늦추기)

달빛약속 런타임은 코드 실행 과정을 시각화할 수 있도록, 현재 실행중인 코드의 위치를 알리는 기능을 제공합니다. 이 기능은 흐름제어 문법(조건문, 반복문)를 배우거나, 코드 오류를 수정할 때 유용하게 사용할 수 있습니다.

WARNING

달빛약속 런타임은 코드 실행 위치 시각화를 직접 제공하지 않고, 실행중인 코드의 위치를 가져오는 이벤트를 제공합니다. 코드 실행 위치 시각화는 각 서비스의 개발자가 직접 구현해야 합니다.

코드 실행 속도 늦추기

프로그램이 실행되는 속도는 매우 빠르기에, 코드 실행 과정을 시각화하기 위해서는 코드 실행 속도를 늦춰야 합니다. 코드 실행 속도는 각 모듈별로 설정되며, addModule 메소드와 executionDelay 속성을 사용하여 지정합니다. executionDelay 속성은 코드 실행 속도를 늦추는 시간을 밀리초 단위로 설정합니다.

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

const session = new YaksokSession()

session.addModule(
    'main',
    `
"안녕, 세상!" 보여주기
"잠시 후에 출력됩니다" 보여주기
`,
    {
        executionDelay: 500, // 코드 실행 속도를 500밀리초로 설정
    },
)

await session.runModule('main')

위 코드는 코드 실행 속도를 500밀리초로 설정합니다. 이제 코드는 500ms에 한 줄씩 실행됩니다.

실행중인 코드 위치 가져오기

sessionConfig 객체의 events.runningCode 이벤트를 사용하여 현재 실행중인 코드의 위치를 가져올 수 있습니다.

Events.runningCode

ts
import { yaksok, SessionConfig } from '@dalbit-yaksok/core'

const sessionConfig: SessionConfig = {
    events: {
        runningCode: (start, end, scope, tokens) => {
            console.log(start, end, scope, tokens)
        },
    },
}

const session = new YaksokSession(sessionConfig)

session.addModule(
    'main',
    `
1 보여주기
1 + 2 보여주기
`,
)

await session.runModule('main')

/*
{ line: 2, column: 1 } { line: 2, column: 7 } Scope { .. } [{ type: "NUMBER_LITERAL", value: "1" } ... ]
{ line: 3, column: 1 } { line: 3, column: 11 } Scope { .. } [{ type: "NUMBER_LITERAL", value: "1" } ... ]
*/

위 코드는 runningCode 이벤트를 사용하여 현재 실행중인 코드의 위치를 콘솔에 출력합니다.