2014年04月のlog
>> Site top >> weblog >> 月別アーカイブ >> 2014年04月のlog
最終更新日付:2014/04/01 00:00:00
*features*で条件付きコンパイル
2014 年 04 月 05 日
Common Lisp では標準で *features* というダイナミック変数があって、環境や処理系の情報を格納している。で、#+ や #- というリードマクロによってそれらの情報に依存したことができる。
で、以前からやりたいと思っていた条件付きコンパイルみたいなことをそれでやってみることにした。それも、起動時点で *features* に入っている値を使うのではなく、自分で値を追加して使うというものだ。その是非については正直自信がないのだけれど。
マクロと総称関数で関数オーバーロードを真似る
2014 年 04 月 06 日
Common Lisp の総称関数は素晴らしい。が、不便だと思う部分がないわけでもない。そのひとつが、C++ でいうところの関数オーバーロードができない(っぽい)ところだ。関数オーバーロードであれば引数の数からして全然違うような同名の関数を定義できるが総称関数の仕組みではできないように見える。今回は、これについて実験してみたことについて少し。
リードマクロでinitializer_listを実現する
2014 年 04 月 07 日
C++ 0x11 では、initializer_list という仕組みが追加された。これにより、std::vector のようなものでさえ以下のように初期化できるようになった。
std::vector<int> v = { 0, 1, 2, 3, 4 };
で、これをどうにかして CL-STL に取り込みたいと思うわけだ。今回はそれについて試したことについて。
マクロと総称関数で関数オーバーロードを真似る - 2
2014 年 04 月 10 日
以前、C++ の関数オーバーロードを Common Lisp のマクロと総称関数を使って真似る、という話を書いた。あれから、結局その方法を採用してしまったのだけれど、まぁやっぱり想定していなかったことは起こるわけで。それについて、今回もまたその是非に自信のない対処のことを書くとしよう。
演算子オーバーロードについても考える
2014 年 04 月 14 日
数日前の件については、結局メソッドを増やす方法で対処した。これで list-sort とかいった無様なメソッド名がかなり減ったが、まだある。それは C++ で言うところの演算子オーバーロードだ。これも同じ方法で対処しようと考えたものの、ちと厄介な方向に行きつつある。今回は、それについて。
演算子オーバーロードについても考える - 2
2014 年 04 月 15 日
昨日はなんだかもごもごした感じで終わってしまったが、それは書きながら別のことに気付いてうろたえていたからだ。今日は、ひとまずわかっていることを書いていく。
脱線して swap について
2014 年 04 月 16 日
前回書いた代入演算子の実装方法を眺めていたら、あきらめていた swap がなんとかなることに気付いた。今回はこれについて。
演算子オーバーロードについても考える - 3
2014 年 04 月 17 日
以前の続き。まだ頭はちゃんと冷えてはいないが、忘れるのも嫌なので。自分は、前回の最後で以下のように書いた。
‥‥‥(略)‥‥‥そしてこのような場合、設定すべき場所にあるモノと、設定すべき値はまったく別のタイプかもしれないのだ。STL では静的な型チェックがあるが、Common Lisp 上で動作する CL-STL にはそんなものはない。だから、前述の operator= を defmethod する場合、同じタイプ同士で特定化するだけではいけない。たとえばコンテナの場合、同じタイプ同士なら「内容のコピー」をし、それ以外ならば別のことをしなければならないだろう。コピー先が nil だったらコンテナの複製を作ることになるかもしれないし、それ以外であれば例外を投げることになるかもしれない。
とりあえずのところ、上記のことは置いておこう。それよりも先に、本気で setf とは別の「代入」を導入したらどうなるのか、それを探っていきたい。
代入から move へ
2014 年 04 月 18 日
前回の最後で、今検討している「代入」の方式では出力反復子から「値を取得」できなければならないことが判明した。今回はこの「代入」の問題から展開(右往左往?)した思考の結果、入力反復子に「値を設定」できなければならないことがわかったところまでを書いておきたい。
代入と move:ここまでのまとめ
2014 年 04 月 19 日
代入の実装に関連して、出力反復子から(擬似的に)値を取得することがでなければならず、また move の実装に関連して入力反復子へ値を設定できなければならない‥‥‥っぽいことがわかってきた。しかし、自分でもこれらの問題について考えていると何がなんだかわからなくなってくる。ここらへんでちょっとまとめてみよう。
本気で move について考える
2014 年 04 月 21 日
さて、move について本気で考えなければならないところまで来てしまったようだ。C++ 11 の新機能の中でも、自分にとっては一番得体の知れない move。そんな気がするだけかもしれない move。さて、どうなることやら。
本気で move について考える - 2
2014 年 04 月 22 日
昨日はとりあえず動作するコードを書くだけで精一杯だった。今日はその内容を見ていくことことにする。
本気で move について考える - 3
2014 年 04 月 23 日
さて、できるだけのことはやったつもり。では、できたこととできなかったことを。
本気で move について考える - 4
2014 年 04 月 24 日
考えなきゃならないことはまだまだある。というか、実際にソースファイルに手を加えずにここまで検討を続けたのって初めてかも。それだけ自信がないんだな。
代入と move:気付いたことをいくつか
2014 年 04 月 30 日
ごちゃごちゃとコードをイジっているうちに、気がついたら代入構文を実装してしまった。反省しつつ、気付いたことを。
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.