読者です 読者をやめる 読者になる 読者になる

meryngii.neta

今日も新たな"ネタ"を求めて。

ABI

C++

新鮮なネタではないけれども、そのうち書こうと思っていたので… http://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus この文章では、C++のうんざりなところとして「生産性が低い」ことと「ABIがない」ことが挙げられている。 性能を意識…

std::Trueの実験

concept std::Trueの実験にと思ってコードを書いてみたのだけれども、ConceptGCCが14行目でinternal compiler errorを吐く。 #include <iostream> #include <concepts> template <class T> requires std::True<(sizeof(T) < 4)> void f(T x) { std::cout << "a"; } template <class T> requires std</class></class></concepts></iostream>…

せっかくだからconst char*をRangeに

この前書いた記事はconcept_map Rangeがあるのかと思ったらconst char[]なだけだったというわけだが、 http://d.hatena.ne.jp/meryngii/20080927/1222494258 せっかくなので書いてみた。 #include <iostream> #include <cstring> #include <concepts> namespace std { concept_map Range<const char*> {</const></concepts></cstring></iostream>…

conceptでの...

Callableは関数オブジェクト用のコンセプトで、N2741だと汎用的にVariadic Templatesを利用して定義されている。 auto concept Callable<typename F, typename... Args> { typename result_type; result_type operator()(F&&, Args...); } operator()のところだけれども、これが「一定の数</typename>…

.NETのConsoleもどき

Variadic Templatesの練習のためにSystem.Consoleもどきを。 #include <iostream> #include <complex> struct Console { template <typename T, typename... Types> static void Write(T&& arg, Types... args) { std::cout << arg; Write(args...); } template <typename... Types> static void WriteLine(Types... args) { Write(</typename...></typename></complex></iostream>…

C文字列に拡張for文

C文字列に拡張for文を使ったら、普通に通った。 #include <iostream> int main() { for (char c : "test") std::cout << c << std::endl; } C++ユーザにとっては新鮮なコード。んでこれが通るということは、const char*についてのconcept_map Rangeがどこかにあるはず</iostream>…

Visual StudioでC++0xのキーワードを色分け

Visual Studioにはユーザーキーワードという微妙に便利な機能があるらしいです。 http://wikiwiki.jp/redstrange/?Microsoft%20Visual%20Studio%20%A5%E6%A1%BC%A5%B6%A1%BC%A5%AD%A1%BC%A5%EF%A1%BC%A5%C9 これはC++0xのキーワードを色分けするしかない! …

rel_ops

