カテゴリ「STLとその移植」のlog - project-enigma

カテゴリ「STLとその移植」のlog

>> Site top >> weblog >> カテゴリ別アーカイブ >> カテゴリ「STLとその移植」のlog

最終更新日付:2014/01/06 19:52:35


SBCL なら sequence を自作できるらしい

2017 年 07 月 30 日

Common Lisp Recipes を読んでいて知ったことだ。SBCL で sb-sequence パッケージの総称関数を適切に定義することで、自作のクラスを sequence にすることができるらしい。CL-STL のコンテナをそうできたら素敵じゃないか。

Read more

 

CL-OVERLOAD:コンストラクタのためのコンパイラマクロ定義機能を追加

2016 年 12 月 23 日

えーと、どこから説明しようかな。stl:make_tupleコンパイラマクロが追加された結果、(new stl:tuple ...) とやるのが嫌になってきた。だから CL-OVERLOAD を改造しようと思って試したら上手くいった、という話。

Read more

 

CL-OPERATOR:clonableの代入時コピールールを変更

2016 年 12 月 21 日

うん、変更した。元々の挙動は仕様通りだったはずなんだけど、その仕様がそもそもおかしかったので、改善というよりはバグフィックスだな。

Read more

 

最適化とは無関係なintializer_listの変更

2016 年 12 月 17 日

昨日の失敗で少し落ち込んだけれど、ちょっと思いついたことがあるのでやってしまった。

Read more

 

initializer_listで失敗

2016 年 12 月 16 日

まぁ、なんていうか、調子に乗ったのかもしれない。最適化できると思ったが何重にも間違っていた、という話。

Read more

 

ひとまず大丈夫みたい

2016 年 12 月 15 日

修正前後の比較をしてみた。一応期待(というか予想)の通りだったと言えそうな感じ。

Read more

 

pairクラスを刷新

2016 年 12 月 14 日

‥‥‥だけのつもりだったのに、なんだかオオゴトになってしまった。

Read more

 

make_tupleにコンパイラマクロを追加

2016 年 12 月 09 日

ひさしぶりに CL-STL に手を入れた。あ、非順序連想コンテナのことは忘れたわけじゃないんです。

Read more

 

swapとmoveの移動について

2016 年 05 月 29 日

CL-STL の中には swapmove というのがある。現在検討中の CL-IOSTREAM にも同じモノがあり、CL-STL は将来 CL-IOSTREAM に依存することになる。このままではマズいので、共通の基盤ライブラリである CL-OPERATOR あたりに移動しようかと考えている。今回はそんな話。

Read more

 

ファンクタをfuncallableにする問題について-2

2016 年 05 月 26 日

前回、ひとまずはやる価値ありと判断したファンクタの funcallable 化問題。今回は実際にどんな修正をすることになるかを整理する。前回書いた内容に対しては、「このへんが参考になるよー」といった情報を Twitter 経由で頂いた。感謝致します。

Read more

 

ファンクタをfuncallableにする問題について

2016 年 05 月 24 日

さて、そろそろアレに取り組んでみようと思った。任意のクラスを funcallable にできるよ、と教えて頂いたアレだ。試行錯誤の末、とりあえず以下のような実験コードになった。

(defclass functor (sb-mop:funcallable-standard-object)
  ((closure :type     cl:function
            :initform nil
            :initarg  :closure
            :accessor functor-closure))
  (:metaclass SB-MOP:FUNCALLABLE-STANDARD-CLASS))

(defmethod initialize-instance :after ((fnctr functor) &key)
  (sb-pcl::set-funcallable-instance-function fnctr (functor-closure fnctr)))

 

まだ可搬性は意識していないので、SBCL に固有の sb-mop:funcallable-standard-object とか sb-pcl::set-funcallable-instance-function とかが露出している。また、functor クラスは実行コード自体をメンバとして保有し、initialize-instance において登録をするようになっている。これがベストの方法なのかどうかはわからない。今回は実験なので、これでひとまずパフォーマンスを見てみようかと思う。

Read more

 

CLにおける包括的コンパイル時解決を妄想する

2016 年 05 月 01 日

先日の個人的反省会の最後で書いた、コンパイル時解決の話。あの時は以下の3点が揃っている必要があると書いた。あ、違う4点だった。

