#:g1: ツリーシェイキングも楽ではない

Posted 2022-01-02 20:04:51 GMT

最近はさほど言われることもなくなりましたが、以前は、Common Lisp処理系は実行可能ファイル(exe)が作れないので使えない、という人が割合にいました。
また、実行可能ファイルが生成できたとしても、フリーソフトのCommon Lisp処理系はファイルサイズについての最適化はそれ程頑張っていないので、非常に巨大なため、これでは使えない、といわれていました。
とはいえ、スマホアプリが100MiBを越えることもざらな近頃では大して話題にならなくなってきたみたいではあります。

この実行可能ファイルのサイズを小さく最適化したいという需要に応えるものとして、1980年代からツリーシェイカーというものがありました。
これは、Lispのイメージ中の不要なものを出荷するイメージから篩い落すというものですが、昔から商用の処理系には装備されており、今でもLispWorksや、Allegro CLにはそのような機能があります。
ちなみに、MCLではメモリが128KiBのような時代から存在していて実用的なサイズで出荷できていたようですし、Lucid CLでも同様だったようです。

そんなツリーシェイカーですが、開発環境でアプリを作って、あまり考えずに出荷時の最適化を掛け過ぎると、実行環境で必要なものまで落ちてしまいます。
そうなると、開発時から無用なライブラリはできるだけ使わないように調整したり、出荷時に確認して削ぎ落すわけですが、これが案外面倒なので、最近自分は、大きいサイズのままでも良いや、という風に割り切っています。
折角の機能なので活用したいところではあるのですが……。

ちなみにイメージサイズを縮小するのとは別のアプローチとして、OSのホスト言語(C等)を生成し、それをビルドして実行可能ファイルを生成するものがあります(ECL/WCL/Eclipse CL)
また、当然ながらSymbolics等のLispマシンでは、実行可能ファイルのようなものはなく、相当するものとしては、コンパイル済みのアプリをロードする程度のことになります。Unixでいうとコンパイル可能なシェルスクリプトですべてが構成されているような感覚かと思いますが、やはり理想郷ですねえ。


HTML generated by 3bmd in LispWorks 8.0.0

comments powered by Disqus