C++では==と!=のように片方だけあれば十分なものもすべて定義しなければならない。これを自動的に生成してくれるのがBoost.Operatorsなわけだが、標準ライブラリにもstd::rel_opsに比較演算のみ自動的に生成するものがあるようだ。 namespace rel_ops { temp…

conceptでのエラー

andLinux上でのConceptGCCのmakeに挫折したので、結局Cygwin上で試すことになった。 ものすごくコンパイルが長いけど、テスト版だからしょうがない。 #include <algorithm> int main() { std::sort(1, 2, 3); // ここでエラー } conceptg++ -o test test.cppなかなか簡</algorithm>…

ConceptGCCのビルドがうまくいかない

andLinuxでConceptGCCをコンパイルしてみたが、どうもうまくいかなかった。再度挑戦するときのために経過をメモしておく。 まず、おなじみのツールをインストールする。 apt-get install gcc apt-get install autoconf apt-get install makeGMPとMPFRが必要…

複雑な宣言

C++

ほとんどC言語ネタなわけだが、C++0xの9月分のドラフトまでもう少しだと思うので、それまでつなぎを書いておく。 #include <boost/type_traits/is_same.hpp> #include <boost/static_assert.hpp> typedef int* DtoI(double); typedef DtoI* V10[10]; typedef V10* f(char); typedef int* (*(*g(char))[10])(double); B</boost/static_assert.hpp></boost/type_traits/is_same.hpp>…

serial_port

組み込みなんかでは、今でもRS-232Cを使う機会がある。 Boost.Asioではシリアルポートに対応しているようだ。単にネットワーク用のライブラリでは終わらないらしい。 ファイルもサポートするようだけれども、filesystemとの関係はどうなるんだろう。 http://…

プロ意識

C++

http://codezine.jp/article/detail/2971 Bjarne Stroustrup氏のインタビューが公開された。 プロ意識(Professionalism)というのは、責任と能力らしい。失敗が許されない分野のソフトウェアには、何らかの基準を設けて審査することも必要なのかもしれない。 …

basic_string

C++

C++の文字列処理は、何かと評判が悪い。 template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_string; typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 批判はいろいろあるようだが、まず文字列を操作する関数が少ないことだ。文字列を文字</wchar_t></char></chart></class>…

noncopyable?

C++

noncopyableはコピーや代入を禁止するために使われる。C++0xにはこういう動作を禁止するための専用の構文(=delete)が存在する。 そういえば、noncopyableっていうスペルは本当に合っているのかという議論を見た記憶がある。 辞書に載っていないのが困った…

GUIライブラリ

C++

標準GUIとまではいかなくても、C++で書かれた近代的な設計のGUIライブラリが欲しい。 wxWidgetsはとても実用的だけれども、設計が古くてAPIをいじるのと同じ気分になってくる。Notusの設計はよかったけれども、企画倒れしてしまった。 最近のツールは華やか…

char16_tとchar32_t

Unicodeサポートのためのchar16_tとchar32_tは、C++0xで予約語になるようだ。 C99に合わせるために取り入れられるint32_tなんかは、名前が似ているがstd名前空間に入っている。 おそらく新しいプリミティブ型だからだろうと思う。

[]

統一された関数宣言構文というものがある。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2582.html template <class T, class U> [] mul(T x, U y) -> decltype(x * y) { return x * y; } うーむ、気持ち悪い。 class A { template <class T> [] operator[](T x) -> decl</class></class>…

参照におけるconstとvolatile

C++

volatileは主に組み込みで使われる機能で、constと同じ場所に置けるのでcv-qualifierとまとめて呼ばれる。コンパイラによる読み出しの最適化を抑制する効果がある。 さて、「constを指すポインタ」と「constなポインタ」があるように、「volatileを指すポイ…

継承におけるconst

C++

当たり前かもしれないが、constはクラスを継承するときに指定できない。 typedefを使っても無視される。 struct base { void non_const() { } }; typedef const base const_base; struct derived : const_base { }; void func() { derived d; d.non_const();…

Boost.Unitsのコンパイルが遅い

Boost.Unitsのコンパイルが結構遅い。 しらみつぶしに定義しているからだろう。 まあでもSpiritの比ではないか…。

演算子のオーバーライド

C++

前に演算子をオーバーライドしようとして失敗した記憶があるのだが、試しにやってみたらできた。 class a { public: virtual a& operator += (int) { } }; class b : public a { public: b() : sum(0) { } virtual b& operator += (int x) { sum += x; retur…

Exception Specifications

C++

C++には関数から出てくる例外を規制するException Specificationsという機能がある。 void func() throw(std::exception) { ... } しかし、この指定は標準ライブラリにもあまり見当たらない。単に標準化に間に合わなかったのだろうか。 http://snak.tdiary.n…

インタビュー発掘

C++

インタビュー ++: 言語の進化について語る Bjarne Stroustrup 氏 4月の記事だけど、今さら見つけたのでメモ。 多重ディスパッチについては、それなりに研究が進んでいるが、残念ながらC++0xには入れなかったようだ。俺言語を作ろうとした時に、演算子の処理…

ありきたりな批判

C++

仕様が大きすぎるくせに、 実用的なライブラリが未整備。 C++ってなんであんなに肥大化しちゃったの? こんな不評が出るのは、きちんと使えていないから。C++に一つでも無駄な仕様があるのなら、ぜひとも教えてほしいものだ。 そもそも何十年も前にOSを書く…

文字コード

22.3 Standard code conversion facets 1 The header provides code conversion facets for various character encodings. (略) 3 For each of the three code conversion facets codecvt_utf8, codecvt_utf16, and codecvt_utf8_utf16: http://www.open-std…

Boost.Spiritのコンパイル時間を短縮

Boost.Spiritを使った中〜大規模のプログラムのコンパイル時間は明らかに長すぎで、ひどい時は何時間もかかることがあります。これをある程度改善するために、前に使っていた手法を公開しておきます。 ただ、本格的にパーサを組むなら大人しくCaperなどを使…

Modules in C++

Modules in C++がほしい。 もうインクルードガードなんて嫌だ。 These topics are deemed too important to wait for another standard after C++0x before being published, but too experimental to be finalised in time for the next Standard. Therefor…

unordered_set

Boost 1.36.0でUnorderedが入った。 unordered_mapは、mapに代わってデータのひも付けに使うことになると思う。 しかし、unordered_setの使い道があまり思いつかない。サンプルもなかなか見つからない。 ということで自分で書いてみた。お題は、文章中の単語…

Boost.Units

Boost.Unitsというのをさっき見つけた。 単位をラップするってのはなかなか面白い。 今度いじることにしよう。

C++/CLI

C++

C++/CLIの用途は、既存の資源活用だけではない。 .NET脳だとWindowsしか使ったことがないので、APIのラッパくらいしか思いつかないのだろう。C++の強みはどこでも動かせることで、それはC言語から受け継いだもの。 そして、汎用なアルゴリズムを書くのなら、…