Skip to content

v3.0.0

Latest
Compare
Choose a tag to compare
@rycont rycont released this 27 Jul 07:42
39f2e2e

달빛 약속 v3.0.0 릴리스 노트

새로운 타입 **사전(Dictionary)**이 추가되고, 사소한 문법 개선과 함께 실행 제어 기능이 강화되었습니다.

TL;DR

  • 사전(Dictionary) 자료구조 추가: {이름: 값} 형태로 키-값 쌍 데이터를 다룰 수 있습니다.
  • 복합 할당 연산자 지원: +=, -= 등으로 변수의 값을 더 간결하게 수정할 수 있습니다.
  • 더 자연스러워진 반복문: 5번 반복, 목록 의 항목 마다 반복하기 등 다양한 문법을 지원합니다.
  • 실행 제어 기능 (Pause & Resume): 라이브러리 사용 시 코드 실행을 잠시 멈추고 다시 시작할 수 있습니다.
  • 주요 변경 사항 (Breaking): executionDelay 설정 방식이 변경되었고, runningCode 이벤트의 인자가 확장되었습니다.

새로운 기능

1. 사전 (Dictionary) 자료구조 지원

이제 파이썬의 dict나 자바스크립트의 Object처럼 키-값(Key-Value) 쌍으로 데이터를 관리할 수 있는 사전을 사용할 수 있습니다.

# 중괄호 {} 를 사용해 사전을 만듭니다.
내_정보 = {
    이름: "홍길동" # 파이썬과 달리 반점이 없어도 됩니다
    나이: 25
    직업: "의적"
}

# 대괄호[] 와 키 이름을 사용해 값에 접근합니다.
내_정보["나이"] 보여주기  # 출력: 25

# 값을 변경하거나 새로 추가할 수 있습니다.
내_정보["나이"] = 26
내_정보["특기"] = "활쏘기"

내_정보 보여주기

2. 복합 할당 연산자 (+=, -=, *=, /=, %=)

변수의 값을 연산한 결과로 바로 업데이트하는 복합 할당 연산자를 지원합니다. 변수뿐만 아니라 목록이나 사전의 항목에도 사용할 수 있습니다.

점수 = 80
점수 += 10  # 점수 = 점수 + 10 과 동일
점수 보여주기 # 출력: 90

물건_목록 = ["사과", "배", "포도"]
물건_목록[0] += " (맛있는)"
물건_목록[0] 보여주기 # 출력: 사과 (맛있는)

3. 실행 제어: 일시 정지(Pause) 및 재개(Resume)

YaksokSession을 사용하는 라이브러리 환경에서 코드 실행을 동적으로 제어할 수 있습니다.

  • session.pause(): 현재 실행 중인 라인을 완료한 후 실행을 멈춥니다.
  • session.resume(): 멈췄던 실행을 다시 시작합니다.

이 기능은 코드 실행 과정을 시각화하거나 디버깅할 때 매우 유용합니다.

// 2초 뒤에 실행을 멈추고, 다시 3초 뒤에 재개하는 예시
const session = new YaksokSession();
session.addModule('main', `...
"A" 보여주기
"B" 보여주기
...`);

session.runModule('main');

setTimeout(() => session.pause(), 2000);
setTimeout(() => session.resume(), 5000);

개선 사항 (Improvements)

1. 다양하고 자연스러워진 반복문

더 직관적이고 다양한 형태의 반복문 문법을 지원합니다.

  • 횟수 반복: 5번 반복, 10번 반복하기
  • 목록 반복: 과일들 의 과일 마다 반복, 과일들 의 과일 마다 반복하기
# 횟수 반복
3번 반복
    "만세!" 보여주기

# 더 자연스러워진 목록 반복
["사과", "포도"] 의 과일 마다 반복하기
    과일 + " 먹고싶다" 보여주기

2. 세밀해진 실행 위치 추적

라이브러리 runningCode 이벤트가 개선되어, 한 줄에 여러 연산이 있는 경우 각 연산 단위까지 추적할 수 있게 되었습니다. 코드 시각화 툴에서 표현력이 크게 향상됩니다.


Breaking Changes

1. executionDelay 설정 방식 변경

코드 실행 지연 시간(executionDelay)을 설정하는 방식이 YaksokSession 생성자에서 session.addModule의 옵션으로 변경되었습니다. 이를 통해 모듈(파일)별로 다른 실행 속도를 지정할 수 있습니다.

  • AS-IS (v2)
    const session = new YaksokSession({
        executionDelay: 100
    });
    session.addModule('main', '...');
  • TO-BE (v3)
    const session = new YaksokSession();
    session.addModule('main', '...', {
        executionDelay: 100 // 모듈 추가 시 옵션으로 전달
    });

2. runningCode 이벤트 핸들러 인자 변경

runningCode 이벤트가 scopetokens를 추가 인자로 제공하여, 현재 실행 중인 코드의 컨텍스트를 더 풍부하게 파악할 수 있도록 변경되었습니다.

  • AS-IS (v2)
    const session = new YaksokSession({
        events: {
            runningCode: (start, end) => { /* ... */ }
        }
    });
  • TO-BE (v3)
    const session = new YaksokSession({
        events: {
            runningCode: (start, end, scope, tokens) => { /* ... */ }
        }
    });

What's Changed

Full Changelog: v2.2.2...v3.0.0