2016-04-29-01-Shibuya.lisp#39における個人的な反省会 - project-enigma

2016-04-29-01-Shibuya.lisp#39における個人的な反省会

>> Site top >> weblog >> 月別アーカイブ >> 2016年04月のlog >> 2016-04-29-01-Shibuya.lisp#39における個人的な反省会

最終更新日付:2016/04/29 18:22:09


Shibuya.lisp#39における個人的な反省会

2016 年 04 月 29 日

昨日、Shibuya.lisp#39 にて CL-STL の紹介をさせて頂いた。人前で話す(というか人と話す)ことがほとんどない自分は、そうは見えなかったかもしれないがガチガチに緊張していた。スライドにあわせて話す内容を書き下した4枚のA4用紙を開く心の余裕もなく、ずっと丸めて握っていた気がする。今となっては何を話したのかもはっきりとは覚えていない。困ったものだ。

で、いくつか質問/意見を頂いたわけだが、どうもちゃんと答えられた気がしない。覚えている限り、再度整理してみようかと思う。ただし、以下はあくまで(覚えている限り)どのような話題が出たかについて自分なりに整理し、再構成したものだ。これを読んでいる方は誰がどんな質問をしたのか覚えているかもしれないが、「誰某はそんな言い方しなかった」というような捉え方はしないで欲しい。では、始めよう。

労作だね。で、動機はなんなの?

そもそもといえば、STL を移植する作業によってその言語で何ができて、何ができないのかを知りたかった、というのがある。そして、自分が使うどの言語でも同じライブラリを使えたら楽だなという思いもある。

必要なモノだけ作ればいいじゃん

これを言われると正直弱い。あえて言うなら、STL 利用コードを最小限の労力で CL で動作させられることが目標だ。そのためには、CL 標準で配列やハッシュ表があるからといって作らないわけにはいかない。何故なら、例えば CL 標準の配列やハッシュ表はイテレータを備えていないからだ。さらに例えば、CL 標準の sort は setf でオブジェクトそのものを入れ替えるが、STLでは代入(可能ならばムーブ)によって要素の入れ替えをする。要するに挙動が違うのだ。「そんなこと誰も気にしない」と言われるかもしれないが、自分は気になる。

stl: が何度も出てくるのがウザいんだけど?

個人的には、慣れの問題だと思っているが、そう思わない人の方が多いだろう。

CL-STL-USER みたいなパッケージを作成して、CL-STL パッケージは use-package するが COMMON-LISP パッケージは use-package しない、みたいなことをすれば良いのかもしれないが、独立したパッケージで CL-STL を使いたい場合は結局問題になる(のかな?)。パッケージの細かい使い方まではまだ理解していないので、巧い解決方法があるのかもしれない。検討してみよう。

「全てのシンボルの前にアンダースコアをつける」みたいな解決方法もあるよ、という意見も頂いた気がする。最初に『慣れの問題だと思う』と書いた以上、この方法だって立派な解決策だ。使ってくれる人達がそれを望むなら、喜んでそうしよう。

C++臭が強い。CL に寄せる努力をした方が良いのでは?

正直なところ、これに対しては『そうかな?』という感じ。C++ が体に染みついてしまっている自分は、そのC++臭ってやつに気付かないのだ。逆に「なんか落ち着く」とか思ってしまう。

では、何処をどう変えたら『CL に寄せた』ことになるだろう? これもまた自分にはわかりそうもないし、答えは人それぞれかもしれない。個人的には、CL に寄せる努力をするならばそれは別のライブラリになると思う。例えば deque を独立させてイテレータも提供せず、インデックスでアクセスさせるとかね。ランダムアクセスできないコンテナを一切無視するなら、各種のアルゴリズムもインデックス指定で実装して独立させることは可能だろう。

(MOPまで視野に入れれば)funcall 自体をオーバーロードできるはず

MOP は標準に含まれていないので、できる限り手をつけたくなかったが、やる価値はあるかもしれない。帰宅後に調べてみたが、funcallable-standard-class というやつらしい。

inlined-generic-function を使えば総称関数呼び出しのコストを低減できる

これは、総称関数の呼び出しをコンパイル時点で解決してしまうという魔法のようなライブラリらしい。これは是非取り入れたいと思うが、トータルで考えるといくつか心配ゴトがある。これについても改めて。

cl-parametric-typesでテンプレート

まだ詳しくは理解していないが、これも非常に興味深い。

 

全体として、CL-STL に対する反応は微妙なモノだったと思う。これは STL 寄りの説明に終始してしまった自分のミスだと思う。

ただ、「5年もやってるのか‥‥‥」という反応は自分としては感慨深いものがあった。一方で、「ドキュメント書けや」とは誰からも言われなかったため、多分ユーザーはこれからも自分だけではないかと思う。

最後に、個人的にはとても重要な情報だった、総称関数のインライン化やテンプレートなどについて。全てをコンパイル時点で解決できるなら、それに越したことはない。ただ、便利に使えるようにするには、以下が揃っていなければならないという認識だ。

まだわからないけれども、おそらく MOP にまで降りていかなければならないのだろうと思う。巧くすればマクロだけで実現できるだろうか。いずれにせよ(少なくとも自分にとっては)簡単な問題ではない。funcall の件も含め、今後の自分の検討課題としよう。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : Common Lisp

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.