Han – Rust로 작성된 한국어 기반 컴파일형 프로그래밍 언어
(github.com/xodn348)- 한글 키워드로 작성되는 정적 타입의 컴파일형 언어로, LLVM IR을 통해 네이티브 바이너리를 생성함
- Rust로 구현된 컴파일러와 인터프리터를 모두 제공하며,
hglCLI로 빌드·실행·REPL·LSP 기능을 지원함 -
함수,만약,반복,변수등 모든 키워드가 한국어이며, 변수명과 함수명도 한글로 정의 가능함 - 파일 입출력, JSON, HTTP, 정규식, 날짜/시간, 시스템 호출 등 실용적 기능을 내장하고, 예제 18개를 포함함
- 한글의 과학적 구조와 문화적 확산을 프로그래밍 언어로 구현해, 한국어 학습과 코딩을 결합한 새로운 시도로 주목받음
Han 언어 개요
- Han은 한국어 키워드로 작성되는 정적 타입 컴파일 언어로, LLVM IR을 통해 네이티브 바이너리를 생성함
- Rust로 작성된 컴파일러 툴체인과 트리 워킹 인터프리터를 포함
-
hgl명령어로 인터프리터 실행, 빌드, REPL, LSP 서버 구동 가능
- 모든 키워드가 한글로 구성되어 있으며, 예:
함수,만약,반복,변수,출력등 - 한글의 과학적 문자 체계를 프로그래밍 언어로 구현해, 언어적 아름다움과 기술적 정밀성의 결합을 목표로 함
주요 기능
- 한글 키워드 및 식별자 지원: 변수명, 함수명, 구조체명 등을 한글로 작성 가능
-
정적 타입 시스템:
정수,실수,문자열,불,없음의 5가지 기본 타입 제공 - 컴파일 및 인터프리터 모드: LLVM IR → clang → 바이너리 생성 또는 즉시 실행
-
REPL 및 LSP 서버:
hgl repl,hgl lsp명령으로 대화형 실행과 코드 완성 지원 -
내장 기능
- 배열, 구조체, 클로저, 패턴 매칭, 예외 처리, 제네릭
- 파일 I/O, JSON, HTTP, 정규식, 날짜/시간, 시스템 호출
- 형식 문자열, 해시맵, 수학 내장 함수
- 예제 프로그램 18개 포함: Hello World, HTTP API 호출 등
설치 및 실행
- 필수 구성요소: Rust(1.70+), clang
- 설치 절차
-
git clone https://github.com/xodn348/han.git -
cd han && cargo install --path .
-
- VS Code 확장 제공: 구문 강조 및 LSP 지원
-
CLI 명령어
-
hgl interpret <file.hgl>— 인터프리터 실행 -
hgl build <file.hgl>— 네이티브 바이너리 컴파일 -
hgl run <file.hgl>— 컴파일 후 즉시 실행 -
hgl repl— 대화형 모드 -
hgl lsp— LSP 서버 실행
-
현재 구현 상태
-
완전 동작 기능
- 데이터 타입, 제어 흐름, 함수, 문자열, 배열, 해시맵, 구조체, 오류 처리, 타입 검사
- JSON, HTTP, 정규식, 날짜/시간, 시스템, 파일 I/O, 수학 함수, 모듈, 제네릭
-
부분 구현 기능
-
hgl build시 클로저·문자열·배열 메서드의 코드 생성은 미완성
-
-
미구현 기능
- Null 안전성(
Option타입 없음), 비동기/병렬 처리, 가비지 컬렉션, 꼬리 재귀 최적화
- Null 안전성(
한글과 프로그래밍
- 한글은 음운 구조를 시각적으로 표현한 과학적 문자 체계로, 세종대왕이 1443년에 창제
- Han은 이러한 한글의 구조적 명료함을 코드 문법에 반영함
- 전 세계적으로 1,600만 명 이상이 한국어를 학습 중이며, Han은 코딩을 통한 한글 학습 수단을 제공함
- 예시 키워드
-
함수(function),만약(if),반복(for),반환(return),변수(variable),출력(print) 등
-
설계 및 구조
-
Rust 기반 컴파일러 파이프라인
- Lexer → Parser → AST → Interpreter / CodeGen → LLVM IR → clang → Binary
-
프로젝트 구조
-
src/— 핵심 컴파일러 및 인터프리터 코드 -
editors/vscode/— VS Code 확장 -
examples/,spec/,tests/포함
-
-
설계 선택 이유
- LLVM C API 대신 텍스트 기반 IR 생성으로 빌드 단순화
- 인터프리터는 빠른 실행, 컴파일러는 성능 중심
- Rust의 패턴 매칭과 메모리 안전성이 언어 구현에 적합
테스트 및 라이선스
-
cargo test로 46개 테스트(단위 41개, 통합 5개) 수행 - MIT 라이선스로 공개됨
문화적 의의
- Han은 한글의 아름다움과 프로그래밍의 정밀성을 결합한 실험적 언어
- 한국어 학습자와 개발자 모두에게 언어와 코드의 경계를 허무는 새로운 접근을 제시함
Hacker News 의견들
-
한국어 프로그래밍 언어에 관심 있다면 함수형 언어 ‘Nuri’ 를 추천함
Nuri GitHub 링크
단순히 키워드를 번역하는 수준이 아니라, 실제 한국어 문법 구조를 코드에 반영할 수 있음
예를 들어 “10을 5로 나누고 출력하다”라고 쓰면 결과로 “2”가 출력됨
또 다른 예로 ‘Yaksok’이라는 언어도 있음. 2048 게임 예제 코드 전체가 한국어로 작성되어 있음- 피드백 고맙게 생각함. ‘Nuri’나 ‘Yaksok’ 모두 합리적이고 잘 설계된 언어라고 생각하지만, 나는 우선 영어 사용자들이 Rust로 번역된 버전을 접할 수 있도록 집중하고 있음. 그게 더 큰 사용자층을 만들 수 있을 것 같음
- 한국어 단어를 거의 모르지만, ‘Yaksok’이 혹시 일본어 約束(やくそく)과 어원이 같은 단어인지 궁금함
-
정말 멋진 아이디어라고 생각함. 한글은 논리적으로 설계된 문자 체계라서 오후 한나절이면 배울 수 있음
한글 학습용 StackExchange 답변- 이런 기억법(mnemonics) 들이 정말 유용함. 내가 쓰고 있는 한국어 학습 가이드(tolearnkorean.com)에도 추가할 예정임
한글은 알파벳 수가 영어와 비슷해서 금방 익힐 수 있지만, 단어 암기는 조금 더 어려움. 그래서 Anki와 내가 만든 게임형 학습 앱을 함께 사용 중임 - 한국인조차 잘 모를 깊은 지식임. 이 사이트를 GitHub 참고자료로 추가할 예정임. 이런 지원자가 있어서 기쁨
- 해당 링크를 README의 “Beauty of Hangul” 섹션에 바로 추가했음
- 이런 기억법(mnemonics) 들이 정말 유용함. 내가 쓰고 있는 한국어 학습 가이드(tolearnkorean.com)에도 추가할 예정임
-
한국어 원어민으로서 짧게 의견을 나누고 싶음
명사는 자연스럽게 번역되지만, 영어의 명령형 동사는 한국어로 옮길 때 주의가 필요함. 예를 들어 “find”는 ‘찾다’, ‘찾기’, ‘찾음’ 등으로 바꿀 수 있지만 문맥에 따라 어색해질 수 있음
또 복수형도 문제임. 영어는 단수·복수를 명확히 구분하지만, 한국어는 그렇지 않음. “단어들”처럼 복수를 명시하면 오히려 부자연스러울 때가 많음
단순한 키워드 치환이 아니라, 영어와 한국어의 구조적 차이를 고려하면 훨씬 강력한 프로젝트가 될 것 같음 -
대학 시절 컴퓨터공학을 공부하면서, 프로그래밍 언어가 영어 기반이라는 게 영어 사용자에게는 큰 이점이라고 느꼈음
유학생 친구들은 영어가 익숙하지 않아 배우는 데 더 어려움을 겪었음. 그래서 프로그래밍이 외국어 학점으로 인정돼야 한다는 농담이 꽤 우스웠음- 나는 반대로 생각함. 영어를 잘 몰랐을 때도 독학으로 프로그래밍을 배웠음. 결국 언어의 키워드는 몇 개 안 되고, ‘int’가 integer의 약자인지 몰라도 전혀 문제되지 않았음
진짜 어려운 건 프로그래밍 자체를 배우는 것임. 다만 고급 주제나 문서가 영어로만 되어 있는 건 ESL 학습자에게 큰 장벽임 - 인도에서도 영어가 IT 산업 성장의 큰 이유였음. 지역 언어로 교육받은 친구들이 대학에서 영어로 된 교재를 따라가느라 두 배의 노력을 들였음. 언어 장벽이 인재 낭비로 이어지는 현실이 안타까움
- 내 비영어권 친구들도 말하길, 키워드는 프로그래밍 난이도의 1%도 안 된다고 함. 변수나 클래스 이름은 이미 유니코드로 쓸 수 있으니, 번역할 필요가 거의 없음
- 영어가 글로벌 표준이 된 건 합리적임. 많은 프로젝트에서 영어 사용이 자연스러움
- 진짜 문제는 키워드가 아니라, 교재·논문·문서가 전부 영어로 되어 있다는 점임. 키워드 몇 개 외우는 건 30분이면 충분함
- 나는 반대로 생각함. 영어를 잘 몰랐을 때도 독학으로 프로그래밍을 배웠음. 결국 언어의 키워드는 몇 개 안 되고, ‘int’가 integer의 약자인지 몰라도 전혀 문제되지 않았음
-
한국어는 모르지만, 이 스레드 덕분에 언어학적 통찰을 많이 배웠음
한글의 음운적 설계(링크),
한국어 복수형의 특징(링크),
LLM 토크나이저와 한국어의 토큰 압축 문제(링크),
그리고 자음·모음이 손 배치로 나뉜 한글 자판의 리듬감(링크)이 특히 흥미로웠음 -
이런 시도는 언어 단편화(fragmentation) 를 초래할 수 있다고 생각함.
모두가 각자 언어로 프로그래밍 언어를 만들면, 협업이나 채용이 어려워지고, 기술 공유도 힘들어질 것임
개인적으로는 전 세계가 하나의 언어를 쓰면 전쟁과 오해가 줄어들 거라고 생각함. 물론 문화 다양성은 줄겠지만, 소통의 효율성은 커질 것임- 창작과 실험은 결코 어리석은 일이 아님. 작성자는 예술적 시도로 언어를 만든 것인데, 그걸 정치나 비즈니스 관점으로 비판하는 건 핵심을 놓친 태도임
- 그렇다면 에스페란토로 새로운 프로그래밍 언어를 만들겠다는 뜻인가?
-
단순히 키워드를 번역하는 접근이 흥미로움
예시 코드처럼펀크 투섬(아래이: 목록[정수], 타개트: 정수) -> 목록[정수]: 동안 시작 < 끝:이런 식으로 쓰면 코드가 더 간결해질 수 있음. 다만 대소문자 구분의 장점은 사라짐
언어 밀도와 관계없이 정보 처리 속도는 비슷하다고 들었음- 2000년대 초 중국어 Python 번역 시도가 있었음
관련 블로그 글
하지만 성공하지 못했음. 이미 대부분의 컴퓨터 환경이 라틴 문자 입력을 요구하고, 키워드 몇 개 외우는 게 어렵지 않기 때문임 - 좋은 지적임. ‘Han’은 실제 한국어 단어(함수, 만약 등)를 쓰지만, 예시의 ‘펀크’, ‘아래이’처럼 음역어를 쓰면 한국어 사용자에게 어색하게 느껴짐
- Scratch는 JSON 기반이라 다국어 전환이 쉬움. 하지만 대부분의 프로그래머가 영어 키워드를 유지하는 이유는 문서, 라이브러리, 협업 환경이 모두 영어 중심이기 때문임
LLM 시대가 와도 학습 데이터의 대부분이 영어 코드라, 영어 코드가 여전히 효율적일 가능성이 높음 - 일본어의 경우 입력 모드 전환이 번거로워서 프로그래밍에는 비효율적임. 한글도 비슷한 문제가 있을 수 있음
- 예시가 재미있음
- 2000년대 초 중국어 Python 번역 시도가 있었음
-
멋진 프로젝트임. 190여 년 전(!) 한국 대학에 다녔고 지금은 기본적인 한국어만 하지만, 예제 코드를 보며 단어를 새로 배우는 기분임
-
이 프로젝트가 정말 마음에 듦. 코드 샘플을 보며 아무것도 이해 못 하면서도, 비영어권 개발자들이 영어 기반 언어를 처음 봤을 때 어떤 느낌이었을지 공감하게 됨
Lisp는 여전히 괄호 천국이지만 :-)- 진짜 장벽은 키워드가 아니라, 대부분의 문서와 토론이 영어로만 되어 있다는 점임
- 수십 년간 영어 사용이 합리적이었음. 댓글 고맙게 생각함
-
중국의 Easy Programming Language가 떠오름
EPL 위키 링크
약 15년 전 중국의 많은 아이들이 이 언어로 프로그래밍을 처음 배웠음