で、具体的にやりたいことはどんなことなのか、ちょっと妄想がてら整理してみた。

Read more

 

CL-STLのシンボル衝突問題について-2

2016 年 04 月 30 日

前回書いたシンボル衝突問題、一気にやってしまった。ひとまずのところ上手くいってくれたので、もうちょっと我慢すべきかと思ったのだが GitHub にまでアゲてしまった。

Read more

 

CL-STLのシンボル衝突問題について

2016 年 04 月 30 日

さて、CL-STL のシンボル衝突問題。CL-STL は CL のシンボルといくつも衝突しているため、これまでは use-package しない前提になっていた。そのために全てのシンボルに stl: と付加せざえるをえなかったわけだ。

で、今回、衝突に対処するためのパッケージの機能をちゃんとおさらいして、どうにかしようと考えた。

Read more

 

最適化で困っている

2015 年 12 月 24 日

数日前から、CL-STL をコンパイルした時に大量に出るコンパイラノートをなんとかしようと頑張っている。大抵、「宣言が足りないから最適化できない」という類のモノなので、それは確認しながら宣言を追加する。しかし、簡単に解決できない問題にでくわしてしまった。今回はそんな話を少し。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-25

2015 年 12 月 22 日

次いこう。「第46項:アルゴリズムのパラメータとして関数の代わりに関数オブジェクトの使用を考えよう」から。もう何度も書いている、ファンクタの性能のお話。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-24

2015 年 12 月 21 日

前回に続いて、「第45項:count、find、binary_search、lower_bound、upper_bound、およびequal_rangeの違いを理解しよう」から少しだけお釣り拾い。そう、ほんの少し。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-23

2015 年 12 月 17 日

気がついたらもう10日も放置しているこのシリーズ。そろそろ Effective STL の話は終わりにしたいので頑張るとしよう(その後何をやるか決めてないのだけど)。今回はタイトルが長いな。「第45項:count、find、binary_search、lower_bound、upper_bound、およびequal_rangeの違いを理解しよう」から。

Read more

 

非順序連想コンテナとコンストラクタオーバーロード

2015 年 12 月 11 日

先日書いた通り、STL の非順序連想コンテナ(要するにハッシュコンテナ)を CL-STL に導入するための作業を始めている。今回はそれで困った(困っている)ことについて少し。

Read more

 

vectorとdequeとfindとlower-bound

2015 年 12 月 09 日

前回書いた内容から、ソート済みのランダムアクセスコンテナに対する findlower-bound の比較、および配列に対する内部的な最適化の効果が気になってきた。今回はこのへんをなんとなく。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-22

2015 年 12 月 08 日

まだちょいちょいと直すべきところがみつかる、CL-STL。そして裏では unordered系連想コンテナの実装に着手しはじめてしまってちょっと後悔中。それでもこの連載(?)は続ける。今回は、「第44項:アルゴリズムより同名のメンバ関数を優先して使おう」から。コードはちょっとだけ。

Read more

 

思い出したのでファンクタを再び

2015 年 12 月 05 日

2 年くらい前、まだ現在のかたちになる前の CL-STL で、ファンクタ呼び出しのパフォーマンスについてぐだぐだ書いていた記事があった。それを読み返していて、現状はどうなっているのか、そこが気になった。今日はそんな話。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-21

2015 年 12 月 04 日

昨日、「ひとまず1回で終わらせることができたようだ」などと書いたが、あれば誤りだった。最後に書いておきたいことがあったのに忘れていたのだ。今日はそのおつり拾い。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-20

2015 年 12 月 03 日

なんか面倒になってしまったので、Effective STL のファンクタの残りはやらないことにした。その先に行こう。「第43項:独自に作成したループよりアルゴリズムの呼び出しを優先して使おう」だ。この項はけっこう長いので、数回に分けることになるかもしれない。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-19

2015 年 12 月 02 日

今回は、Effective STL の「第40項:ファンクタクラスを変換可能にしよう」を。なんていうか、まぁあまり面白くない感じになってしまったので血圧低めで流していこう。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-18

2015 年 11 月 24 日

