#:g1: Lispとイメージのダンプについて

Posted 2021-12-06 17:15:06 GMT

Lisp一人 Advent Calendar 2021 7日目の記事です。

今回は言語処理系の機構としてはマイナーなイメージのダンプについて書いてみたいと思います。

イメージのダンプとは

処理系のメモリの状態をファイルに書き出せるという機能です。
イメージ指向の言語というと、Smalltalkが有名ですが、Common Lispでも普通に活用可能です。

手短な活用法としては、沢山ライブラリをロードする場合の時間短縮等があるかと思います。 過去にこのブログでも1800位のライブラリをロードしてダンプしてみる、というのを試したりしたことがありますが、当たり前ですがこういう場合は圧倒的な時間短縮になります。

このイメージのダンプですが、何故かネガティブなイメージを持っている人がそこそこいるようなのが不思議なのですが、単純にいえば、コンパイル済みのfaslファイルを読み込んだ状態で処理系を起動するか、起動してからfaslを読むかの違いくらいしかありません。
また、ダンプ自体も、save-imageであったり、save-lisp-and-dieであったりでファイルに書き出すだけなので、身構える程のものでもありません。いまどきの喩えでいうならdocker imageの作成みたいなものかと思います。

個人的には一日の作業前に作業用のイメージを作成して、それを立ち上げて作業していますが、毎時間のように知らないライブラリをロードするようなことはないことを考えるとコンパイルとロードの時間を短縮できますし便利かなと思います。

もっと便利になって欲しいところ

LispWorksのようなIDEであれSLIMEであれ、大抵は処理系はマルチスレッドで稼働しているのですが、イメージのダンプはシングルスレッドの状態で実行しなければいけないことが殆どです。
スレッドを終了して、シングルスレッドにするユーティリティでも書いて実行すれば良いのですが、VirtualBoxのような仮想マシンの停止や再開作業やスナップショットが取れると便利だろうなとは思います。
Interlisp-Dは、まさにそのような環境で、(sysout '{dsk})とすれば、ディスクにイメージが保存されるので、マシンを落して再起動すれば、その状態から再開、ということが可能でした。

Common Lispのイメージ指向はどこから来た?

MACLISPはファイル指向でしたが、MIT Lispマシンはイメージ指向へと移行しディスクの特定の領域にブートイメージを書き出すというスタイルでした。 Interlisp-Dは完全にイメージ指向なのですが、先祖のBBN LISPでは1967年からsysoutは存在するようです。
Lispにおいては、開発環境=OSというのはBBN LISPが元祖かなと思いますが、XEROXでは、Smalltalkと共にイメージ指向というのが結構発展したようです。
(ちなみに他にもイメージ指向の言語ってあるのでしょうか)

さて、Common Lispにイメージ指向を取り入れる必然性はあったのかと疑問が湧いてきますが、Common Lispでは1980年代中頃からマシンリソースの割にはコンパイル&ロードに何時間も掛るような重い作業をすることが多かったようなので、コンパイル済のイメージを保存しておくのは、かなりの時間の節約になったのかなと想像します。

まとめ

折角の機能なのでイメージのダンプを活用しましょう!


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus