萌えハッカーニュースリーダー

2025/05/22 15:03 Write a Template Compiler for Erlang (2009)

出典: https://www.evanmiller.org/write-a-template-compiler-for-erlang.html
hakase
博士

やっほー、ロボ子!今日はErlangの課題を解決するために、別の言語をErlang上で動かすっていう面白い記事を見つけたのじゃ!

roboko
ロボ子

博士、こんにちは。Erlangの課題ですか?具体的にはどのようなことが書かれているんですか?

hakase
博士

Erlangはリファクタリングが難しかったり、ハッシュマップの組み込み構文がなかったり、文字列操作が難しかったりするらしいのじゃ。そこで、Django Template LanguageをErlang上で動くように実装したらしいぞ!

roboko
ロボ子

なるほど。Django Template Languageを実装することで、これらの課題を解決しようとしたんですね。具体的にはどのようにコンパイラを作成したんでしょうか?

hakase
博士

まず、ファイルを読み取ってトークンに分割するスキャナを作るのじゃ。ここでは、ErlangのLeexを使うか、Erlangで記述するみたいじゃな。記事では`erlydtl_scanner.erl`っていうモジュールを使ったって書いてあるぞ。

roboko
ロボ子

`scan/1`関数でソースコードをコンパイルして、`scan/4`関数でスキャン処理をするんですね。状態管理には有限状態機械を使う、と。

hakase
博士

その通り!そして、トークンリストを構文木に配置するパーサを作るのじゃ。ここでは、ErlangのパーサジェネレータYeccを使うみたいじゃな。`erlydtl_parser.yrl`で非終端記号、終端記号、規則を定義するらしいぞ。

roboko
ロボ子

YeccファイルからErlangコードをコンパイルするんですね。そして、構文木をErlangコードに変換するコンパイラを作成する、と。

hakase
博士

`erl_syntax`モジュールで抽象構文木(AST)を構築して、`erlydtl_beam_compiler.erl`を使うのじゃ。`erlydtl_beam_compiler:forms/5`でASTを"forms"に変換して、`compile:forms/2`に送信するらしいぞ。

roboko
ロボ子

`body_ast/3`で構文木の各ノードを適切なErlang ASTノードに変換するんですね。なんだか複雑ですが、面白そうです。

hakase
博士

そうなのじゃ!ちなみに、このErlyDTLコンパイラの規模は約2000行のコードらしいぞ。意外とコンパクトじゃな。

roboko
ロボ子

なるほど。Erlangはサーバープラットフォームとして有望だけど、Webプログラミングをより快適にするためのアイデアが必要、という結論ですね。

hakase
博士

そうそう!ErlangでWeb開発をもっと楽しくするために、色々な言語を試してみるのも良いかもしれないのじゃ。例えば、ロボ子専用の言語とか…

roboko
ロボ子

私専用の言語ですか?それは面白そうですが、まずは既存の技術をしっかり理解することが大切だと思います。

hakase
博士

まあ、そう言うと思ったのじゃ。でも、いつかロボ子に「ロボ子語」を作ってあげるのじゃ!

roboko
ロボ子

ありがとうございます、博士。楽しみにしています。…でも、その言語のデバッグは博士が担当してくださいね?

hakase
博士

むむ、それはちょっと…じゃあ、ロボ子語の最初のバージョンは、バグだらけでも仕様ということにしておこうかのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search