いよいよ今回からファンクタの話に入る。前回まででざっくりと説明した通り、ラムダ式やクロージャで大体カタがつくことを考えると不毛な話になりそうだ。とりあえず、Effective STL の「第39項:述語を純粋関数にしよう」をやってみようと思う。

Read more

 

CL-STLにおけるファンクタの仕組み-2

2015 年 11 月 14 日

前回の続き。CL-STL にあるいくつかのファンクタクラスを実際に見ていこうと思う。

Read more

 

CL-STLにおけるファンクタの仕組み

2015 年 11 月 08 日

さて、今回は CL-STL におけるファンクタの仕組みを説明してみよう。いささか毛深いのでうんざりされないことを祈りつつ。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-17

2015 年 11 月 05 日

今回は、愚直に構造体とクラスで作成した前回のコードを変更し、ラムダ式で十分に目的を達することができることを示そうと思う。点はコンスセル、ファンクタはラムダ式だ。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-16

2015 年 11 月 03 日

今回はアルゴリズムの話の最後。結構大物だ。第37項、「範囲に関する要約情報を取得するには、accumulateまたはfor_eachを使おう」をやってみよう。今回は、初めてファンクタクラスを作成する。次回以降はファンクタの話になるので、一足先にうんざりして頂けることと思う(何言ってる)。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-15

2015 年 10 月 30 日

アルゴリズムの話がもう少し続く。今回は、第36項、「copy_ifの正しい実装について理解しよう」をやってみよう。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-14

2015 年 10 月 28 日

今回は Effective STL の第34項、「ソート済み範囲を必要とするアルゴリズムに注意しよう」で。コードは少ないけど。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-13

2015 年 10 月 25 日

今回は Effective STL の第33項、「ポインタのコンテナには注意してremove風アルゴリズムを使おう」をやってみよう。

今回の主なトピックは、「ポインタのコンテナで迂闊に remove を使うと、リソースリークするよ」というものだ。これが CL-STL にどう関係するのか。ガベージコレクタが備わっている Common Lisp で、リソースリークの心配は必要だろうか。結論から書いてしまえば、リークの心配はないが後始末の心配はあるよね、という話。そして、単純に同じコードを STL で書けないような状況についても少し。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-12

2015 年 10 月 23 日

連想コンテナの全面刷新が佳境に入っているため、しばらくの御無沙汰となった。今回は Effective STL の第32項、「本当に削除したい場合は、remove風アルゴリズムの後にeraseを使おう」をやってみよう。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-11

2015 年 10 月 17 日

さてさて、前回のおつり拾い。Effective STL の第31項、「ソートの選択肢を知っておこう」の残りの話を。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-10

2015 年 10 月 16 日

今回は自分でも始める前からおっかなびっくり、Effective STL の第31項、「ソートの選択肢を知っておこう」から。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-9

2015 年 10 月 14 日

引き続き Effective STL、今回は第30項の「出力先範囲の大きさを確認しよう」から。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-8

2015 年 10 月 12 日

この一連の記事を書いていると、どういうわけだか CL-STL のバグにでくわすことが多い。そうなると、なんだかテストをやっているような気分になる。まぁこれまでのテストが不十分だって話だけどな。引き続き Effective STL、今回は第5項の「単一要素メンバ関数より範囲メンバ関数を使おう」から。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-7

2015 年 10 月 09 日

連想コンテナの再実装を裏でやりつつ、引き続き「Effective STL」のコードを CL-STL で書いていこう。今回は、第27項、『コンテナのconst_iteratorをiteratorに変換するには、distanceとadvanceを使おう』が対象。今回のもコードは少なめ。

Read more

 

連想コンテナのやり直し

2015 年 10 月 07 日

9/21 に書いた通り、連想コンテナがバグっている。赤黒木の実装に関わる部分なのだけれど、追い詰めていくと根本的な問題であることがわかり始めてきた。そこで出直しをしてしまおうかというのが今回の話。

Read more

 

moveにも問題ありか

2015 年 10 月 03 日

CL-STL には、swap 以外に get-setf-expansion を使っている場所として move マクロがある。ということは、当然同じ問題があることが予想されるわけで、なんていうか、こう‥‥‥あぁ面倒臭いなもう。頑張ろう。

Read more

 

swapにバグがあった

2015 年 10 月 02 日

