ToDo:
がどうとか言ってる子はキモい子です! って話があったんだけど、 みんなどういう理由でそんな子になってしまったんだろうか… あと妙に同世代が多い気がするんだよな。 少し上の人は I hate C++! がデファクトに なりきっているというか。
世界で2番目に誤解された言語 C++ 。とかどうだろう。
いや、別に誤解はされてないな…
まぁそんなこんなで最近見てる人の経歴を適当に見てみる。
http://d.hatena.ne.jp/Cryolite/
同世代の模様。
奥さんがいらっしゃるってことは少し上かしら。 しかし最近はそういう判断は外れる歳になっている。
http://d.hatena.ne.jp/syd_syd/
大学院生さんらしい。 いかにも言語好きーな人なのでわかりやすいかな。
http://d.hatena.ne.jp/y-hamigaki/
今気付いたけど cppll でよく見る人だったよ!
http://d.hatena.ne.jp/mb2sync/
あーそういや Boost.Typeof 見てみないとなーと思ったんだった。 http://d.hatena.ne.jp/mb2sync/20050422#p1 はあとで見る系。
結局世代とかよくわからんかったけど なんでもいいや。
(03:07)
http://www.accu-usa.org/2000-05-Main.html
あれーユーザ定義型はーと思ったら REGISTER_TYPEOF とかあるな…
しんどいけどマジメに追ってみよう…
#include <iostream> #include <list> #include <boost/typeof/typeof.hpp> using namespace std; using namespace boost; struct C { C() { cout << "hello world!" << endl; } }; int ifunc() { return 0; } list<int>::iterator itefunc() { static list<int> l; return l.begin(); } C cfunc() { return C(); } int main() { BOOST_AUTO(i, ifunc()); BOOST_AUTO(ite, itefunc()); BOOST_AUTO(c, cfunc()); }
ああうん。すごいな。
(03:36)
int main() { BOOST_TYPEOF(cfunc()) c = cfunc(); c = *(new BOOST_TYPEOF(cfunc())); }
_ が、 cl.exe だと、
int main() { boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type c = cfunc(); c = *(new boost::type_of::msvc_typeid_wrapper<sizeof(*boost::type_of::encode_start(cfunc()))>::type); }
_ こうなる。 GCC だと __typeof__ になる。
_ インスタンス化するたびにカウントアップする template とか作れば、 まぁこれで作れるかなぁ。
_ で、インスタンス化するたびにカウントアップねえ…
#include <iostream> #include <list> #include <boost/typeof/typeof.hpp> using namespace std; using namespace boost; struct C { C() { cout << "hello world!" << endl; } }; struct D {}; C cfunc() { return C(); } C cfunc2() { return C(); } D dfunc() { return D(); } int main() { BOOST_TYPEOF(cfunc()) c = cfunc(); c = *(new BOOST_TYPEOF(cfunc())); cout << sizeof(*boost::type_of::encode_start(cfunc())) << endl; cout << sizeof(*boost::type_of::encode_start(cfunc2())) << endl; cout << sizeof(*boost::type_of::encode_start(dfunc())) << endl; }
_ が、 5 5 6 と出力する。明らかにカウンタがある。
_ http://boost-sandbox.cvs.sourceforge.net/*checkout*/boost-sandbox/boost-sandbox/boost/typeof/msvc/typeof_impl.hpp?revision=1.5
_ どう見てもカウンタみたいです。 実装がよくわからんがな。
_ あとまぁ msvc/ 以外の実装は不明チックな。 compliant implementation もよくわからんけど、 要するに BOOST_PP マンセーってことですか。
_ んー。なんか昔見たことある気が超するんだよなぁ。
_ (04:26)
最初聞いた時は冗談レベルに思ったけど、 もっと評価されていいよなぁという気がした。
このへんとかも面白げである。
http://www.tohoho-web.com/html/server.htm
(05:32)
template <class T> struct S { private: static T m(); public: enum { t = sizeof(m()) }; };
についてヒマな時追ってみる。
(01:41)
だなんて言ってるヤツが失望してほげほげなのさ、 とシニカルに言うのが流行りらしいから、 関数型言語が銀の弾丸だと言ってるヤツはほげほげなのさ、 と言うことにしようか。
(15:10)
結局、リクエストは UTF-8 で来てるので、 それを EUC になおさず処理しちまうのが一番良い。
そんで
http://kawa.at.webry.info/200511/article_9.html
紅茶は text/plain だからうまくいってるのかなぁ。 よくわからん。
(22:39)
ごめんなさい再帰的にほげほげはこりゃ無理だと思って諦めました。
オサレじゃなくてもすぐできたから、 あっさりできた、と書いたとか。
具体的にはこんな感じの rettype と argtype ができれば自明な実装。
http://shinh.skr.jp/tmp/signature.d
(16:27)
ほめてもらたーと思いつつ。
なんというか、書いてる最中とか 書き終わった後は何がキモだったか覚えてるけど、 memo/hatena 書いてる最中は忘れてる現象。
ぷろぐらむの語彙が貧弱な僕こそ 適当に名前をつけてキモを把握しておいた方がいいんでないかとか、 いややっぱデザパタ重要なんじゃないかとか。 だいたい自分のできたことすら把握してないから 人と話す時困るんだ。
マッチング能力は、 暗黙テンプレート引数>明示テンプレート引数>static if の : 、 なんだけど、 C++ だと 暗黙のテンプレート引数でマッチさせたものは関数なので、 そこから型を取り出すことが(たぶん)できない。 その関数を実際に呼んでしまってクラス返せばできるけどね。 でも D は typeof あるから取り出せるぜへへん、っていう話か。
static if はええとなんで弱いんだっけ。 思い出せんのだからメモをすべきだ。
ええと…
is ((T, U) : ???) って感じで書きたかったのは覚えている。
思い出した。
is (T (U, V) : U function(V)) と書きたかったんだ。 つかこれできたら暗黙テンプレートと同じマッチ能力あるじゃん。
つか2変数以上の部分特殊化ができない、 って書いてくれてるじゃん。
暗黙テンプレート引数>明示テンプレート引数=static if の :
だなたぶん。
やっとノウハウとして蓄積できた気がした…
D in depth Wiki とか作って C++ と違うテクニックを集積するとか。
誰が見るんだ、って勢いの Wiki を。
集積したテクニックはたぶんよく使えそうなものは もっと簡単な文法を Walter さんが導入しちゃうんだろうけど、 まぁ言語の進化ってのはそういうものだろう。
とりあえず /template/ みたいなノリで ひどい状態の /d/ をなんとかしよう。
(01:20)
前から思ってるけど、 いろいろタイムリーな気がするので bind が書きたい。
しかし現実逃避はよくない。良いんだけど。
過度の現実逃避はあなたの社会生活を害する恐れがあります。
(01:43)
をおされに書く方法が無ければやる気が起きないと気付く。
なんとかして再帰的な定義に持ち込めないか…
void (T t, ...) と void (T t) のオーバロードが できればなんとかできそうだけどできない。
つかそれがなんとかできても tail みたいなのが実装できんか。
argNum は実装できそうだなぁ。
TODO: 現実逃避をやめる。
(03:36)
なんかみんなやってるけど オサレな関数とか作るのもういいから、 だって別に他の関数型言語でもいいしな、 モナドとか型やろうぜーとか言ったら
http://haskell.g.hatena.ne.jp/mr_konn/20060613/1150213544
やった。
いやすげーなあああああ
(けど実は簡単な)IOモナド
というフレーズが実にクルものが。
IO はやっぱ IO って名前でいい気がします。 あと do の外でモナド外せたらマズくね、とか。
次はぜひ型をお願いします。
(07:13)
auto dubl = convolution(&concatMap, &replicate);
とは書けない気はする。 うぬぬ生意気な。
けど本当にできないのかな。 なんかほげほげできそうな。
メモ template opCall
(12:51)
int func(char, bool, char[], int[char[]]); alias functor!(typeof(&func)) f; static assert(is (f.rettype == int)); static assert(is (f.argtypes == TL!(char, bool, char[], int[char[]])));
ふむ。割にあっさりできた。
(18:48)
前 | 2024年 6月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。