This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
「れいがい!」、「REIGAI REIGAIせよ!」、「そろそろれいがいさんへの思いを適当にまとめる」も参照のこと。 assert/エラー/例外の区別。 意味論上、本質的な違いはない。現状の実装などの都合で使い分けるもの。 問題の通知に使用される場合の signal やモナド*1等も意味論上、本質的な違いはない。 本来これらは同じような構文で記述できるべき。 assert/エラー/例外の使い分け。 なにか問題が起きた場合は基本的に例外を投げる。 リリース版ではそもそも発生することがあってはならない類の問題については assert を使用する。 パフォーマンスが問題にならない場合は assert とともに例外やエラーを併用することを推奨。 問題が起きても無視してよいものあるいは例外ではパフォーマンスや呼び出し側の実装の都合が悪い場合にはエラーする。 assert/エラー/例外の役割。 問題が
大規模疎行列向けの行列分解ライブラリredsvdを公開しました. redsvd 大規模疎行列向けの特異値分解や主成分分析,固有値分解を行うライブラリredsvdを公開しました. 修正BSDライセンスで公開しており,コマンドラインから使える他,C++ライブラリが用意されています. 例えば,行と列数がそれぞれ10万,非零の要素が1000万からなる疎行列に対する上位20位までの特異値分解を約2秒で処理します. 特異値分解とか,使っている技術の詳細とか応用事例を以下に簡単に紹介しましたので,興味のある方は参考にしてください. 特異値分解とは まず行列を適当に復習します.行列Xの転置をX^tと表すことにします.またIを単位行列とし,Oを全ての成分が0である零行列とします.また,行列XX^t=IであるようなXを直交行列と呼びます.Xが直交行列の時,Xvはベクトルvを長さを変えずに回転させます.ここでは
以前Webで見かけたプログラミングの魔導書というのを買い、ちょこちょこ読み進めて今日終わった。 タイトルはなんかものものしいが、単にC++のマニアックな話題が詰まった本である。 新仕様のc++0xの解説もちょっとあるが、いよいよ変態の領域にきている。ムーブコンストラクタなぞとても使いこなせる自信がない。 いま思い返せば、C++はテンプレートの病的な使い方にフォーカスしてきたあたりから風向きがおかしくなってきた気がする。テンプレートはうまくキマれば格好いいのだが、メタプログラミングのレベルまでいくとコンパイルを通すだけでプログラミング本体と同等の思考力が必要なのがきつい。 この本も変態テンプレートはたくさん出てくるが、テンプレートでどこまでできるかの追求自体が目的化していて本末転倒である。まあ読み物としては面白いし、他の言語なら実行時にしか分からないエラーがC++ならコンパイル時に分かる!と
Code Project という有名サイトに、VC++の例外処理方法に関する記事があります (http://www.codeproject.com/cpp/Exceptionhandler.asp) が、そこにg++の例外処理方法を解説したコメントがありました。 ざっくりと次のような事を言っています(翻訳してるわけではないので詳しくは英文読んでください)。 g++は、VC++とはちょっと違うやりかたで例外処理を実装している。g++の場合、実際に例外がthrowされない限りは、try/throw/catchを使ったコードを書いてもランタイムのコストはかからない。 foo()がbar()を呼んでいて、bar()が例外を投げるとせよ。このとき、foo()はスタックに戻りアドレス*1を置いてからbar()を呼ぶ。この戻りアドレスを仮にXとする。 このときコンパイラは、 (X, 掃除コードのアドレス
フルタイムで働きはじめて4ヶ月。 いろんなことがありました。 今日はインターンが来ているということもあり日頃のC++コーディングライフの中で大変重用しているツールを紹介します。といってもどれも有名なツールでググれば解説がでてくるとは思いますので、一言ずつだけ紹介してみます。みなさんも何かよさげなライブラリ・ツールがありましたら教えてください。 - valgrind/callgrind/cachegrind プログラムの実行結果を解析するツール群。まぁ、王道であえて紹介する必要はないかもしいませんが.。valgrindはプログラムのどこかでメモリが漏れているかどうかのチェックに使います.コードのどの部分で確保した領域がどこで漏れているかまで追跡することができます valgrind --leak-check=full command プログラムのどのが計算量的にボトルネックになっているかを調べ
まだC, C++がないようなので書いてみた。主にLinux(DebianとかUbuntu)での環境構築について。 コンパイラ まずはapt-getでコンパイラをインストールする。UbuntuやDebianなら以下のコマンドでgccやg++および標準ライブラリ等がインストールされる。 $ sudo apt-get install build-essential デバッグツール デバッガおよびデバッグツールは少なくとも以下の三つは入れる。(あとltraceも欲しいかな?) GDB 言わずと知れたGNUのデバッガ Valgrind メモリリークや不正メモリアクセスの検出 strace システムコールのトレース $ sudo apt-get install gdb valgrind strace ビルドツール C, C++のビルドツールといえばまずmakeが浮かぶけど、最近ではSConsやCMak
もう先週になってしまうのですが C++WG 会議の後に行われた「(略)を問い詰める会」に参加してきました。 結構な人数が参加されていたのですが、半分くらいの方としかお話できなかったんじゃないかなあ…少し残念でした。 id:rti7743 さんが途中「カリー化って何なんでしょう」ということを言われて、あーだこーだ言い合って、そこから「C++0x ならカリー化関数を書けるはず!」ということになって、その場はそれで終わりました。 ということで、実際に書いてみました。 …思っていたよりずっと大変でした。 #include <tuple> #include <type_traits> #include <functional> using namespace std; template <unsigned int N> struct apply_impl { template <typename F
http://longgate.co.jp/products.html 弊社、株式会社ロングゲートで、プログラミング雑誌を作るというプロジェクトが進行しています。 本書創刊の目的は、プログラミングの入門記事が巷に溢れる今、プログラマのさらなる成長のため情報発信を行い、業界全体の技術力を向上させることです。 雑誌といっても、記事の質を保つために不定期刊行としていることから、実際には雑誌ライクな書籍となります。 書籍名は「プログラミングの魔導書〜Programmers' Grimoire〜」です。 創刊号となる今回のテーマは、サブタイトルにも含まれている「C++」です。全ての記事がプログラミング言語C++に関するものとなっています。 Vol.1のテーマをC++としたのは奇をてらったものではありません。 C++は習得の難しい言語と言われておりますが、近年はBoost C++ Librariesに
分散KVS kumofs のコードは、全体で約2万行です。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行で、全体の約半分を占めています。 並列イベント駆動I/Oフレームワーク「mpio」リリース ネットワークアプリケーションを実装する上で、もっとも大きな障壁は、ネットワークI/Oとプロトコルです。 では、それが両方ともフレームワークでサポートされ、コードを書く必要が無くなったらどうでしょうか? 54行で簡単な分散KVSを実装したり、140行で分散リアルタイム検索エンジンを実装することができます。すなわち、インデックス作成サーバ、検索サーバ、DBサーバなど、多数のサーバが連携し、スケールアウトの恩恵を得ることができるネットワークアプリケーションを、1台のホスト上で動作する並列アプリケーションとほぼ同じように書くことができます。 実装上の問題から解放されれば、並列性や耐障害
先日、C++0xのFCD(Final Committee Draft)が公開され、FCDに対するコメントの募集も開始しました。 FCDは以下からダウンロードできます。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf これに伴い、日本国内で出たコメントを議論するC++標準化委員会のアドホック会議を以下の日程で開催します。 日時 : 2010年5月29日(土) 10:00〜17:00 会場 : 赤坂ツインタワー 東館15階 サイボウズ・ラボ 定員 : 一般参加者10人程度(万一応募が多数あった場合は場所の変更があるかもしれません) 前回のアドホック会議参加者の何人かはそのままC++WGにエキスパートとして入ることになったので、 今のところ、前回よりは一般参加枠を少なく設定しています。 参加希望の方は、以下から参
先日の多態について少し補足。 継承を使うときの考え方として、"実装の継承"と"インタフェースの継承"があります。 前者は再利用するための継承、後者は再利用されるための継承です。 ところが、C++に限らず、一般的な継承の仕組みは、実装とインタフェースの両方を継承してしまい、クラスの肥大化や冗長化を招きやすくなっています(JavaやC#にはinterfaceが、C++には純粋仮想関数があり、一応インタフェースのみの継承は可能にはなっています)。 これを避けるために、NVIイディオムやprotected non-virtual デストラクタを使うわけですが、実のところ、継承を使わないほうが(コード量は多くても)、スマートなデザインになることが多々あります。 事実、既存の実装を再利用するだけならばコンポジョン(+pimpl)だけで通常は十分ですので、インタフェースを継承する必要が無ければ(特にpu
6月 11th, 2008 Posted in C++ Windowsアプリケーションでもネットワークにつながって、サーバアプリケーションと連携することが多くなってきてますねぇ。ネットワークといえば文字コードはUTF-8なイメージがあるワタクシですが、C++ではShift-JISなアプリばっかり作ってきたので、UTF-8に変換するにはどうしたらいいの?ってことでまとめます。 C++でShift-JISをUTF-8に変換するには、 Shift-JIS→UTF-16→UTF-8 の順番で変換する必要があります。 そもそも、UTF-16とUTF-8はどう違うのか。UTF-16は文字に割り当てられる番号(コードポイント)が2バイトで格納されます。一方UTF-8は、0~127のコードポイントは1バイトで格納され、128から上のコードポイントは、2~6バイトで格納されます。0~127のコードポイントで
Page Menu Welcome Programs Faculty and Staff Expand Menu Item Faculty and Staff Faculty Office Hours Instructional Student Assistant Industry Advisory Board Advising Resources Expand Menu Item Resources Forms CSE Club WiCSE CS Certificate for K-12 Educators Seminars Careers ExCELS Grant Program Proactive Approaches for Training Hispanics in STEM (PATHS) Internships & Careers Computer Labs & Suppor
今日は Faith and Brave 氏 http://d.hatena.ne.jp/faith_and_brave/ の主催する Boost.勉強会 ってイベント(?)に行ってきました: http://atnd.org/events/1839 正直キャンセル待ちが多くて諦めてたのですが、昨日ついったーで「飛び入りもOK」らしいと聞き、急遽参戦。最悪は立ち見だな、とか思ってましたが、会場は意外と余裕があって安心。 10時から18時過ぎまでという長丁場の勉強会でしたが、むちゃくちゃ密度の高い時間だったせいもあって、体感的には本当に一瞬でした。 そこで今日の随筆は、その Boost.勉強会 について、適当にまとめてみようと思います。 その多くは、ついったー #boostjp で呟いたことですが、どうせすぐログも流れちゃうですしね。 まず細かい流れですが、こちら http://d.hatena
gccのオプションには、-fdump-class-hierarchyというオプションがあり 各クラスの階層構造と仮想関数テーブルのレイアウトの表現をファイルに ダンプします。ファイル名は、ソースファイル名に .class を追加して作成されます。 -options 形式が使用されるなら、options は -fdump-treeと解説されています。 class Hoge { public: virtual void func(){} }; int main() { return 0; } をビルドすると、main.cpp.t01.class というファイルが作成され、中に Vtable for Hoge Hoge::_ZTV4Hoge: 3u entries 0 (int (*)(...))0 4 (int (*)(...))(& _ZTI4Hoge) 8 Hoge::func Class
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く