2015-08-07-01-作業がてんこ盛り - project-enigma

2015-08-07-01-作業がてんこ盛り

>> Site top >> weblog >> 月別アーカイブ >> 2015年08月のlog >> 2015-08-07-01-作業がてんこ盛り

最終更新日付:2015/08/07 12:16:35


作業がてんこ盛り

2015 年 08 月 07 日

どういうわけだか、この期に及んで CL-STL の作業が噴出している。最近追加されたタスクは、大体以下のようなモノだ。

そもそもの発端は、ポインタクラスや演算子オーバーロード周りを 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-2017 project-enigma.
Generated by CL-PREFAB.