20:18:34 [g000032'in]
20:19:04 <g000032> 今日も Successful Lisp / David B. Lamkins ぼっち読書会やります
20:19:40 <g000032> http://psg.com/~dlamkins/sl/chapter31.html
20:19:44 <g000032> (((Chapter 31 - Handling Large Projects in Lisp)))
20:19:57 <g000032> 31章は、プロジェクトの構成についてみたいですね
20:23:33 <g000032> ((((Packages keep your names separate from my names))))
20:31:05 <g000032> とりあえず、複数人での開発で気を付けるのは名前の競合ということで、この辺りはどの言語も同じですね
20:31:48 <g000032> プレフィックスを付けて他のプロジェクトの名前と競合しないようにする、というのも定番です
20:35:23 <g000032> clにはパッケージがあるので、ここでパッケージの説明ですが、各々のプログラマに本当に自由奔放に書いてもらうとするなら、各自に一つパッケージを割り当てるのが良いだろうとのこと
20:37:00 <g000032> 確かにそういう気もしますが…
20:37:13 <g000032> 次にキーワードパッケージの使い方の解説です
20:41:05 <g000032> キーワードシンボルは大域的に唯一無二でアクセスしやすいので、そういう特性が活きるところで使えるということでしょう
20:41:07 <g000032> か
20:41:31 <g000032> とりあえず、キーワード的なものはキーワードシンボルで書いとけ、というところですね
20:42:45 <g000032> 通常のシンボルでキーワード的なものを表現すると、思わぬところで、シンボルの競合が発生したり、違うシンボルが参照されていたり、というのは思ったより多いかなと思います
20:43:05 <g000032> ((((System builders let you describe dependencies))))
20:46:05 <g000032> プロジェクトを構築する手続についてですが、
20:46:57 <g000032> プロジェクトが小さい場合は、明示的にloadしたりcompile-fileしたりで十分ですが、大きくなると再コンパイルや、ファイルの依存の管理が面倒になります
20:48:00 <g000032> 手順として、大別すると、1)前者のように load等を記述する、2)専用のシステムビルダーを利用するというのがあります
20:48:34 <g000032> 専用のシステムビルダーとしては、defsystemというのが定番で、大抵の処理系には付属してくるとのこと
20:49:05 <g000032> そういえば、こういうmakeで扱う単位のことをlisp界隈では、systemって言うんですよね
20:49:15 <g000032> モジュールっぽくもありますが
20:49:53 <g000032> 最近だと、asdfが、広く利用されているdefsystemで、quicklispもasdfの上に構築されているのでasdfです
20:50:07 <g000032> s/asdfです/asdfのdefsystemです/
20:52:45 <g000032> それと、最近の傾向としては、小さい規模ても、quicklispで読み込めるように、プロジェクトの雛形を作ってしまうってのがありますね
20:53:13 <g000032> quickprojectとか雛形作成のツールが幾つかあります。 (大抵quickprojectを改造したやつですが)
20:54:00 <g000032> ((((Source control systems keep track of multiple revisions))))
20:59:30 <g000032> バージョン管理システム利用のすすめ、という感じですね
21:00:01 <g000032> lispの環境内で管理するvcsもあったようです
21:00:08 <g000032> いまどきはgitでしょうか
21:00:29 <g000032> ((((Modules: another way to describe file dependencies))))
21:01:44 <g000032> Common Lispのモジュールシステムについてですが、最初の規格の時点では存在していたのですが、後に非力ということで非推奨になってしまったんですよね
21:02:14 <g000032> requireと、provideがモジュールを扱う仕組みだったんですが、emacsの人には馴染みがあるかもしれません
21:02:40 <g000032> 名前が同じだけで、細かい動作は全然違ってるので逆に混乱しますがw
21:02:46 <g000032> ((((PROVIDE and REQUIRE))))
21:06:07 <g000032> ということで、provideとrequireの説明ですが、処理系依存な規定が多く特定の動作を期待することが難しくなっています。共通のところといえば、扱うモジュール単位が既に読み込まれているならば、再度読み込んだりはしない、というところと、provideがモジュールを登録する位です
21:07:24 <g000032> 処理系依存ですが、SBCL等だと、requireがasdfを呼び出すようになっているので、asdfのシステムをロードするということであれば手軽です
21:07:46 <g000032> なんにしろあまり進められる書法でないのが残念ですね
21:08:02 <g000032> ということで、31章は終わりです。次回は、32章からです
21:08:07 [g000032'out] ; Quit: (quit)