4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作言語「Rubihuru」で、さらに自作言語「Rhlisp」を作ってみた話

4
Last updated at Posted at 2026-05-29

注意 本記事は、AI と一緒に書きました。

 プログラミング言語を自作することは、多くのエンジニアにとって一つの夢です。しかし、私はその一歩先へ進むことにしました。自分が開発したオリジナル言語「Rubihuru」を使い、その上で動くLisp系言語「Rhlisp」を実装したのです。言語の中で別の言語を作るという、最高にエキサイティングで頭がねじれるような開発体験を、ここで共有します。

1. ベースとなる自作言語「Rubihuru」

「Rhlisp」の土台となったのが、私が開発しているオリジナル言語「Rubihuru」です。自分の手で一からパーサーや評価器を書き上げ、自分が扱いやすいようにデザインした、世界に一つだけの言語です。今回はこの「Rubihuru」の表現力を試す最大の実証実験として、Lispの実装へと踏み切りました。

2. なぜ、自作言語の上で「Lisp」を作ったのか?

 数ある言語の中で、なぜLispを選んだのか。理由はシンプルで、Lispが「もっとも美しく、本質的な言語」だからです。Lispの構文は、すべてが「S式」と呼ばれるシンプルなリスト構造で表現されます。構文(パース)がシンプルであること、そしてデータとプログラムが同じ構造を持つという特性のおかげで、自作言語「Rubihuru」の機能を使って、比較的ストレートに評価器(Evaluator)を記述できると考えたのがきっかけでした。

3. 「Rhlisp」の実装プロセス

 Rubihuruの上で動く「Rhlisp」を作るため、主に以下のコンポーネントをRubihuruで実装していきました。

  • 【字句解析・構文解析】
    Rhlispのコード(カッコの並び)を読み込み、Rubihuruのデータ構造(配列やリスト)へと変換します。Lispのパースは単純と言われますが、自作言語の文字列処理機能 1 をフル活用する良いテストになりました。
  • 【環境(Environment)の管理】
    変数や関数を記憶するための「スコープ」の実装です。親スコープへの参照を持つマップ構造を使い、Rhlisp内のローカル変数が正しく評価されるようにしました。
  • 【評価器(eval)の構築】
    Rhlispの核心部分です。iflambda(関数定義)などの基本形を処理し、関数呼び出しをRubihuruの処理へとマッピングしていきます。

4. 開発を通じて得られた「最高の脳内麻薬」

 この開発を通じて、いくつかの強烈な面白さと気づきがありました。

  • 自作言語の「バグ」があぶり出される
    Rhlispを実装していると、Rhlispのバグではなく、それを動かしているベース言語「Rubihuru」のバグや考慮漏れが次々と見つかりました。「自作言語のデバッグを、その上の自作言語で行う」という、奇妙で贅沢なデバッグ体験を味わいました。
  • 階層を突き抜けて動いた瞬間の感動
    Rubihuruで書いたRhlispの評価器に、カッコだらけのLispコードを流し込む。そして、正しい計算結果が画面に返ってきた瞬間——。自分の作った世界(Rubihuru)が、新しい生命(Rhlisp)を宿したような、筆舌に尽くしがたい達成感がありました。

5. まとめとこれからの展望

 自作言語で自作言語を作る。一見すると「車輪の再発明の再発明」のような遠回りに見えるかもしれません。しかし、言語の仕組みを深部まで理解する上で、これ以上楽しく、学びの深いプロジェクトはありませんでした。

 今後「Rhlisp」の機能をさらに拡張し、ゆくゆくはRubihuruとRhlispが互いに影響を与え合うような、面白い機能(マクロの強化など)を追加していきたいと考えています。 2

 追記: ( 2026/5/30 ) 今日の朝、「鬼車」(oniguruma) という正規表現のライブラリを採用しました。メゾットとして Regexクラスと Regex#=~ 、 String クラスに String#match / String#scan を導入しました。

  1. 実態は、高度な処理機能というよりも if 文による泥臭い条件分岐の連続でしたが……。

  2. マクロはあるのはあるのですが、使い勝手が悪いと思います。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?