昨日みつけたバグについて確認しよう。何がいけないのかはわかっている。そして、最初のうちはどう対処したものやら皆目見当がつかなかった。これを書いている現時点ではどうにかなったものの、もっと良い解決方法がないものかと思っている。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-6

2015 年 10 月 01 日

10月になっちゃったなぁ。引き続き、「Effective STL」のコードを CL-STL で書いてみよう。今回は、第17項、『余分な容量を取り除くには「swap技法」を使おう』が対象。今回のもコードは少なめ、だがまたバグを踏んだ。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-5

2015 年 09 月 30 日

今回は、「Effective STL」の第14項、「reserve を使って不必要な割り当てを避けよう」のコードを CL-STL で書いてみる。コード量も少ないし、今回は力を抜いていこう。

Read more

 

配列要素のアドレス取得からポインタを生成する話

2015 年 09 月 29 日

Effective STL のコードを CL-STL で実装する話はちょっとおやすみ。今回は、配列要素の参照に対してアドレス取得するような構文でポインタオブジェクトを生成する、という最近の変更の話だ。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-4

2015 年 09 月 28 日

実は、「Effective STL」の第9項、「消去オプションは注意して選択しよう」のコードを CL-STL で書いてみる試みはまだ終わっていなかったりする。残りは、ループの内部でログを出すという話。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-3

2015 年 09 月 22 日

とりあえず見つかった問題については対処した(つもり)なので、続きをやろうと思う。今回は、remove-if のイメージで連想コンテナから要素を除去する話。

Read more

 

おいおい、連想コンテナがバグってるよ

2015 年 09 月 21 日

昨日の続きを書いていたら、なんとまあバグを見つけてしまった。テストが足りなかったということだな。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう-2

2015 年 09 月 20 日

昨日に引き続き、Scott Meyers の「Effective STL」から。今回は、第9項の「消去オプションは注意して選択しよう」のコードを CL-STL で書いてみようと思う。

Read more

 

STL書籍の掲載コードをCL-STLで書いてみよう

2015 年 09 月 19 日

Scott Meyers の「Effective STL」、第47項の「書き込み専用コードの作成は避けよう」に出てくる、以下のコード例を CL-STL でやってみた、という話。

Read more

 

mapとmultimapのキー変更を禁止する話

2015 年 09 月 18 日

そもそも Common Lisp には const という考え方はないみたいだ。だがなんとかして塞ぐことが必要な部分もある。今回は map と multimap の話。

Read more

 

githubにCL-STLをアップし(て)ました

2015 年 09 月 17 日

9月になってしまっている。そしてまたもや遅すぎる事後報告。なんにせよ、必死こいて頑張りましたよ、という話。

Read more

 

作業がてんこ盛り

2015 年 08 月 07 日

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

Read more

 

CL-PREFABのCL-STLへの切り替え

2014 年 12 月 09 日

気がつけば12月。今年も色々頑張ってはいるのだが、脱線ばかりで彷徨っている感が否めない。そんな中、それでもこれは今年中に終わらせたぞ、と言えそうな案件がようやくひとつ。CL-PREFAB の CL-STL への移行だ。うん。

Read more

 

テスト、やってます

2014 年 09 月 19 日

なんか新しい職場は理不尽に忙しい。残業というのは遅れを取り戻すためにやるもの、と思っている自分としては、自分が遅れているわけでもないのに残業せざるをえないほど仕事量が多いというのはスケジューリングやマネジメントの問題だとしか考えられない。とはいえ、そう考えていても問題は解決しない。さっさと見切りをつけて次のを仕事を探すしかないだろうか。

それはそれとして、STL の Common Lisp への移植の話。そんな中でもしぶとく作業を続けています、という話。

Read more

 

CL-STLとNGL

2014 年 07 月 12 日

休みに入ったら入ったで、色々忙しい。今日は CL-STL の現状と、同じく STL の移植(っぽい)ライブラリである NGL の今後の話。

Read more

 

ファンクタの0x11対応 - 7

2014 年 06 月 19 日

さて、ファンクタの 0x11 対応という意味ではまだやることはたくさんあるのだけれど、bind マクロの話は前回でほぼ終了。今回は、相変わらず気になる性能の話。

Read more

 

ファンクタの0x11対応 - 6

