2015-08-07-01-作業がてんこ盛り
>> Site top >> weblog >> 月別アーカイブ >> 2015年08月のlog >> 2015-08-07-01-作業がてんこ盛り
最終更新日付:2015/08/07 01:00:00
作業がてんこ盛り
2015 年 08 月 07 日
どういうわけだか、この期に及んで CL-STL の作業が噴出している。最近追加されたタスクは、大体以下のようなモノだ。
- 完了:一部のアルゴリズムにポインタを渡せない(仕様バグ)
- 完了:コンスリストのための反復子(機能追加)
- 完了:pair を独立クラスにする(実装変更)
- 完了:コンスリストのサポート拡充(機能追加)
- 完了:forward-list の反復子を cons-iterator 派生にする(仕様変更)
- 着手:alrogithm と numeric のモジュール構成整理
- 待機:アルゴリズムを cons-iterator に対しても特化する
- 待機:アルゴリズムテストへの配列とコンスリスト追加
- 待機:アルゴリズム以外のメソッドにポインタを渡せない(仕様バグ)
- 待機:0x11 で deque の insert に空シーケンスを渡すと nil が返る(実装バグ)
そもそもの発端は、ポインタクラスや演算子オーバーロード周りを CL-OPERATOR として独立させたことだった。これに伴ってポインタクラスが randomaccess-iterator 派生でなくなり、結果としてアルゴリズムに渡せなくなってしまった。この問題を解決するために、反復子だけでなくポインタも別途受け取ることができるようにアルゴリズムのメソッド定義を増やした。これがひとつめのポイントだ。
そのあたりの対応をしている最中に、ふと考えたのがもうひとつのポイントで、Lisp におけるコンスリスト、これをほとんどそのままアルゴリズムで扱えるようにするべきだろうと。というのも、C++ 0x11 で追加された forward_list は片方向のリンクリストで、実質的にコンスリストと同じようなデータ構造だ。これを反復子でアルゴリズムに渡せるなら、コンスリストにだって同じことができるはず。実際、CL-STL における forward-list はその実装にコンスリストを使っている。だったら Lisp のナマのリストだって begin / end で反復子を取得して、それをアルゴリズムに渡せたっていいじゃないか。丁度、ナマの配列に対して STL が begin / end をオーバーロードしているのと同じ考え方だ。
そんなわけで、コンスリストを反復するためのイテレータクラスを導入した。そうすると、アルゴリズムがそれに最適化されていないのが気になり始める。ベクタの要素を指す反復子に対するアルゴリズムは最適化されているんだから、コンスリストの要素を指す反復子に対するアルゴリズムだって最適化できるはずだ‥‥‥
まぁなんというか、こんな感じで現在に至っている。先は長い。
コメント
このページのタグ
Page tag : STLとその移植
Page tag : Common Lisp
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.