v0.5 → v0.6 마이그레이션 가이드
v0.5.0(2025-11-23) 에서 동작하던 코드가 v0.6.0 에서 다르게 동작하거나 더 동작하지 않는 지점을 모았다. 전체 변경 목록은 CHANGELOG.md 의 Unreleased 절에 있고, 이 문서는 그중 기존 코드나 사용 방법을 바꿔야 하는 항목만 다룬다.
1. 없어진 도구와 기능
| 없어진 것 | 대신 쓸 것 |
|---|---|
ksjpm 패키지 관리자 | 모듈은 가져오기 "경로" 와 KINGSEJONG_PATH 환경 변수로 찾는다. 검색 순서는 표준 라이브러리 레퍼런스 에 있다 |
| JIT Tier 1(루프 네이티브 컴파일), JIT Tier 2(함수 인라이닝) | 없음. 기본 실행기는 평가기이고, --vm 으로 바이트코드 VM 을 쓸 수 있다 |
2. 언어 동작
거부된 Promise 를
대기하면 에러가 던져진다. v0.5 에서는 거부 이유(에러 값)가 그대로 결과로 돌아왔다. 이제던지다처럼 던져지므로, 거부를 값으로 받아 검사하던 코드는시도 { ... } 오류 (e) { ... }로 감싸야 한다.ksj실패 = 비동기 함수() { 던지다 "연결 끊김" } 메인 = 비동기 함수() { 시도 { 대기 실패() } 오류 (e) { 출력("잡음:", e) } } 메인()끝나지 않은 Promise 의
.그러면/.오류시가 새 Promise 를 돌려준다. v0.5 에서는 원래 Promise 를 돌려줘 콜백의 반환값이 사라졌다. 체인의 다음 단계가 콜백의 반환값을 받으므로, 원래 값을 기대하던 체인은 결과가 달라진다.조사 분리 규칙이 좁아졌다. 조사는 뒤에 메서드 이름이나 범위의 숫자가 올 때만 떼어 낸다.
마을,사과,짝수만같은 이름이 더 이상마+을처럼 갈라지지 않는다. 갈라진 이름에 맞춰 짠 코드(예:마라는 변수를 따로 둔 코드)는 이름을 바로잡아야 한다.
3. 표준 라이브러리
v0.5.0 에서는 array, crypto, db, http, io, string 모듈이 파싱되지 않아 가져올 수 없었다(CHANGELOG "고침 (어휘 분석)"). 따라서 이 모듈들의 동작 차이는 v0.5 에서 돌던 코드에 영향을 주지 않는다. 아래는 v0.5 에서도 가져올 수 있었던 모듈의 변화다.
| 함수 | v0.5 | v0.6 |
|---|---|---|
math.평균(arr) | 정수 배열이면 정수 나눗셈(평균([1, 2]) → 1) | 실수(평균([1, 2]) → 1.5) |
math.제곱근(x) | 정수 나눗셈 근사(제곱근(2) → 1) | 내장 제곱근 의 값(제곱근(2) → 1.41421). 음수는 없음 |
utils.범위_단계(시작, 끝, 단계) | 단계가 0 이하면 끝나지 않음 | [] |
utils 의 타입 검사(정수인가 등 5개) | 영문 타입 이름과 비교해 항상 거짓 | 실제 타입에 맞으면 참 |
utils.정수를_문자로(n) | 0~9 외에는 빈 문자열 | 문자열(n) 과 같다 |
regex.줄바꿈_정리(s) | 역슬래시와 n 두 글자를 넣음 | 줄바꿈 문자를 넣음 |
json.JSON_가져오기(obj, 키) | 배열이 아닌 값에서 타입 오류로 중단 | 없음 |
v0.6 에서 처음 쓸 수 있게 된 모듈에서 알아 둘 점:
io를 가져와도파일_크기,파일명_추출,확장자_추출은 내장 함수다.파일_크기는 바이트 수를 돌려주고 없는 파일이면 실행 오류를 내며,확장자_추출은 점을 포함한다(".txt").db는 테이블·컬럼 이름을 큰따옴표 식별자로 감싼다.main.users처럼 점으로 스키마를 붙인 이름은 한 덩어리 이름으로 읽힌다. 외부 입력을 조건에 쓸 때는 문자열 대신 쌍 배열[["컬럼", 값]]으로 넘긴다.
4. C++ 로 인터프리터를 포함하는 코드
Value, Environment, EventLoop 헤더가 src/evaluator/ 에서 src/runtime/ 으로 옮겨졌다. 네임스페이스(kingsejong::evaluator)는 그대로이고 include 경로만 바뀐다.
// v0.5
#include "evaluator/Value.h"
// v0.6
#include "runtime/Value.h"