SBCLとか色々

Common Lispで作っているWIkiエンジンですが、
今までCLISP専用だったものをSBCLでも動くようにしました。
変更することになったのは主に以下の三つです。
1. 文字コードまわり
2. ディレクトリ操作まわり
3. ネットワークまわり
文字コードまわりはCommon Lisp と 日本語 と 文字コード(LISPUSER)を参考にしました。
基本的にはcharset:utf-8を:utf-8に変えるのと、
ext:convert-string-from-bytesをsb-ext:octets-to-stringに変えるだけでした。
ディレクトリからファイル一覧を取得するための方法はPractical Common Lispの
15. Practical: A Portable Pathname Library
を参考にしました。処理系毎にちょっとずつ違うのは正直やっかい。
あと、ディレクトリの作成、削除にsb-posixパッケージののmkdirとrmdirを使用するように変更。
SBCLのネットワークまわりはある意味わかりやすく、そして面倒でした。
サーバの役割をするためには、まずinet-socketのインスタンスを作って、
sb-bsd-socktesパッケージのsocket-bind, socket-listen, socket-acceptを呼ぶだけ。
いくらわかりやすいとはいえ、少々面倒なのでもう少し楽な関数も欲しかったです。
sb-posixやsb-bsd-socketsパッケージを使うために、
requireを書かないといけないみたいですが、
これってどこに書くものなんでしょう。自分のパッケージを定義するファイル?
何はともあれ、これでSBCLでも動くようになりました。
CLISPで動かしてたときより速く動いた…ような気がします。
気がするだけかもしれません。

昨日、「Prologで大阪さんの事を論理的に考える集い」に参加してきました。
いろんなプログラミング言語についてわいわい話し合ってかなり楽しかったです。
ただ、大阪さんの話はほとんど出てきませんでした。
ちゃんとあずまんが大王を全巻読み直して準備してきたのに/(^o^)\

Leave a Reply