2014 年 06 月 18 日

人間、頑張ればできる‥‥‥というが、頑張った結果として成功したのに、それが単なるまぐれのような気がしてならないという時というのがあるものだ。先日から書いている bind マクロの問題、解決してしまった。

Read more

 

ファンクタの0x11対応 - 5

2014 年 06 月 18 日

ファンクタの C++11 対応の話、今回は、いよいよ bind の実装を見ていこう。というか、誰か助けてと言いたい今日この頃。

Read more

 

ファンクタの0x11対応 - 4

2014 年 06 月 17 日

ファンクタの C++11 対応の話、まだまだ続く。今回は、bind が一体どんなもので、なぜそれに悩まされているかについて。上手く説明できる自信はないのだけれど、書いてみよう。

Read more

 

ファンクタの0x11対応 - 3

2014 年 06 月 17 日

前回、「都度レキシカルクロージャを作って返すのは遅い」と書いた。まぁ容易に想像できることではあるのだが、では、どれくらい‥‥‥? 今回はそういう話。

Read more

 

ファンクタの0x11対応 - 2

2014 年 06 月 16 日

「続きは明日」とか書いておきながら、数日放置してしまった。先日書いた通り、ぶつぶついいながらファンクタ機構の拡張をしている。今回は現状を説明できるところまで書く‥‥‥つもり。

Read more

 

ファンクタの0x11対応

2014 年 06 月 12 日

C++11 では、functional の unary_functionbinary_function は deprecated となっている。binder1st とかもだ。自分はかなり長いことこのことを見落していた。新しいコンテナとか、アルゴリズムとかに気をとられすぎていたのだ。しかし、ようやくとはいえ気がついた。気がついたからにはなんとかしなければならない。どうやってなんとかするか、はて。

Read more

 

総称関数メソッドのパフォーマンス確認

2014 年 05 月 22 日

C++ でいうところの演算子オーバーロード、例えば operator< は CL-STL の世界では opr< となる。これは総称関数なので、その解決にかかるコストは実行時に負担しなければならない。ではそのコストは‥‥‥? というのが急に気になり始めた。というのも、このままいくとアルゴリズムに渡す比較子のデフォルトも opr< とかになるからだ。以前にも似たようなことをやった気がするが、今回改めて試してみる。

Read more

 

本気で move について考える - 5

2014 年 05 月 02 日

行き詰まった感じが募ってくると、「まぁ手を動かしてみようや」とか考えてしまうのはいくつになっても直らない。そんなわけで、結局 operator-move とかは中途半端に実装してしまった。もちろん、前回書いたような悩みは継続しているわけで。

Read more

 

代入と move:気付いたことをいくつか

2014 年 04 月 30 日

ごちゃごちゃとコードをイジっているうちに、気がついたら代入構文を実装してしまった。反省しつつ、気付いたことを。

Read more

 

本気で move について考える - 4

2014 年 04 月 24 日

考えなきゃならないことはまだまだある。というか、実際にソースファイルに手を加えずにここまで検討を続けたのって初めてかも。それだけ自信がないんだな。

Read more

 

本気で move について考える - 3

2014 年 04 月 23 日

さて、できるだけのことはやったつもり。では、できたこととできなかったことを。

Read more

 

本気で move について考える - 2

2014 年 04 月 22 日

昨日はとりあえず動作するコードを書くだけで精一杯だった。今日はその内容を見ていくことことにする。

Read more

 

本気で move について考える

2014 年 04 月 21 日

さて、move について本気で考えなければならないところまで来てしまったようだ。C++ 11 の新機能の中でも、自分にとっては一番得体の知れない move。そんな気がするだけかもしれない move。さて、どうなることやら。

Read more

 

代入と move:ここまでのまとめ

2014 年 04 月 19 日

代入の実装に関連して、出力反復子から(擬似的に)値を取得することがでなければならず、また move の実装に関連して入力反復子へ値を設定できなければならない‥‥‥っぽいことがわかってきた。しかし、自分でもこれらの問題について考えていると何がなんだかわからなくなってくる。ここらへんでちょっとまとめてみよう。

Read more

 

代入から move へ

2014 年 04 月 18 日

