Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

c++に関するgfxのブックマーク (113)

  • unique_ptr C++03 emulation

    Howard E. Hinnant 2009-01-02 unique_ptr Emulation for C++03 Compilers Download header here: unique_ptr.hpp Download header and tests here: unique_ptr.zip unique_ptr is a class template smart pointer currently in the C++0X CD1 draft. It is intended to be a safer and more flexible replacement for auto_ptr. It represents sole (unique) ownership of a resource such as memory (like auto_ptr).

    gfx
    gfx 2010/11/26
  • gccにconstexprが実装された

    GCC 4.6に、constexprが実装された。constexprについては、特に難しいことはない。単に、関数やクラスを、コンパイル時定数にできるというだけの話である。ともかく、せっかくなので使ってみる。この機能は、細々と解説するより、実際にコードを示したほうが分かりやすいであろう。 まずは、constexprな変数である。 int main() { constexpr int a = 0 ; // OK int value = 0 ; constexpr int b = value ; // エラー const int c = value ; // OK } constexpr指定された変数は、必ずコンパイル時定数になる。変数の初期化子は、定数式でなければならない。constとの違いは、constはコンパイル時定数でなくてもよいのである。constは、初期化子が定数式の場合、定数式にな

    gfx
    gfx 2010/11/17
  • 開発メモ: ローカルMapReduceの性能

    Kyoto CabinetMapReduceを実装したという話は前回書いたが、そのLuaバインディングでもMapReduceをサポートした。また、Kyoto Tycoonとそのスクリプト言語拡張でもMapReduceをサポートした。今回はその性能について解説する。 ローカルMapReduceのツボ 世に言うMapReduceは分散処理のフレームワークだけれども、KC/KTの「ローカルMapReduce」は分散処理を行わない。分散処理をしなかったらデータ処理能力が上がらないじゃないかと思うかもしれないけれども、そうとも限らないのだ。前回も書いたけども、MapReduceフレームワーク部分をうまく実装すると、時間効率と空間効率の双方を向上させることができる。特にキャッシュとソートの部分に工夫がある。 MapReduceは、リポジトリ内(KCではデータベースファイル内)の各レコードからキーと値

  • XSでC++を使おうとしたけど挫折したので教えてクン>< - Kentaro Kuribayashi's blog

    追記 コメントでご教示いただいた通り、とりあえず#include を、ファイルの一番最初にもっていけば、エラーは起こらなくなるようです。id:tokuhiromさん、通りすがりさん、ありがとうございました!!1 C++の勉強がてら、XSでC++ライブラリのバインディングを作ってみようと思いました。しかし、超初歩的なところでつまづいてしまいました……。どうすればいいかさっぱりわからない><。。。そこで偉いひとの降臨を待つことにしました。誰か教えてくれくれクンだお><。。。 概要 MacOSX/Debian双方において、UncoというモジュールのためにUnco.xsを書いてるとして、下記のようにC++ライブラリのヘッダファイルを #include <iostream> とかしてincludeした途端、いろいろうまくいかなくなる。環境については、このエントリの下部に記載。 やったこと 準備する。

    XSでC++を使おうとしたけど挫折したので教えてクン>< - Kentaro Kuribayashi's blog
    gfx
    gfx 2010/11/08
    Perlのヘッダファイルでマクロを定義しまくるのが干渉している件
  • 「Scalaがもたらす言語の進化」というタイトルで発表してきた - Faith and Brave - C++で遊ぼう

    Scala勉強会第9回 in 渋谷で発表してきました。 まだScalaでがりがりコード書けないので、外の言語からみたScalaの話をしました。 Scala lang evolutionView more presentations from faithandbrave.

    「Scalaがもたらす言語の進化」というタイトルで発表してきた - Faith and Brave - C++で遊ぼう
    gfx
    gfx 2010/10/28
  • MSVCのランタイムとスレッドとリソースリークの関係

    の虫: いまだに変な宗教が流行っているを書いたところ、どうもこのへんの情報は、あまり知られていないようであるので、できるだけ分かりやすく解説することにした。 Cの標準ライブラリは、恐ろしく古いライブラリである。その設計は、マルチプロセッサ(コア)上で動作するマルチスレッドが当然の現代では、あまりよろしくない。 たとえば、strtokという関数がある。この関数は、引数として渡された文字列を、内部のバッファにコピーする。次のstrtokの引数には、NULLを渡すことで、そのコピーされたバッファから、次のトークンの場所へのポインターを返すのである。 void f( char const * ptr ) { char const * p1 = strtok( ptr, " " ) ; char const * p2 = strtok( NULL, " " ) ; } しかしもし、strtokが複

  • ニコニココメントサーバーにおけるメモリ使用量増大問題の調査と対策 - ドワンゴ 研究開発ブログ

    はじめに コメントサーバーは、ニコニコ関連サービスのコメントを司るサーバーである。稿は、ニコニコ広場で起こったコメントサーバーメモリ使用量増大問題について、我々コメントサーバー担当が行った調査と対策のまとめである。 今回のメモリ増大問題の解決にあたり、「仮説を立てる + 計測する→修正する→確認する」というパターンを繰り返した。このパターンは、ソフトウェアの様々な問題を調査するのに適用できる、基パターンである。 コメントサーバー概要 コメントサーバーについて簡単に概説する。 コメントサーバーはニコニコ関連サービスのコメントを管理するサーバーである。基的な機能は、新しいコメントの保存、およびコメントの出力である。ニコニコサービスのユーザーがコメントサーバーに直接触れることはなく、ニコニコのプレイヤーがコメントサーバーと直接やりとりを行う。ニコニコ動画の例でいうと、コメントサーバーを使用

  • 開発メモ: 50行のC++コードでWebサーバを実装する

    「Kyoto Tycoonの設計 その四」改め、50行でWebサーバを書く方法を解説する。前回実装した「多重I/Oマルチスレッド汎用TCPサーバ」の上にHTTPの処理を行う層をつけて、「多重I/Oマルチスレッド汎用HTTPサーバ」を司るクラスを実装してみたので、それを使ってちょちょいとやる。 URLクラス HTTPと言えばURLが使えないと意味がない。URLは単なる文字列として扱ってもよいのだが、様々なシーンで分解や加工が必要になり、その処理はなにげに複雑で面倒なので、予めクラスとして導出しておいた方がよいだろう。 class URL { public: // 文字列のURLを解析して内部構造を作る void set_expression(const std::string& expr); // スキーム要素を設定する void set_scheme(const std::string&

  • Boost.勉強会 #2 - Life like a clown

    Programming, C++メモ.全部終わったら,多分書き直します.Boostライブラリ一周の旅 ( id:faith_and_brave, @cpp_akira )Polygon, MSM 辺りは分からないのでスルー Boost.PropertyTree 全て (e.g., xml, json, ini, ...) をいったん単純な木構造に落とし込むと言うコンセプト. XML パースについては,確か RapidXml 以外にも(オプション指定で)TinyXml++ とかを使える. PropertyTree に限らず,get(), get_optional() の処理の違いってどう実装されてるんだろう? boost::optional() get_optional(const string& key) { try { return boost::optional(get(key));

    gfx
    gfx 2010/09/11
  • deleted definitionによるクラスの初期化の制御

    bool型で初期化したいクラスがあるとする。 struct Boolen { Boolen( bool ) { } } ; 残念ながら、このクラスは、あまり宜しくない。なぜならば、C++には、忌々しい暗黙の型変換というものがあるからだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = 123 ; // OK、ハァ? Boolen c = &a ; // OK、おいおい、おかしいだろ常識的に考えて } このような馬鹿げたコードは、コンパイルエラーになって欲しい。もし、数値やポインターをboolとして扱いたいのであれば、明示的にキャストするべきなのだ。 int main() { Boolen a = true ; // OK、当然だ Boolen b = bool( 123 ) ; // 自分が何をしているのかは十分承知している Bool

    gfx
    gfx 2010/09/06
  • 誰が得するのか分からない配列の仕様

    江添亮 自由ソフトウェア主義者 C++ Evangelist C++標準化委員会の委員 ドワンゴ社員 C++11を執筆した。 株式会社ドワンゴで働いている。 Mail:boostcpp@gmail.com Twitter:@EzoeRyou GitHub: https://github.com/EzoeRyou 江添亮のマストドン@EzoeRyou 筆者にブログのネタを提供するために、品物をアマゾンお気に入りリスト経由で送りたい場合: Amazon.co.jp: 江添亮: 江添のほしい物リスト 筆者にブログのネタを提供するために、直接に品物を送りたい場合、住所をメールで質問してください。 View my complete profile ► 2020 (31) ► December (2) ► November (2) ► September (2) ► August (4) ► Jul

    gfx
    gfx 2010/09/04
    なんだこりゃ…w
  • C/C++ で使える Hashtable - いけむランド

    Java のように豊富なライブラリを標準で提供している開発言語を使い慣れてしまうと、ふと C に戻った時に「リストとかハッシュテーブルがないから、再実装するか...いやそれともライブラリを探してきた方がいいか...。」と嘆くこともしばしば。 そこで以前 C/C++ 言語で使用できるハッシュテーブルについて調べたものを簡単にまとめておく。 glibc 言わずと知れた GNU の標準 C ライブラリ。search.h というヘッダがあり、その中にハッシュテーブルを管理できる API が提供されている。 STL (Standard Template Library) C++ の標準テンプレートライブラリ。hash_map がハッシュテーブルを提供するクラス。 GLib gtk+ のために設計・実装された低レベルライブラリ。GHashTable がハッシュテーブルを提供する構造体。 Eet EFL

    C/C++ で使える Hashtable - いけむランド
    gfx
    gfx 2010/08/30
  • StringPiece というライブラリの話 - 兼雑記

    例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,

    StringPiece というライブラリの話 - 兼雑記
    gfx
    gfx 2010/08/24
  • memologue - UNIX上でのC++ソフトウェア設計の定石 (2)

    鉄則2: シグナルハンドラで行ってよい処理を知ろう sigaction関数で登録したシグナルハンドラで行ってよい処理は非常に限定されている 次の3つの処理だけが許されている 自動変数の操作 “volatile sig_atomic_t” 型の大域変数の操作 「非同期シグナルセーフ」関数の呼び出し これ以外の処理を記述しないこと! 説明: シグナル受信時に何らかの処理を行うためには、シグナルハンドラと呼ばれる関数を用意し、それをsigaction関数でシグナル名と紐付けておけばOKです。しかし、シグナルハンドラ内で行ってよい処理は、上記の通り非常に限定されています。これを把握しないまま奔放なコードを書くと次のような現象が起き得ます: 問題1: プログラムがデッドロックする危険がある タイミングに依存する、再現困難なバグの原因となる デッドロックの発生が典型例だが、それ以外にも関数の戻り値不正

    memologue - UNIX上でのC++ソフトウェア設計の定石 (2)
  • Boost.Filesystem使い始め - Faith and Brave - C++で遊ぼう

    v3で日語対応も行われたことですし、そろそろFilesystemも使い始めようかと思います。 今回書いたのは、ディレクトリ内のファイル列挙です。日語使ってないですが。 C:\fooフォルダの中身 a.txt b.jpg c.cppコード #define BOOST_FILESYSTEM_VERSION 3 #include <iostream> #include <boost/filesystem/operations.hpp> #include <boost/foreach.hpp> namespace fs = boost::filesystem; int main() { const fs::path path = "C:\\foo"; BOOST_FOREACH (const fs::path& p, std::make_pair(fs::directory_iterator(

    Boost.Filesystem使い始め - Faith and Brave - C++で遊ぼう
  • Library for libraries - Cube Lilac

    C++は何を間違えたのか: 人生を書き換える者すらいた。より. 2009/12 のBoost.勉強会で一番記憶に残ってるのが,id:faith_and_brave がプレゼン中に何度か使っていた「Library for libaries」と言う言葉でした.この言葉には,Boost などが提供するライブラリには「“エンドユーザ”(アプリケーションを作成するプログラマ)は,別に知らなくても使えなくても問題のないライブラリが数多く存在する」と言う意味も含まれています. いくつか言語を触りましたが,個人的な主観では今でも C++ が書いていて一番心地良いです.これは,私がライブラリ脳 だからと言う事もあります.C++ は他言語よりも「うまくライブラリを書く」ための機能やライブラリが充実しているように感じます.例えば,他言語だと実行時に型チェックをして型毎に必要な処理を記述するようなものが,テンプレ

    gfx
    gfx 2010/08/15
  • GC in C++0x

    2. 自己紹介  氏名: 新 康孝 (あたらし やすたか)  Twitter ID: yak_ex  Web: http://yak3.myhome.cx:8080/junks  C++ / Perl が主戦場  某自動車部品メーカーから某自動車メーカーへ出向中  現在、仕事でコードに触れていない  競技プログラミングTopCoder、Codeforces)で 潤い補充  GC は「ど素人」 3. 渡る世間は GC ばかり  Google Code Jam 2010 Qualifier 使用言語 1位 C++ 4911 6位 Ruby 221 2位 Java 2762 7位 PHP 170 3位 Python 1459 8位 Perl 146 4位 C 751 9位 Haskell 118 5位 C# 648 10位 Pascal 95 4. 渡る世間は GC ばかり

    GC in C++0x
    gfx
    gfx 2010/08/09
  • 『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記

    すでに多くの方がご存知のことと思いますが、株式会社ロングゲートからまもなく『プログラミングの魔導書 〜Programmers' Grimoire〜』が発刊されます。 発売前レビューをするということで、id:faith_and_brave さんより PDF を頂戴していたのですが、まったく自分の役割を自覚していなかった (内容のチェック的なものかと思ってました) ので、予約締切間近 (8/6、つまり明日までです!) ですが、ちょっと紹介させてもらいますね。 Bjarne Stroustrupへのインタビュー デンマーク生まれの長男で髪の毛が年々少なくなっているというビャーネ・ストロストォプさんへのインタビューです。インタビュワーは、丸刈りで丸刈りでC++が好きで「の虫」というブログを執筆されている、江添さんです。 C++0xの現況をざっくり把握するのに、どこを見るのが一番なんだろうか、と悩

    『プログラミングの魔導書 〜Programmers' Grimoire〜』がすごいのです - moriyoshiの日記
    gfx
    gfx 2010/08/06
  • 本の虫: 新しいプログラミング雑誌の発行

    [Grimoire]「プログラミングの魔導書」予約開始! - Faith and Brave - C++で遊ぼう 株式会社ロングゲート - 製品案内 新しいプログラミング雑誌が、とうとう発行された。PDF版は、いますぐ予約購入して、8月7日以降に読むことが出来る。物理的に印刷された雑誌は、予約販売という形をとっている。これは、7月末まで予約を受け付け、その後に印刷して、発送するという仕組みだ。印刷は、予約期間を逃すと、もう手に入れることはできないが、PDF版は、いつでも購入可能になっている。 このブログで何度か言及してきたが、私は、Bjarne Stroustrupへのインタビューをして、その翻訳と、C++歴史について、二の記事を書いた。いうまでもなくBjarne Stroustrupは、C++プログラマでその名前を知らなければモグリであるし、非常に興味深い内容となっている。全C++

    gfx
    gfx 2010/07/17
    とにかく、しばらく続いてほしいので紙+電子書籍で予約しました。
  • 本の虫: 邪悪なC形式のキャストにしかできないこと

    注意:邪悪で汚らわしいC形式のキャストは、いやしくもC++プログラマたる者は、使うべからず C++では、玉虫色のC形式のキャストの機能を、三つに分割した。static_cast、reinterpret_cast、const_castである。しかし、この三種のキャストでは、C形式のキャストを完全に代替できないという声をよく聞く。曰く、「どうしても書けないキャストがある」と。 それはよく聞く話だが、では実際にどのようなキャストなのかということは、誰も審らかにしない。誰も知らないキャストであれば、特に使えなくても問題ないはずだ。ただし、「C形式のキャストならばできるキャストが、新しいキャストを組み合わせてもできない。どんなキャストかは知らないが、とにかくできないと聞いている。故に新しいキャストはクソだ」などという論調で、C++の改良されたキャストを使わぬC畑の外道がしゃしゃり出てくるのも困る。そ

    gfx
    gfx 2010/07/06
    まとめ:C形式のキャストは使うべからず