달빛 약속 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
이벤트가 scope
와 tokens
를 추가 인자로 제공하여, 현재 실행 중인 코드의 컨텍스트를 더 풍부하게 파악할 수 있도록 변경되었습니다.
- 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
executionDelay
in CodeFile level & More information to runningCode event by @rycont in #122- Pause and resume by @rycont in #123
- Simpler loop syntax by @rycont in #124
- Implement compound assignment by @rycont in #125
- Implement 사전(Dict) by @rycont in #126
Full Changelog: v2.2.2...v3.0.0