前回の最後で、今検討している「代入」の方式では出力反復子から「値を取得」できなければならないことが判明した。今回はこの「代入」の問題から展開(右往左往?)した思考の結果、入力反復子に「値を設定」できなければならないことがわかったところまでを書いておきたい。

Read more

 

演算子オーバーロードについても考える - 3

2014 年 04 月 17 日

以前の続き。まだ頭はちゃんと冷えてはいないが、忘れるのも嫌なので。自分は、前回の最後で以下のように書いた。

‥‥‥(略)‥‥‥そしてこのような場合、設定すべき場所にあるモノと、設定すべき値はまったく別のタイプかもしれないのだ。STL では静的な型チェックがあるが、Common Lisp 上で動作する CL-STL にはそんなものはない。だから、前述の operator= を defmethod する場合、同じタイプ同士で特定化するだけではいけない。たとえばコンテナの場合、同じタイプ同士なら「内容のコピー」をし、それ以外ならば別のことをしなければならないだろう。コピー先が nil だったらコンテナの複製を作ることになるかもしれないし、それ以外であれば例外を投げることになるかもしれない。

とりあえずのところ、上記のことは置いておこう。それよりも先に、本気で setf とは別の「代入」を導入したらどうなるのか、それを探っていきたい。

Read more

 

脱線して swap について

2014 年 04 月 16 日

前回書いた代入演算子の実装方法を眺めていたら、あきらめていた swap がなんとかなることに気付いた。今回はこれについて。

Read more

 

演算子オーバーロードについても考える - 2

2014 年 04 月 15 日

昨日はなんだかもごもごした感じで終わってしまったが、それは書きながら別のことに気付いてうろたえていたからだ。今日は、ひとまずわかっていることを書いていく。

Read more

 

演算子オーバーロードについても考える

2014 年 04 月 14 日

数日前の件については、結局メソッドを増やす方法で対処した。これで list-sort とかいった無様なメソッド名がかなり減ったが、まだある。それは C++ で言うところの演算子オーバーロードだ。これも同じ方法で対処しようと考えたものの、ちと厄介な方向に行きつつある。今回は、それについて。

Read more

 

マクロと総称関数で関数オーバーロードを真似る - 2

2014 年 04 月 10 日

以前、C++ の関数オーバーロードを Common Lisp のマクロと総称関数を使って真似る、という話を書いた。あれから、結局その方法を採用してしまったのだけれど、まぁやっぱり想定していなかったことは起こるわけで。それについて、今回もまたその是非に自信のない対処のことを書くとしよう。

Read more

 

リードマクロでinitializer_listを実現する

2014 年 04 月 07 日

C++ 0x11 では、initializer_list という仕組みが追加された。これにより、std::vector のようなものでさえ以下のように初期化できるようになった。

    std::vector<int> v = { 0, 1, 2, 3, 4 };

 

で、これをどうにかして CL-STL に取り込みたいと思うわけだ。今回はそれについて試したことについて。

Read more

 

マクロと総称関数で関数オーバーロードを真似る

2014 年 04 月 06 日

Common Lisp の総称関数は素晴らしい。が、不便だと思う部分がないわけでもない。そのひとつが、C++ でいうところの関数オーバーロードができない(っぽい)ところだ。関数オーバーロードであれば引数の数からして全然違うような同名の関数を定義できるが総称関数の仕組みではできないように見える。今回は、これについて実験してみたことについて少し。

Read more

 

*features*で条件付きコンパイル

2014 年 04 月 05 日

Common Lisp では標準で *features* というダイナミック変数があって、環境や処理系の情報を格納している。で、#+ や #- というリードマクロによってそれらの情報に依存したことができる。

で、以前からやりたいと思っていた条件付きコンパイルみたいなことをそれでやってみることにした。それも、起動時点で *features* に入っている値を使うのではなく、自分で値を追加して使うというものだ。その是非については正直自信がないのだけれど。

Read more

 

minmax_element

2014 年 03 月 09 日

ファンクタの件も一応カタがついたので、新しいアルゴリズムを少しずつ実装している。今日は、minmax_element について。

‥‥‥というか、今回のエントリは一度書き上げたものを操作ミスで完全に削除してしまい、全部書き直しをするハメに陥った。使い慣れたつもりの Emacs だが、dired で削除するとゴミ箱にはいかないから二度と戻ってこない。気をつけないと。

