
2026/03/15 6:27
**Show HN:Han – Rustで書かれた韓国語プログラミング言語**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
要約
ハンは静的型付けでコンパイルされるプログラミング言語で、キーワードはすべて韓国語で記述されています(例:함수、만약、반복、변수)。コンパイラはRustで実装され、LLVM IRを生成し、clangがそれをネイティブバイナリに変換します。ツリー走査型インタープリタ(
hgl interpret)により、すぐに実行して迅速な試験が可能です。
ハンの型システムは静的で、5つのプリミティブ型を持ちます—정수 (int)、실수 (float)、문자열 (string)、불 (bool)、그리고 없음 (void)。また配列・構造体・クロージャ・パターンマッチング・エラーハンドリング・ファイルI/O・フォーマット文字列・モジュール・ジェネリクス、組み込み数学関数もサポートしています。現在、配列と構造体はインタープリタのみで扱われており、コンパイラの完全なサポートは計画中です。
開発者はハンを REPL(
hgl repl)、LSP サーバー(hgl lsp)によるエディター上のホバー/補完、およびさまざまな CLI コマンド:interpret、build、run、repl で操作できます。VS Code 統合は editors/vscode ディレクトリにあります。インストールには Rust(≥1.70)と clang が必要で、他の外部コンパイラ依存はありません。
現在の制限としては、タプル・列挙型・非同期/並行処理・ネットワーキング・サブプロセス、および配列/構造体の完全なコンパイルサポートが欠如しています。これらのギャップは今後の開発優先事項を示しています。
本文
韓国語キーワードを採用した汎用コンパイル言語 ― Rust で実装
概要
Han(ハン)は、すべてのキーワードが韓国語で書かれた静的型付け・コンパイル型プログラミング言語です。
LLVM IR を経由してネイティブバイナリへコンパイルできるほか、即時実行用にツリー走査型インタープリターも同梱しています。コンパイラ・ツールチェーンはすべて Rust で書かれています。
Han は「プログラミングが国ごとに見た目を統一しなくてもよい」という考えから生まれました。ハングル――韓国語の文字体系――は人類史上最も科学的に設計されたスクリプトの一つであり、Han はその文字を「表示文字列」ではなく、一流のプログラミング言語として活用します。
主な特徴
| 機能 | 説明 |
|---|---|
韓国語キーワード – , , , | ハングルでロジックを書けます |
| ハングル識別子 | 変数・関数名を韓国語で記述 |
| コンパイル言語 | LLVM IR → clang → ネイティブバイナリ生成 |
| インタープリタモード | clang を使わず即座に実行 |
| REPL | で対話型実行 |
| LSPサーバー | でエディタのホバードキュメント・補完を提供 |
静的型付け – 5つのプリミティブ: (int), (float), (string), (bool), (void) | |
配列 – , インデクシング、負のインデックス、 等 | |
構造体 – と ブロックでフィールドアクセス | |
| クロージャ | (環境キャプチャ) |
| パターンマッチング | |
| エラーハンドリング | |
| ファイル I/O – 読み込み、書き込み、追記、存在確認 | |
フォーマット文字列 – 位置指定または名前付き | |
文字列メソッド – , , , , 等 | |
モジュールインポート – | |
ジェネリクス構文 – | |
| 組み込み数学関数 – 平方根、絶対値、べき乗、整数変換・浮動小数点変換、長さ |
速習
hello.hgl を作成
출력("안녕하세요, 세계!")
実行
hgl interpret hello.hgl # 出力: 안녕하세요, 세계!
または REPL に飛ぶ:
hgl repl 한> 출력("안녕!") 안녕!
実用例
ワードカウンタ
변수 텍스트 = "hello world hello han world hello" 변수 단어들 = 텍스트.분리(" ") 변수 단어목록 = [] 변수 개수목록 = [] 반복 변수 i = 0; i < 단어들.길이(); i += 1 { 변수 찾음 = 거짓 반복 변수 j = 0; j < 단어목록.길이(); j += 1 { 만약 단어목록[j] == 단어들[i] { 개수목록[j] = 개수목록[j] + 1 찾음 = 참 } } 만약 찾음 == 거짓 { 단어목록.추가(단어들[i]) 개수목록.추가(1) } } 반복 변수 i = 0; i < 단어목록.길이(); i += 1 { 출력(형식("{0}: {1}", 단어목록[i], 개수목록[i])) }
文字列計算機
함수 계산(식: 문자열) -> 정수 { 변수 부분 = 식.분리(" ") 변수 왼쪽 = 정수변환(부분[0]) 변수 연산자 = 부분[1] 변수 오른쪽 = 정수변환(부분[2]) 맞춰 연산자 { "+" => { 반환 왼쪽 + 오른쪽 } "-" => { 반환 왼쪽 - 오른쪽 } "*" => { 반환 왼쪽 * 오른쪽 } "/" => { 만약 오른쪽 == 0 { 출력("오류: 0으로 나눌 수 없습니다") 반환 0 } 반환 왼쪽 / 오른쪽 } _ => { 출력(형식("알 수 없는 연산자: {0}", 연산자)) 반환 0 } } } 출력(계산("10 + 20")) // 30 출력(계산("6 * 7")) // 42
構造体を使った Todo リスト
구조 할일 { 제목: 문자열, 완료: 불 } 변수 목록 = [] 함수 추가하기(목록: [할일], 제목: 문자열) { 목록.추가(할일 { 제목: 제목, 완료: 거짓 }) } 함수 완료처리(목록: [할일], index: 정수) { 목록[index].완료 = 참 } 함수 출력목록(목록: [할일]) { 반복 변수 i = 0; i < 목록.길이(); i += 1 { 변수 상태 = "[ ]" 만약 목록[i].완료 { 상태 = "[✓]" } 출력(형식("{0} {1}. {2}", 상태, i + 1, 목록[i].제목)) } } 추가하기(목록, "한글 프로그래밍 언어 만들기") 추가하기(목록, "README 작성하기") 추가하기(목록, "HN에 올리기") 완료처리(목록, 0) 완료처리(목록, 1) 출력("=== 할일 목록 ===") 출력목록(목록)
ファイル行数カウンタ
함수 줄수세기(경로: 문자열) -> 정수 { 시도 { 변수 내용 = 파일읽기(경로) 변수 줄들 = 내용.분리("\n") 반환 줄들.길이() } 실패(오류) { 출력(형식("오류: {0}", 오류)) 반환 0 } } 파일쓰기("/tmp/test.txt", "첫번째 줄\n두번째 줄\n세번째 줄\n") 출력(형식("줄 수: {0}", 줄수세기("/tmp/test.txt")))
インストール
前提条件
- Rust 1.70+
- clang(
用) –hgl build/run
またはxcode-select --installbrew install llvm
インストール手順
git clone https://github.com/xodn348/han.git cd han cargo install --path .
これで
hgl がシステム全体から利用可能になります。
VS Code 拡張機能
cd editors/vscode npm install && npm run compile # VS Code でフォルダを開き、F5 を押して構文ハイライト+LSP サポート付きデバッグ実行
CLI の使い方
| コマンド | 説明 |
|---|---|
| インタープリターで実行(clang は不要) |
| ネイティブバイナリへコンパイル(clang 必須) |
| コンパイルしてすぐに実行 |
| 対話型 REPL |
| LSP サーバー起動(ホバードキュメント・補完) |
現時点で Han ができること
- 完全稼働 – データ型、制御フロー、関数、文字列、配列、構造体、エラーハンドリング、ファイル I/O、組み込み数学、フォーマット文字列、モジュール、ジェネリクス
- 部分的/エッジケース –
リテラル、入れ子構造体の変更、混合 float‑int 演算などは未実装없음 - 未実装項目 – タプル、列挙型、非同期/並行処理、ネットワーキング、ガーベジコレクション、ターレール最適化
なぜ Han?
Han はハングルの美しさと現代的な開発ニーズを融合します。
韓国語学習者にプログラミングという新しい文脈で読解・執筆を体験させることで、文化とテクノロジーの架け橋となります。