KingSejong 프로그래밍 언어 - 프로젝트 개요
세종대왕의 정신을 계승한 혁신적인 한글 프로그래밍 언어
언어명: KingSejong 파일 확장자: .ksj현재 버전: v0.5.0 (Phase 8 완료) 저장소: https://github.com/kingsejong-lang/kingsejong-lang테스트: 1,503개 (100% 통과)
프로젝트 배경
기존 프로젝트의 한계
원본 프로젝트 (KoreanLanguage):
- 단순히 Python/JavaScript 키워드를 한글로 번역
- 한글의 언어적 특성 미활용
- 라이센스 미지정으로 법적 문제
KingSejong의 차별점 (✅ 이미 구현됨)
혁신적 접근:
- ✅ 한글의 교착어 특성 활용 (조사 기반 문법)
- ✅ 자연어 수준의 가독성
- ✅ Python/JavaScript의 단점 개선
- ✅ 교육에 최적화된 설계
- ✅ 평가기와 동치인 바이트코드 VM (
--vm) - ✅ LSP, 디버거, VS Code 확장
언어 이름의 의미
KingSejong (킹세종)
세종대왕의 정신 계승:
- 훈민정음 창제 (1443년) - "백성을 가르치는 바른 소리"
- 과학적이고 체계적인 문자 체계
- 교육과 계몽의 정신
KingSejong 언어의 목표 (✅ 달성):
- ✅ 한글로 프로그래밍을 배우는 장벽 제거
- ✅ 세종대왕처럼 "백성(초보자)을 가르치는" 언어
- ✅ 한글의 우수성을 프로그래밍에 적용
- ✅ 실용적인 개발 도구 제공 (LSP, 디버거, VS Code)
핵심 혁신 기능 (✅ 구현 완료)
1. 조사 기반 메서드 체인 ✅
기존 언어 (Python/JavaScript):
user.getName().toUpperCase().split();
// "user의 getName의 toUpperCase의 split" - 부자연스러움KingSejong (✅ 구현 완료):
사용자의 이름을 대문자로 바꾸고 공백으로 나눈다
# 구현 완료된 예시
배열을 정렬한다
문자열을 쉼표로 나눈다
숫자들에서 짝수만 걸러낸다혁신성 (이미 구현됨):
- ✅ 조사(
을/를,로,의)가 문법 관계 명시 - ✅ 읽는 순서 = 실행 순서
- ✅ 한국어 화자에게 극도로 자연스러움
- ✅ JosaExpression AST 노드로 구현
2. 자연스러운 범위 표현 ✅
기존 언어의 문제:
# Python - 혼란스러움
range(1, 10) # 1~9 (10은 포함 안됨!)
list[0:5] # 0~4 (5는 포함 안됨!)KingSejong (✅ 구현 완료):
1부터 10까지 # 1, 2, 3, ..., 10 (10 포함!)
1부터 10미만 # 1, 2, 3, ..., 9
1초과 10이하 # 2, 3, 4, ..., 10
# 반복문
반복 (i가 1부터 10까지) {
출력(i) # 정확히 10번 실행
}
# 배열 슬라이싱 (구현 완료)
배열[첫번째부터 다섯번째까지] # 5개 포함교육적 가치 (달성):
- ✅ 수학 표기법과 완벽히 일치
- ✅ 초보자 혼란 완전 제거
- ✅ 일상 언어와 동일
- ✅ RangeExpression AST 노드로 구현
3. Async/Await 비동기 처리 ✅
기존 언어:
async function getData() {
const response = await fetch(url);
const data = await response.json();
return data;
}KingSejong (✅ 구현 완료):
비동기_함수 데이터_가져오기() {
응답 = API_호출()를_기다린다
데이터 = 응답_처리()를_기다린다
반환 데이터
}장점 (구현됨):
- ✅
async/await키워드 지원 - ✅ AsyncFunctionLiteral, AwaitExpression AST 노드
- ✅ Promise 기반 비동기 처리
- ✅ 자연스러운 한글 표현
4. 명확한 타입 시스템 ✅
기존 언어의 혼란:
// JavaScript
5 + "3" // "53" (문자열)
5 - "3" // 2 (숫자)
[] + {} // ???KingSejong (✅ 구현 완료):
정수 나이 = 15
문자열 이름 = "철수"
실수 키 = 175.5
나이 + 이름 # 에러: 정수와 문자열은 더할 수 없습니다
나이를_문자열로() + 이름 # OK: "15철수"5. 값 없음의 명확화 ✅
기존 언어:
null, undefined, NaN, 0, false, ''; // 너무 많음KingSejong (✅ 구현 완료):
값 = 없음 # 단일 개념
만약 (값이 없으면) {
출력("값이 없습니다")
}
결과 = 값 또는 "기본값"6. 직관적 반복문 ✅
KingSejong (✅ 구현 완료):
# 횟수 반복
10번 반복한다 {
출력("안녕")
}
# 범위 반복
i가 1부터 10까지 반복한다 {
출력(i)
}
# 컬렉션 반복
항목들 각각에 대해 항목으로 {
출력(항목)
}실제 코드 예시 (모두 동작함)
Hello World
출력("안녕하세요, KingSejong!")변수와 타입
정수 나이 = 15
문자열 이름 = "김철수"
실수 키 = 175.5
출력(이름 + "님의 나이는 " + 나이를_문자열로() + "세입니다")조건문
만약 (나이가 18이상) {
출력("성인입니다")
} 아니면 {
출력("미성년자입니다")
}
# 또는
만약 (나이 >= 18) {
출력("성인입니다")
} 아니면 {
출력("미성년자입니다")
}반복문
# 방법 1: 횟수
5번 반복한다 {
출력("안녕")
}
# 방법 2: 범위
i가 1부터 5까지 반복한다 {
출력(i)
}
# 방법 3: 컬렉션
숫자들 = [1, 2, 3, 4, 5]
숫자들 각각에 대해 숫자로 {
출력(숫자)
}함수
함수 인사하기(이름) {
반환 "안녕하세요, " + 이름 + "님!"
}
메시지 = 인사하기("철수")
출력(메시지)
# 타입 지정
함수 덧셈(a: 정수, b: 정수) -> 정수 {
반환 a + b
}배열 처리 (조사 활용)
숫자들 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 방법 1: 자연어처럼
짝수들 = 숫자들에서 짝수만 걸러낸다
제곱들 = 짝수들을 각각 제곱한다
# 방법 2: 체인
결과 = 숫자들에서 짝수만_걸러내고 각각을_제곱한다
# 방법 3: 명시적 반복 (초보자용)
결과 = []
숫자들 각각에 대해 숫자로 {
만약 (숫자가 짝수이면) {
결과에 숫자^2를 추가
}
}에러 처리
시도 {
결과 = 10 / 0
} 에러나면 {
출력("0으로 나눌 수 없습니다")
}
# 또는 간결하게
결과 = (10 / 0) 또는_에러시 "계산불가"기술 스택 (✅ 구현 완료)
언어 구현
- 언어: C++23
- 빌드: CMake 3.21+
- 아키텍처: ✅ tree-walking 평가기 + Bytecode VM (값 의미 공유)
- GC: ✅ 세대별 가비지 컬렉터 (Young/Old Generation)
- 테스트: GoogleTest (1,503개 테스트, 100% 통과)
구성 요소 (모두 구현됨)
kingsejong-lang/
├── lexer/ ✅ 어휘 분석 (조사 인식 포함)
├── parser/ ✅ 구문 분석 (조사 체인, 범위 표현)
├── ast/ ✅ 추상 구문 트리
├── evaluator/ ✅ 실행 엔진
├── types/ ✅ 타입 시스템
├── error/ ✅ 에러 처리
├── module/ ✅ 모듈 시스템
├── lsp/ ✅ Language Server Protocol
├── debugger/ ✅ 디버거
├── jit/ ✅ JIT 컴파일러
├── linter/ ✅ 정적 분석기
├── stdlib/ ✅ 표준 라이브러리 (.ksj 파일, 14개 모듈)
├── repl/ ✅ 대화형 환경
└── tests/ ✅ 테스트 (1,503개)개발 로드맵
✅ Phase 0-8: 완료 (2025-11-20)
Phase 0: 프로젝트 초기화 ✅
- [x] 프로젝트 구조 설계
- [x] Lexer/Parser 기본 구조
- [x] 조사 인식 시스템
- [x] 테스트 프레임워크
Phase 1: 핵심 차별화 기능 ✅
- [x] 조사 기반 메서드 체인
- [x] 자연스러운 범위 표현 (
1부터 10까지) - [x] 명확한 타입 시스템 (
정수 나이) - [x] 기본 타입 (정수, 실수, 문자열, 불린)
- [x] 조건문 (if/else)
- [x] 반복문 (for, while)
- [x] 함수 정의/호출
- [x] 표준 라이브러리 (
출력,입력)
Phase 2-7: 고급 기능 ✅ 9. [x] 배열/리스트 10. [x] Async/Await 비동기 11. [x] Try/Catch/Finally 12. [x] 패턴 매칭 13. [x] 파일 I/O 14. [x] 모듈 시스템 15. [x] 바이트코드 컴파일러 (56개 OpCode) 16. [x] JIT Compiler Tier 1 17. [x] 세대별 GC 18. [x] 디버거 19. [x] LSP 20. [x] Linter & Formatter 21. [x] VS Code 확장 22. [ ] ksjpm 패키지 관리자 (2026-10 제거: 저장소·다운로드 없는 뼈대)
Phase 8: 코드 품질 및 문서화 ✅
- [x] Doxygen 설정
- [x] USER_GUIDE.md
- [x] regression_test.py
- [x] 1,503개 테스트 (100% 통과)
📝 Phase 9 이후: 계획 중
Phase 9: 리팩토링 및 최적화
- [ ] 긴 함수 리팩토링 (VM, Evaluator)
- [ ] Incremental GC 구현
- [ ] 메모리 풀링 전략
장기 계획:
- [ ] LLVM 백엔드 (선택)
- [ ] 멀티스레딩 지원
- [ ] 세미콜론 필수화 (v2.0.0)
핵심 차별점 요약 (✅ 모두 구현됨)
| 특징 | Python/JS | KingSejong | 차별성 | 상태 |
|---|---|---|---|---|
| 메서드 체인 | .method() | 을/를/로 활용 | 조사로 관계 명확 | ✅ |
| 범위 표현 | range(1,10) → 9까지 | 1부터 10까지 → 10까지 | 수학 표기 일치 | ✅ |
| 비동기 | async/await | 비동기_함수, 기다린다 | Async/Await 지원 | ✅ |
| 타입 | 동적 (약함) | 정수 나이 | 명시적 | ✅ |
| 값 없음 | null/undefined/None | 없음 | 단일 개념 | ✅ |
| 반복 | for in range | 10번, 1부터 10까지 | 자연어 | ✅ |
| 에러 | try/except | 시도, 에러나면 | 간결함 | ✅ |
| VM | CPython (느림) | Bytecode VM (--vm) | 고성능 | ✅ |
| 도구 | 별도 설치 | LSP, 디버거 내장 | 통합 개발 환경 | ✅ |
예상 사용 시나리오
초등학교 교육
# 1학년 - 기초
10번 반복한다 {
출력("안녕하세요!")
}
# 4학년 - 구구단
단 = 정수(입력("몇 단?"))
i가 1부터 9까지 반복한다 {
출력(단 + " x " + i + " = " + (단 * i))
}중학교 교육
# 알고리즘 - 피보나치
함수 피보나치(n: 정수) -> 정수 {
만약 (n <= 1) {
반환 n
}
반환 피보나치(n-1) + 피보나치(n-2)
}
i가 0부터 10까지 반복한다 {
출력(피보나치(i))
}고등학교 교육
# 데이터 처리
학생들 = [
{이름: "철수", 점수: 85},
{이름: "영희", 점수: 92},
{이름: "민수", 점수: 78}
]
우수학생들 = 학생들에서 (학생 -> 학생.점수 >= 80) 필터
우수학생들 각각에 대해 학생으로 {
출력(학생.이름 + ": " + 학생.점수 + "점")
}비교: 원본 vs Sejong
원본 프로젝트 (KoreanLanguage)
만약 (나이 >= 18) {
출력("성인")
}- 단순 키워드 번역
- Python/JS와 동일한 구조
- 한글 특성 미활용
Sejong 프로젝트
만약 (나이가 18이상) {
출력("성인")
}
# 또는 더 자연스럽게
나이가 18이상이면 {
"성인"을 출력한다
}- 조사 활용
- 자연어 수준 표현
- 한글 특성 극대화
프로젝트 목표
✅ 단기 목표 (6개월) - 달성!
- ✅ 기본 인터프리터 완성
- ✅ 핵심 차별화 기능 구현
- ✅ 예제 프로그램 21개
- 🚧 온라인 플레이그라운드 (WebAssembly)
✅ 중기 목표 (1년) - 대부분 달성!
- ✅ 바이트코드 컴파일러
- ✅ 풍부한 표준 라이브러리 (14개 모듈, 182개 함수)
- 📝 교육 기관 파일럿 테스트
- 📝 커뮤니티 구축
📝 장기 목표 (2년)
- 📝 정식 교육 과정 통합
- ✅ JIT 컴파일러 Tier 1 (완료)
ksjpm 패키지 관리자(2026-10 제거)- 📝 국제 확산 (한국어 학습자용)
라이센스
MIT License ✅
현재 라이센스: MIT License (적용 완료)
이유:
- ✅ 교육용에 최적
- ✅ 상업적 활용 허용
- ✅ 커뮤니티 기여 활성화
- ✅ 국제적으로 가장 널리 사용
저작권 표시:
MIT License
Copyright (c) 2025 KingSejong Programming Language Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...현재 상태 및 다음 단계
✅ 현재 상태 (v0.5.0, Phase 8 완료)
- ✅ GitHub 저장소: https://github.com/kingsejong-lang/kingsejong-lang
- ✅ 프로젝트 구조: 완성됨
- ✅ Lexer/Parser: 조사 인식 시스템 포함 완성
- ✅ README 및 문서: 완전히 작성됨
- ✅ AST: 모든 노드 타입 구현
- ✅ 테스트 프레임워크: GoogleTest (1,503개 테스트)
- ✅ 예제: 21개 프로그램
- ✅ Evaluator: 실행 엔진 완성
- ✅ 타입 시스템:
정수 나이완성 - ✅ 범위 표현:
1부터 10까지완성 - ✅ Bytecode VM: 평가기와 같은 결과를 내는 두 번째 실행 엔진
- ✅ LSP + 디버거 + VS Code: 통합 개발 환경
📝 다음 Phase (9 이후)
Phase 9: 리팩토링 및 최적화
- [ ] 긴 함수 리팩토링 (VM, Evaluator)
- [ ] Incremental GC 구현
- [ ] 메모리 풀링 전략
- [ ] stdlib/http, stdlib/db 완성
v1.0.0 릴리스 준비:
- [ ] 최종 안정화
- [ ] 릴리스 노트 작성
- [ ] 프로덕션 배포
참고 문서
KingSejong 프로젝트의 상세 문서:
| 문서 | 내용 | 상태 |
|---|---|---|
| LANGUAGE_DESIGN_PHILOSOPHY.md | 언어 설계 철학 및 핵심 아이디어 | ✅ |
| FEATURES.md | KingSejong 기능 명세 | ✅ |
| IMPLEMENTATION.md | KingSejong 구현 계획 | ✅ |
| ../CONTRIBUTING.md | 개발 및 기여 가이드 | ✅ |
| ../ROADMAP.md | 개발 로드맵 및 진행 상황 | ✅ |
| ../TUTORIAL.md | 초보자 튜토리얼 | ✅ |
| ../USER_GUIDE.md | 사용자 가이드 | ✅ |
결론
KingSejong은 단순히 영어 키워드를 한글로 바꾼 언어가 아닙니다.
세종대왕이 한글을 창제할 때 백성을 가르치려는 정신처럼, KingSejong 언어는 한글의 언어적 장점을 활용하여누구나 쉽게 프로그래밍을 배울 수 있는 혁신적인 언어입니다.
현재 상태: v0.5.0, Phase 8 완료
- ✅ 핵심 기능 모두 구현
- ✅ 1,503개 테스트 (100% 통과)
- ✅ 14개 표준 라이브러리 모듈 (182개 함수)
- ✅ LSP, 디버거, VS Code 확장
- ✅ Bytecode VM (평가기와 동치)
"백성을 가르치는 바른 코드" - KingSejong Programming Language