Read more

 

ファンクタの悩み - 4

2014 年 03 月 08 日

前回からの続き。

前回までで、ひとまずパフォーマンス面の心配は杞憂だったと考えることにした。そして、なぜファンクタの値渡し(を模倣するためのコピー)が必要なのかについても確認した。では、これからどうするのか、という話。

Read more

 

ファンクタの悩み - 3

2014 年 02 月 22 日

前回からの続き。

話を戻そう。そもそも、ファンクタを値渡ししなければならない理由とは何か。それをしないと、どういう局面で STL と挙動が異なってしまうのか。今回はそれについて。

Read more

 

ファンクタの悩み - 2

2014 年 02 月 20 日

前回からの続き。

とりあえず、ファンクタの値渡しを模倣するために CLOS の使用を模索し始めた。今回は、ちょっと心配なパフォーマンスを調べてみようという話。

Read more

 

ファンクタの悩み

2014 年 02 月 19 日

CL-STL のマニュアルを書いていて気付いた。そういえば、ファンクタが物凄くおろそかになっている。

というか、以前に一度「もうクロージャでいいじゃん」と思い切ってしまって、それっきりだったのだ。何を思い切ったのかというと、クロージャでは STL における関数オブジェクトのコピーの挙動を完全には模倣できないことだ。今回(と以後数回?)はこれについて書くことにしよう。

Read more

 

マニュアルという苦行

2014 年 02 月 09 日

CL-STL のマニュアルを書いている。目下のところ、想定される読者は自分ひとりだけ、という悲しい行軍。

まぁ、想定される読者が自分だけだと言っても、現時点でも自分で使う際にはソースコードを見て使い方を確認したりしているので、マニュアルを作成することには十分意味はあるんだけどな。

Read more

 

CL-STLの話

2013 年 10 月 29 日

以前書いたとおり、Common Lisp をがりがりと書いている。やっているのは CL-STL というライブラリの開発で、C++ 標準ライブラリの STL を移植するというものだ。

Read more

 

結局CLOSで書き直す

2013 年 10 月 27 日

気がつけば半年以上放置。

今年の夏くらいから、STL の Common Lisp への移植は大方完成していた。しかし、全てをレキシカルクロージャで実現するデザインを捨てて CLOS で書き直すという途方もない決断をしてしまう。それで、必死こいているわけだ。現在はアルゴリズムは一応書き終えて、コンテナをイジり回しているところ。

でも、この weblog を放置している理由はそれじゃない。毎日往復5時間という通勤に疲れ果てているからで、コーディングも電車の中でしかやれない。ふぅ。

久し振りにここに投稿するにあたって、古い記事を読み返してみたが、Palm 向けのソフトウェアを書いていた頃と今現在に間には、驚くほど何の繋がりもない。そろそろ project-enigma は店閉まいかな、とも思う。いくらなんでも Palmware はもう並べておく必要もないだろうし。

Read more

 

NGL version 0.75.001-001

2012 年 01 月 30 日

実は、もう一週間近く前のことだけれども、ひっそりとリリースしていた。そしてこれは project-enigma とは別のサイトで公開している。

http://www.architect-matsuoka.jpn.org/ngl/

Read more

 

いまさら後悔していること

2011 年 06 月 02 日

VBGeneric では、メソッドを跨いで渡された反復子を移動させる場合、コピーを明示的に作成せねばならない。その理由は、Visual Basic のオブジェクト渡しの方式にある。オブジェクトの引数渡しは全て参照渡しになるため、オブジェクトの変更は呼び出し元に波及する。そして、反復子もオブジェクトだから、その移動が呼び出し元に波及しないようにするには、どこかでオブジェクトのコピーを作る必要がある。今回はそこにある「無駄」の話。

Read more

 

Collection を使用したコンテナを考えてみる

2011 年 05 月 28 日

C++ 0x で追加される for の新しい使い方から、そんなことを考えた。

Read more

 

追加検討中のコンテナ

2011 年 05 月 24 日

C++ 0x で追加されるコンテナとして、以下のものがあるらしい。

これを VBGeneric に取り込むかどうかで、しばらく悩んでいる。

Read more

 

