新しいプログラミング言語を学ぶとき、簡単なLisp処理系を作るという話
SRANK

私は新たにプログラミング言語を学ぶとき、しばしば簡単なLisp処理系を作ってみます。いくつかの言語で取り組んでいるうちに、このLisp処理系群に小さな共通基盤も出来上がったりしているので、これを紹介しつつ、Lisp処理系の実装がプログラミング言語の学習にどう丁度いいのかを紹介します。Rosetta Lisp Lispと呼んでいます。Rosetta Lispは以下のような特徴を持ちます。一定の共通した言語仕様・VMの仕様に基づいて動作するRosetta Lispは (Rosetta Lispに準拠するLisp処理系群は)、いずれも共通した命令セットのVM上でLispプログラムを実行するように実装されています。Lispの簡単な実装では、よくインタプリタ形式が採用されます。kanaka/malやrui314/minilispはいずれもインタプリタ形式で動作します。インタプリタ形式から離れると実装が困難になるのではないかと思われがちですが、必ずしもそうではありません。Rosetta LispではSECDマシンを参考にした、命令セットの命令数がわずか11個の、単純で抽象的なVM上でプログラムを実行します。SECDマシンの詳細は日本語でもいくつか解説が見られるので割愛しますが、このVMの特徴として一つ挙げられることに、それが 移…

zenn.dev
Related Topics: Lisp
1 comments