標高+1m

Don't be rational.

LispマシンMirai

mirai screenshot

この記事は lisp Advent Calendar 2018 の25日目に書かれました。

メリークリスマス!

一月ほど前に、ワイヤードを漂っていたMiraiのバイナリをうっかり手に入れてしまったので、 環境を作って少し遊んでみました。*1

CG制作統合開発環境Miraiのコードベースは、1980年代のSymbolicsで作られたS-Graphicsに端を発します。S-Graphicsは92年にニチメングラフィックス(旧:日本シンボリクス,現:NGC)に売却され、IRIXとWindows NTに移植されてN-Worldになり、これを下敷きにしてMiraiが作られました。現在はIzWareが権利を保有しています。Miraiのリリースが1999年なので、20年前のソフトウェアということになります。

symbolics
嗚呼憧れのSymbolics

ここら辺の事情は、Practical Scheme WiLikiのLisp:Geometryの項目を参照してください。

簡単に機能の一部を紹介すると、

  • Geometry: Winged Edgeポリゴンモデラ
  • Painting: テクスチャエディタ
  • Animation: アニメーションエディタ(スケルタル、ディスプレイスメント、スクリプトなど色々使える)
  • UV Editing: UVマップエディタ
  • 3D Painting: モデルに直接色が塗れる

ソリッドボディやゼリー状の物体の物理シミュレーションなども行えるようです。

Miraiと言えば映画Lord of the Ringsのゴラムのモデリングに使われたエピソードが有名ですが、この記事ではモデラとしての側面ではなく、Symbolicsから連綿と受け継がれてきたLispマシンのバイブスに注目します。モデラに興味がある方は、Wings 3Dを使ってみるとよいかと思います。

MiraiはAllegro Common Lisp 5.0のACL Runtimeの上で動いています。面白いのが、裏にLispのリスナがいて、タスクトレイのアイコンのコンテキストメニューからInterrupt Lispを選ぶだけで、簡単にアクセスできてしまうことです。

他にもなにかしらエラーが発生したときに出るダイアログのDebugボタンなどから、すんなりとLispリスナに落としてくれます。

mirai error dialog
エラーダイアログ. CLのリスタート機能が生かされていて、よくあるOKしかないダイアログよりずっと柔軟.

common lisp listener for Mirai
リスナ

REPLが繋がっているというのは、そんなに珍しくはなくて、例えばBlederではPythonコンソールが使えたりしますが、Miraiのリスナのすごいのは、これがMiraiのプロセスそのものだというところです。

単純にスクリプティング用にAPIが提供されているというのではなく、動いているプロセスの実装そのものであるところの生きたオブジェクトがウヨウヨいる海を自由に泳ぎ回ることができます。CLOSのMOP等も使って、アプリケーションを実行中に内側から好きなように改変できてしまうという魅力が、上記WiLikiのLisp:Geometryにて存分に語られています。

さてこのリスナ、そのままだと使いづらいのですが、ACLEmacs連携機能を使って、Emacsに繋いで使うことができます。Miraiに付いてきたelispはEmacs20用のものでしたが、数か所書き換えたらすんなり動きました。ネットワーク越しに繋ぐので、ローカルでもリモートでもいけます。

Mirai on winxp talking to NT Emacs on win10
ホストOS(win10)上のNT EmacsとゲストOS上のMiraiを繋いだところ

こうなるともういつものLispハッキングと変わりません。ACL Runtimeは、dumplispやdisassembleが無いのと、ドキュメンテーション文字列が皆無でdescribeも大して役に立たないことを除けば、普通のAllegro CLです。*2

準備が整ったら、どんどん式を評価していきましょう。

aproposでどんな手続きが定義されているかは探れるのですが、describeがまるで役に立たないので困ります。

usless describe
役立たずのdescribe

N-Worldのオンラインドキュメンテーションを公開してくれている方がいるので、それとにらめっこすることになります。以下のリンク先のWide Open World Programmer's GuideにLispの情報が載っています。N-Worldのものですが、Miraiと高い互換性があります。 N-World 3.0 Online Documentation

全然大したことはしていませんが、動画を撮りました。のんびりご覧ください。ほんとはかっこよくboidsでも飛ばしたかったんですが、Lispエイリアンのモデリングで力尽きてそこまでいけませんでした。

www.youtube.com

Lisp界隈だとライブオブジェクトプログラミングという言い方はあまり聞きませんが、開発と実行が分かれていない環境はやはり楽しいし、オブジェクトの数が多ければ多いほど、ソフトウェアが複雑であるほど面白いように思います。こんなソフトウェアが増えればいいなあ。

Lisperならこんなに面白いおもちゃもなかなかないんじゃないでしょうか?うっかり手に入れちゃった人は遊んでみましょう。

just ask

*1:ほんとはN-Worldが欲しかったのですが、NGCも持っていないそうなのでMiraiで我慢します。N-World持っている方ぜひ譲ってください。

*2:実はdisassembleしたくてFranzにACL 5を安く売ってくれないか掛け合ってみましたが、ライセンスの発行にエンジニアを動かす必要があるとのことで、だめでした。ACL 10 Professionalの値段を出せば買えるようです。