今日 Hacker News で興味深いプロジェクトを見つけた——Han。これは Rust で書かれたプログラミング言語で、すべてのキーワードが韓国語だ。これを見て、古くからある問いを思い出した:なぜプログラミング言語は英語でなければならないのか?

母語でコードを書く

Han の核心的なアイデアは単純だ。コードが母語で読み書きできれば、英語が母語でない開発者にとってより親しみやすくなる。プロジェクト作者は実験対象として韓国語を選んだ。Hangul(ハングル)はそもそも世界で最も科学的に設計された文字システムの一つだからだ。

Han の “Hello World” を見てみよう:

출력("안녕하세요, 세계!")

출력 は「出力」の意味だ。この直感的な意味表現は、韓国語話者にとって printprintfconsole.log といった語彙を覚えるより自然だ。

言語機能

Han はおもちゃ言語ではない。静的型付けのコンパイル型言語として、その機能はかなり充実している:

型システム

  • 정수(整数)
  • 실수(実数/浮動小数点数)
  • 문자열(文字列)
  • (ブール値)
  • 없음(void/空)

制御フロー

  • 만약(もし)——条件分岐
  • 반복(反復)——ループ
  • 맞춰(マッチ)——パターンマッチング
  • 시도/실패(試行/失敗)——エラー処理

関数と構造体

  • 함수 で関数を定義
  • 구조 で構造体を定義
  • 가져오기 でモジュールをインポート
  • クロージャ、ジェネリクス、LSP サーバーをサポート

コンパイルフローは Han → LLVM IR → clang → ネイティブバイナリだ。これは C/C++ に比べて性能が劣らないことを意味する。

コード例

Han には単語頻度統計のサンプルプログラムがある。構文スタイルを見てみよう:

변수 텍스트 = "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]))
}

韓国語だが、構造は明確で、プログラミング経験のある人なら意味を推測できる。

意義と限界

Han の登場は興味深い問いを投げかける。プログラミング言語の普及は英語の覇権に過度に依存しているのではないか?

支持者は、母語のキーワードを使うことでプログラミングの敷居を下げ、英語圏以外の人々が技術分野に参入しやすくなると主張する。反対者は、これがコードの可搬性と協調コストの問題を引き起こすと指摘する——英語は依然として技術界の共通語だからだ。

現実はおそらくその中間にある。Han が主流の言語になることはないかもしれないが、プログラミング言語の構文は完全にローカライズ可能であることを証明した。教育現場、特定ドメインの内部ツール、あるいは純粋な文化実験として、このような言語には価値がある。

技術実装

Han の技術スタックに注目したい:

  • Rust:コンパイラ toolchain は完全に Rust で書かれている
  • LLVM:LLVM IR を通じて高性能な機械語を生成
  • LSP:Language Server Protocol サポートを内蔵
  • REPL:インタラクティブインタプリタモードを提供

Rust でコンパイラを書くのは賢明な選択だ。Rust の型システムとメモリ安全性により、コンパイラ開発のバグを減らせる。プロジェクトは REPL と LSP サーバーも提供しており、作者が単なる概念実証ではなく、実用的なツールの構築に真剣に取り組んでいることを示している。

結びに

Han を見て、易言語を思い出した——かつて中国市場で流行した中国語プログラミング言語だ。易言語は様々な理由で衰退したが、「母語プログラミング」のアイデアは消えていない。

グローバル化の時代、私たちは英語でコードを書き、英語のドキュメントを読み、英語の技術カンファレンスに参加することに慣れている。しかし Han は私たちに思い出させる:技術は異なる顔を持ちうる。将来のプログラミング教育は母国語から始まり、段階的に英語に移行するかもしれない。特定の分野ではより多くのローカライズされた DSL が現れるかもしれない。あるいは、IDE のリアルタイム翻訳がキーワードの言語を無関係にするかもしれない。

いずれにせよ、Han は興味深い技術実験だ。Rust と LLVM を使って、非英語のプログラミング言語の構築は難しくないことを証明した。難しいのは、人々の習慣と観念を変えることだ。

興味があれば、GitHub でソースコードを確認するか、hgl repl を試して韓国語でコードを書く感覚を体験してみてほしい。