search
LoginSignup
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Lisp Advent Calendar 2020 Day 8

posted at

updated at

PicoLispをビルドしてみた

PicoLispというLisp処理系があるのですがちゃんと触ったことがなかったので、本記事ではまずビルドをしてみました。

PicoLispとは

PicoLispはAlexander Burger氏によって開発されたLisp処理系です。シンプルかつ軽量、クリーンさを奨励し、簡潔なコードが特徴1のようです。また設計目標として「シンプルであること」「制限がないこと」「動的であること」「実践的であること」があったようです2。で組込みのデータベースエンジンやGUIライブラリも標準で含まれており、実用指向でもあるようです。英語版Wikipediaのページによると1988年から存在するようで、同ページにあるLisp処理系年代表に拠ればChez Scheme、Emacs Lisp、AutoLISPと同じ時期に生まれた、わりと古くからあるLisp処理系のようです。2016年からPilBox (PicoLisp Box)というPicoLispでAndriodアプリを開発するプロジェクトがスタートしたりと、まだまだ発展しつづけているようです。あとGitHubのorganizationを眺めていたらLLVM版PicoLispのプロトタイプとかありました。

ビルドする

x86-64アーキテクチャのGNU/Linuxを仮定して話を進めます。ubuntuにおけるbuild-essential相当のパッケージは導入しておいてください。

ソースをもってくる

まずはダウンロードページ https://software-lab.de/down.html から最新のソースコードを手に入れましょう。本記事執筆時点ではpicoLisp-20.6.tgzが最新でした。tar xf picoLisp-20.6.tgzで展開してできたディレクトリpicoLispに移動しましょう。

ブートストラップに必要なファイルを持ってくる

次に、おそらくVMのコアであると思われる、各64ビットアーキテクチャ向けのアセンブリのソースコードを取得します。https://software-lab.de/x86-64.linux.tgz をwgetして、picoLispディレクトリ内で展開します。

ちなみに展開して出てくるアセンブリ言語のファイルは、PicoLisp自身を用いて生成されているようでした。そして見直すと処理系のソースコードのほとんどがPicoLispで書かれているので、セルフホストを達成しているのですね。ひえー。

ビルドする

src64ディレクトリに64ビット環境用のソースコードがあるので、これをmakeでビルドします。

これで完了です。ちょっと簡単すぎたかすごく簡単ですね。

起動してみる

ビルドが済んでいれば、picoLispディレクトリにあるpilコマンドで起動できるようになります。ここでは文法などには踏み込みませんが、以下のようにするとHello Worldできます。

picoLisp$ ./pil
: (print "hello")
"hello"-> "hello"

余談、あるいは今後?

PicoLisp自体は「仮想機械の最小かつ有用なアーキテクチャは何か?」という問いに対する答えとして、プログラミング言語設計の研究を行ったその成果物だそうです3リファレンスマニュアルにはPicoLispの下にある仮想機械のアーキテクチャについて詳しくドキュメントされているのですが、PicoLispのVMが直接扱えるデータ型は3つ(数値、シンボル、そしてリスト)しかないようです。そしてそれらの3つはVMのもっとも基本的なデータである「セル」(それぞれ64bitのcar部とcdr部のペア)で構成されます。これだけでもおもしろそうなのですが、リファレンスマニュアルではこれらのことについてデータ型のビット表現を例示しながら説明されるので、読むだけで汗が滲んできます。このあたりを掘り下げていきたいところですね。

そしてどうもPicoLisp、ラムダ式がないようです。Wikipediaをいま眺めていたら「クオートされた関数 (quoted function)」なるものがあるのでラムダ式がいらないようです。よくわからないので調べたら"Even small details make a difference!"なるドキュメントをみつけました。quoteの挙動がふつうのLispとは異なるようです。これも気になりますね。

しかもコルーチンもあるんかーい

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
What you can do with signing up
2
Help us understand the problem. What are the problem?