無様だけど Lambda

2011 年 05 月 22 日

Visual Basic にはオペレータオーバーローディングのための仕組みがない。だから、これについては完全にスルーするつもりだったのだ。

Read more

 

コンテナ初期化の方式を追加

2011 年 05 月 22 日

Tuple の初期化方法から、コンテナの初期化方法がもうひとつあることに気付いた。

Read more

 

Numeric.Iota

2011 年 05 月 21 日

昨日書き忘れていたが、追加したアルゴリズムには Numeric.Iota があった。以下のようなもので、これも C++ 0x への対応だ。

Public Sub Iota(itr1 As ForwardIterator, _
                itr2 As ForwardIterator, ByVal v As Long)

Read more

 

アルゴリズムの追加

2011 年 05 月 18 日

VBGeneric イジりは続く。

Read more

 

Tuple の追加

2011 年 05 月 15 日

5年振りに、VBGeneric をイジろうと思いたった。

今回やろうと思ったのは、Tuple クラスの追加だ。C++ 0x に追加される予定だということで、しばらく前から気にはなっていた。そして、ちょっと変則的ではあるものの、VBGeneric に取り込むことが可能だという判断ができたので、今回手を動かしてみたわけだ。

Read more

 

VBGeneric version 1.03.356.001

2006 年 03 月 01 日

さて、陰郎個人としてはもっとも思い入れがあるにも関わらず1番不人気かもしれない作品、VBGeneric の4ヶ月ぶりのアップデートである。今回はファンクタの仕様変更ということで、旧バージョンとのバイナリ互換性はない。つまり、旧バージョンを使用してコンパイルしたものについては、リコンパイルが必要ということだ。

Read more

 

Functor、でいいのか?

2006 年 02 月 17 日

えぇと、VBGeneric の話ですごめんなさい(と先に謝っておく)。

いきなりだが C++ の演算子オーバーロードをご存知だろうか。たとえば、自作のクラス Foo に対して以下のような大域比較演算子を定義しておくと、

bool operator==( const Foo& foo1, const Foo& foo2 );

...Foo のオブジェクトに対して比較演算子 == を使用することができるようになる。演算子オーバーロードは、クラスを組み込み型のように扱えるようにするための仕組みだ。その他にも色々な演算子がオーバーロードできるようになっているが、その中には関数呼出し演算子(て名前だったかな)もある。これは、オブジェクトを関数ポインタのように扱えてしまうというものだ。

Read more

 

ど忘れのブルース

2006 年 01 月 16 日

...「ブルース」という部分に意味は無い。昨年 11/01 にアップデートをリリースした VBGeneric ライブラリ。あれ、Vector に登録してあったのだが、なんと、2ヶ月半もの長きに渡って更新の連絡をするのを忘れていたのだ。嗚呼。

Read more

 

VBGeneric Version 1.02.352.001

2005 年 11 月 01 日

この開発日記を読んでくださる皆さんは、ほとんどが Palm 関連で訪れてくださる方だと思っている。そのせいか、Palm 以外の話題を書くのは微妙に気が引けるのだが、もともとは陰郎の開発日記なので Palm の話題に限る理由は何もない。読んでも面白くない方もいるだろうとは思うが、ひとまず申し訳ない。

Read more

 

2005年の VBGeneric、そして怒り。

2005 年 10 月 30 日

一ヶ月ほど前に、VBGeneric という過去の作品について回顧録のようなエントリを書いた。そう、過去の作品。そう自分では思っていた。今後は手を入れるようなことも無いだろう。自分としても日常的な使用では満足しているし...と、本当に思っていた。

しかし、メールが来たのだ。今日、改善要望のメールが。まずはその内容について紹介しておこう。

Read more

 

ポケットの中のカビ臭い狂気

2005 年 09 月 25 日

Palmware 開発を始める前、僕はプログラマ向けのライブラリ作成をメインに活動していた。といっても、それで飯を食っていたとか、その世界で名を上げたとかいうわけではない。まぁそれでも自分なりに真剣にやってはいたわけだ。あの頃の自分の無謀さは、思い返しただけでも果てしない気持ちになる。回顧録臭いけれども、ちょっとだけ、昔を思い出しながら書いてみよう。

Read more

 

 


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