8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LispAdvent Calendar 2020

Day 8

PicoLispをビルドしてみた

Last updated at Posted at 2020-12-07

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とは異なるようです。これも気になりますね。

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

  1. https://picolisp.com/ のトップページより。

  2. https://software-lab.de/doc/ref.html#intro より。

  3. https://software-lab.de/doc/ref.html#intro に拠った。

8
3
0

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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?