タグ

c++とC++に関するf99aqのブックマーク (95)

  • 並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi

    分散KVS kumofs のコードは、全体で約2万行です*1。 そのうち、ネットワークI/Oやプロトコルに関するコードは約1万行*2で、全体の約半分を占めています。 ロジックは残りの半分*3だけで実装されています。 この実例から分かりますが、kumofsのような分散アプリケーションを開発するにはI/O周りの実装が大変で、とてつもなく大きな障壁になっています。*4 さらに今日では、性能を稼ぐためにマルチスレッド化が必須です。また、多数のクライアントを少ないリソースで効率よく相手にするには、非同期・イベント駆動型のアーキテクチャも必要になります。さらに、究極的な性能を達成すべく GC を利用しない C++ においては、実装のみならず設計も大変です。 これに加えてソケットAPIの難解な挙動に対処にしなければならないため、C言語やC++によるネットワークプログラミングは、vimの使いこなしなどと同

    並列イベント駆動I/Oフレームワーク「mpio」リリース - Blog by Sadayuki Furuhashi
    f99aq
    f99aq 2010/05/04
    おもしろそう。ソース読んでないから std::auto_ptr で良いのか判断がつかないけど、もやもやしてる。
  • re2 - Project Hosting on Google Code

    This is the source code repository for RE2, a regular expression library. For documentation about how to install and use RE2, visit https://github.com/google/re2/. The short version is: make make test make install make testinstall Building RE2 requires Abseil (https://github.com/abseil/abseil-cpp) to be installed on your system. Building the testing for RE2 requires GoogleTest (https://github.com/

    re2 - Project Hosting on Google Code
  • clangでObjective-Cプログラムを静的解析

    はじめに 今回は、clangの静的解析機能を紹介します。 LeopardのOpenGLに採用されたことでも知られる、LLVMというコンパイラプラットフォームがあります。clangはLLVM内のプロジェクトのひとつで、gccに変わるC/C++/Objective-C用のLLVMフロントエンドを開発しています。 複数のAppleエンジニアが開発に参加しており、Objective-Cを積極的にサポートしているのも特徴です。 clangでは、通常のコンパイラとして以外にもコードの内部構造にアクセスするいくつかの機能があり、そのひとつが静的解析機能です。 プログラムの静的解析 プログラムを実行せずにプログラムの問題点・バグなどを分析することを「静的解析」といいます。 最近では、JavaのFindBugsが有名ですね。 人力で行うコードレビューも、静的解析と言われることもあります(そりゃそうでしょう

    f99aq
    f99aq 2009/10/17
    静的解析
  • clang-intro

    The document discusses Clang, a C language family front-end toolkit written in C++. Clang was created at LLVM.org in 2006 and can parse C, C++, and Objective-C code. It consists of several core components like the lexer, parser, semantic analyzer, and AST (abstract syntax tree) that allow it to read code and produce LLVM IR that can be optimized and run on different systems. Clang aims to provide

    clang-intro
    f99aq
    f99aq 2009/07/28
  • C++ のプログラムのデバッグを楽にする方法

    Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な

    C++ のプログラムのデバッグを楽にする方法
  • C++TMPを使ってコンパイル時に多倍長フィボナッチ計算。 - 簡潔なQ

    C++テンプレートメタプログラミング、つまりC++のテンプレート機能を使うと、静的に決定できる計算をコンパイル時にやってのけることができる。 あまりにすごすぎたのでフィボナッチ計算のプログラムを作ったのだが、unsigned long long intではすぐ桁あふれしてしまうので、テンプレート多倍長を組んでフィボナッチ計算。 ただし、FFT多倍長乗算とかまで実装する余裕はないので、行列を使った累乗の方法ではなく、普通の加算による線形時間計算の方法を使った。 今回はfib(700)を求めた。コンパイルには5分ほどかかった。 #include <iostream> using namespace std; namespace TMP { template<bool expr, typename IfTrue, typename IfFalse> struct select { typedef

    C++TMPを使ってコンパイル時に多倍長フィボナッチ計算。 - 簡潔なQ
  • Expression Template - Faith and Brave - C++で遊ぼう

    operator+ - * / のような演算子の一般的な実装では一時オブジェクトのコストが発生します。 Vector operator+(const Vector& l, const Vector& r) { const std::size_t n = l.size(); Vector tmp(l); for (std::size_t i = 0; i < n; ++i) tmp[i] += r[i]; return tmp; } そのため、以下のような式を書いた場合 Vector x, y, z, t; t = x + y + z; x + y + z では 2 つの一時オブジェクトが生成されてしまうのです。 以下のように書けば一時オブジェクトは生成されませんが const std::size_t n = x.size(); for (std::size_t i = 0; i < n;

    Expression Template - Faith and Brave - C++で遊ぼう
    f99aq
    f99aq 2008/10/13
  • Mozilla コーディングスタイルガイド - Mozilla | MDN

    このドキュメントは Mozilla コードベースで使われる基スタイルとパターンを説明するためのものです。 新しいコードはこれらの標準に沿うよう試みるべきです。それは、既存のコード同様にメンテナンスが楽になるためです。 もちろん、どのルールにも例外はあります。しかし、にもかかわらずルールを知ることは重要なのです! これは、新しく Mozilla コードベースへ向かっている、コードをレビューされるプロセスにある人へ特化して向けられています。 レビューを受ける前に、このドキュメントを読み通して、あなたのコードがここで推奨されている内容に沿っていることを確認してください。 命名とコードのフォーマット The following norms should be followed for new code, and for Tower of Babel code that needs cleanup

    Mozilla コーディングスタイルガイド - Mozilla | MDN
  • C-users.jp - 日本のC/C++ユーザのためのハブサイト

    YAPC::Asia 2008でMichael Schwernは「SEOに有効な独自ドメインを取って、もっとPerl初心者が集まりやすいniceなPerlの情報を集めたサイトを作れ!」といったそうです。そして「Perl-users.jp - 日Perlユーザのためのハブサイト」ができました。これはC/C++も同じではないのか。そう思い、c-users.jpドメインを取って、ここにC-users.jpを開始します。平成二十年六月四日 流れに乗っかって、発作的にドメインを取ってサイトだけ立ち上げましたが、当然の如くノープランです。 ポリシー的な物 C及びCの拡張言語(C++C++/CLI、Objective-C、Cg、SystemCなど)の話題について広くキャッチアップしたいと思います。 後継言語(C#、Dなど)については関与しません。 Win32 APIやDirectXなどの話題があっ

  • RealLib ではじめる誤差ゼロ実数計算 - 2008-09-09 - ひとり勉強会

    RealLib のソースコード読みを始めるはずだったんですが、なんだか全然進んでないので適当なまとめエントリでお茶を濁します! RealLib が普通にかっこよすぎるので紹介しまくりたくなりましたので紹介記事です。 実数計算と誤差 たいていのプログラミング言語の「実数 = 浮動小数点数」の計算には「誤差」があります。たとえばPythonのばあい: Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 0.1 + 0.1 + 0.1 - 0.3 5.5511151231257827e-017 0.1 を 3 回足しても 0.3 にはな

    RealLib ではじめる誤差ゼロ実数計算 - 2008-09-09 - ひとり勉強会
    f99aq
    f99aq 2008/10/12
    RealLib
  • Kazuho@Cybozu Labs: なんとなくリフレクション in C

    f99aq
    f99aq 2008/10/12
    map で持ってるのか
  • Tamarin での文字列 - steps to phantasien(2008-08-31)

    2008-08-31 近況 LL Future というイベントに呼んで頂き, 中野へ. 前日の激しい雷で眠りが浅く寝坊したら, 基調講演は Larry Wall だったらしい. 聞き逃した. なんてこったい... そしてサインを貰う準備もしていなかった. 昼飯をべる暇があったら紀伊国屋に駆けこむんだったといまだに後悔している. おしいことをした. 宴会でゴルフ場経営者に見せてもらった サイン実物はとても気が利いたもので, まったくうらやましい. 彼のは年季が入った版の上にかなり読みこまれた形跡があったので, Larry Wall も嬉しかったことだろうな. 私もいつか実現するであろう Stroustrup の来日に向け, 件のを読み込んでおかねばなるまい. パネルの内容は shibuya.js 番外編というかんじで, JS や ActionScript の上で実装した処理系の紹介を中

  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary
  • あなたはC++の発明者? それとも創造者?~Bjarne Stroustrup氏との対話~:CodeZine

    はじめに 「Bjarne Stroustrup氏との対話」連載を担当することになりました、豊田孝と申します。よろしくお願いいたします。 対話の相手であるBjarne Stroustrup氏は、プログラミング言語「C++」を設計し、最初に実装した人です。それだけでなく、同氏はC++を国際標準プログラミング言語の地位に付かせました。大変なエネルギーの持ち主です。 筆者はこの数年、「同氏の生き方から何かを学べるのではないか」と考えてきました。その考えは日毎に熱を帯び、「学べるはずだ!」、そしてついには、「わが国の開発者に、同氏の考え方と生き方ぜひお伝えしたい!」へと変化し今回の連載を始めるに至りました。 稿でのStroustrup氏との対話はメール交換を通して行われます。基的には、筆者が質問文を用意し、Stroustrup氏がその質問に対して高所からコメントを寄せることになります。C++言語

  • [C++][C++0x]structual よりも non-intrusive だと思うにゃー - Cry’s Diary

    http://www.kmonos.net/wlog/85.html#_0905080505 う〜ん, structural かどうかではなくて non-intrusive かどうかっていう軸の方が重要だと思うんですけれどどうなんでしょうかねー. non-intrusive という言葉を明快に定義してくれている書籍なりサイトなりが少なくてアレなんですが,オレオレな理解で行くと, non-intrusive とは,あるデータ型 T が何らかの制約 (これこれこういうインタフェイスを持ってないといけないよ,という決まり) を満足しているかどうか,に関する記述が T の定義と独立に記述することができる,あるいはもはや制約の充足に関する記述自体不要,ということだと理解しています. 歴史的な流れでいうと STL の存在が大きいのはこれは k.inaba さんの指摘どおりだと自分も思っていて,たとえば

    [C++][C++0x]structual よりも non-intrusive だと思うにゃー - Cry’s Diary
  • はてなブログ | 無料ブログを作成しよう

    ネビュラロマンス 後篇 ~Perfume東京ドーム公演・そしてコールドスリープへ~ Perfumeは2025年9月17日にニューアルバム「ネビュラロマンス 後篇」を発売。そして9月21日、「2026年から一度”コールドスリープ”(活動休止)する」ことと、翌日からの東京ドーム2daysが「コールドスリープ前最後のライブ」になることを発表しました。Perfumeの事にな…

    はてなブログ | 無料ブログを作成しよう
    f99aq
    f99aq 2008/04/29
  • ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 後編 - higepon blog

    ロベールのC++入門講座を読んで C++ を初歩の初歩から再入門するよ - 前編の続きです。 13章 もっと深く(11:12) 13-12 から再開。 テンプレート引数には typename 以外のものも使えるよという話。 まずはテンプレート引数にクラステンプレートを渡す話。 簡単に写経。 template <template <typename, typename> class TEMPL> class Huga { public: TEMPL< int, allocator<int> > v; }; Huga<vector> huga; 次にテンプレート引数に整数定数を渡す場合。 おお。これは使えるなあ。 template <int N> class SBit { public: static const int VALUE = 1 << N; }; int main(int argc

    f99aq
    f99aq 2008/03/23
    う〜ん、これは読みたくなってきた。
  • C++11 - Wikipedia

    この記事は更新が必要とされています。 この記事には古い情報が掲載されています。編集の際に新しい情報を記事に反映させてください。反映後、このタグは除去してください。 (2019年1月) C++11は、プログラミング言語 C++ のISO標準 ISO/IEC 14882:2011 の略称である。規格の策定中は2009年中の標準化を目指していたため、C++0x という仮称で呼ばれていた。 ISO/IEC 14882:2003 (C++03) に代わるものとして、2011年8月12日にISOによって承認された[4]。後継のC++14が2014年8月18日に承認されている。 コア言語への機能追加や標準C++ライブラリの拡張を施し、C++TR1ライブラリの大部分を(数学的特殊関数ライブラリを除いて)取り込んでいる。 C++ への修正はコア言語と標準ライブラリの双方に及ぶ。 委員会は、新規格の個別の要素

    f99aq
    f99aq 2008/03/08
    wktk
  • C++0x module - Faith and Brave - C++で遊ぼう

    post-c++0x: modules in c++ module かー・・・ ヘッダーファイルごとじゃなくてライブラリごとに管理できるようにする提案かな export std: public: namespace std { template <class T, class Allocator> class vector; } import std; int main() { std::vector<int> v; return 0; } むしろ、ファイル内だけで using directive できる仕組みがほしい(module とあんまり関係ないけど) // hoge.h using namespace std { // こんなふうに書けたらいいなー class hoge { vector<string> v; }; } // using namespace std // main.

    C++0x module - Faith and Brave - C++で遊ぼう
  • C++0x 右辺値参照の使い道 - Faith and Brave - C++で遊ぼう

    右辺値参照は主に大きいオブジェクトを戻り値にするときに使う vector<int> foo() { vector<int> v; ... return v; } int main() { vector<int>&& v = foo(); return 0; } だが、実際はライブラリ(クラス)の中で右辺値参照を処理することが多いだろう 右辺値参照の追加にともない、標準ライブラリは総書き換えされるので vectorのコピーコンストラクタと=演算子は以下のようになる template <class T, class Allocator=std::allocator<T>> class vector { public: vector(const vector&); vector(vector&&); vector& operator=(const vector&); vector& operat

    C++0x 右辺値参照の使い道 - Faith and Brave - C++で遊ぼう