Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?