タグ

ブックマーク / faithandbrave.hateblo.jp (80)

  • 非同期APIのリトライ - Faith and Brave - C++で遊ぼう

    非同期APIをラップして、リトライ処理を入れる。やってることは、エラーハンドラの関数オブジェクトをラップしてリトライ状態を持たせ、再帰的に非同期APIを呼んでいる。 #include <iostream> #include <string> #include <functional> void asyncApi(std::function<void(const std::string& data)> callback, std::function<void(const std::string& error)> errorF) { std::cout << "async api" << std::endl; errorF("error"); // callback("data"); } struct AsyncRetryFunctor { std::size_t retry_; std::f

    非同期APIのリトライ - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2014/06/19
  • MySQLの実装にBoost.Geometryが使われはじめた - Faith and Brave - C++で遊ぼう

    Why Boost.Geometry in MySQL? MySQL 5.7のリリースから、そのビルドがBoostに依存するようになります。MySQLの幾何演算を、Boost.Geometryライブラリのコードに置き換えることになったからです。 近年、ロケーションベースのサービスが途方もない成長を続けており、MySQLがそのストレージとして重要視されるようになってきました。 MySQL 5.6時点でも、これまでGIS関係の機能は持っていましたが、その幾何アルゴリズムは多くのコーナーケース(Corner Case:めったに発生しない厄介なケース)を扱えませんでした。それを一つひとつ修正するか、既存のアルゴリズムを置き換えるか、どちらを選ぶかという選択肢で、MySQLはBoost.Geometryで既存アルゴリズムを置き換えることを選択したようです。 MySQLコミュニティはBoost.Geo

    MySQLの実装にBoost.Geometryが使われはじめた - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2014/04/29
  • C++14 TS 並列アルゴリズムライブラリ - Faith and Brave - C++で遊ぼう

    N3724 A Parallel Algorithms Library C++14後のParallelism TSでは、並列アルゴリズムの導入が検討されています。 いま考えられているのは、アルゴリズムの実装を実行ポリシー(タグ)で分岐しようというもの。 std::vector<int> vec = ... // これまで通りの、シーケンシャルソート std::sort(vec.begin(), vec.end()); // 明示的なシーケンシャルソート std::sort(std::seq, vec.begin(), vec.end()); // 並列実行の許可 std::sort(std::par, vec.begin(), vec.end()); これは、CUDAのThrustライブラリが行っている設計を踏襲したものです。 このような作りにしておけば、今後の拡張がしやすいそうです(ベク

    C++14 TS 並列アルゴリズムライブラリ - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/11/26
  • オイラー路をBoost.Graphに提案する予定 - Faith and Brave - C++で遊ぼう

    euler_path.hpp - Shand test_euler_path.cpp - Shand test_is_euler_graph.cpp - Shand 以前私が書いた、オイラー路を求める関数を、Boost.Graphに提案する予定です。 実装とテストの整理と、簡単なドキュメンテーションコメントを付けて、とりあえず形はできました。 あとは、これをboost名前空間に移したら、Boost.Graph作者のWillcockさんに送るつもりです。 私自身はグラフ理論の専門家ではないので、若干の不安があります。どなたか有識者の方にレビューしていただけると助かります。

    オイラー路をBoost.Graphに提案する予定 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/10/01
  • C++14とC++1yの新しいペーパーがさらに公開された - Faith and Brave - C++で遊ぼう

    New paper: N3744, Proposing pure—Walter Brown 関数が外部の変数を変更しない「純粋関数(pure function)」であることをコンパイラに伝える、pure属性を入れよう、という提案。 関数が引数のみに依存して結果を生成するようになると、状態変化によるバグの混入が起こらなくなるので、これはぜひほしいですね。 GCCにはだいぶ前から、__pure__属性があります。それとD言語にも。 標準ライブラリで純粋関数にならない例としては、以下のようなものがあります: printf : I/Oは副作用である tan : グローバル変数であるerrnoを更新する longjmp : 関数のreturnに失敗する mersenne_twister_engine<>::operator() : メンバ変数として持っている状態を更新する New paper: N3

    C++14とC++1yの新しいペーパーがさらに公開された - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/08/30
  • Boost.Log ファイルサイズによるローテーション - Faith and Brave - C++で遊ぼう

    Boost.Logのログファイル出力には、ローテーションの機能が付いています。 出力する日時によって出力先のログファイルを切り替えたり、ファイルサイズが大きくなってきたら他のファイルに切り替えたりする機能です。 今回は、ファイルサイズでのローテーションを紹介します。 #include <boost/log/trivial.hpp> #include <boost/log/utility/setup/file.hpp> #include <boost/log/attributes.hpp> namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; int main() { // ログファイルの出力設定 // logsディレクトリに「年月日_時分秒_番号.log」というファイル名でロ

    Boost.Log ファイルサイズによるローテーション - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/08/01
  • Boost 1.54.0がリリースされました - Faith and Brave - C++で遊ぼう

    Version 1.54.0 - Boost C++ Libraries Boost 1.54.0リリースノート - boostjp Boost 1.54.0がリリースされました! 新ライブラリは、Log、TTI、Type Erasureの3つになります。 また、このバージョンから80386ターゲットCPUがサポート対象外になります。それと、Boost.Signalsが非推奨(deprecated)になりますので、Boost.Signals2に移行してください。 その他、Boost.AlgorithmにC++14のアルゴリズムが追加されたり、Boost.Asioにコルーチンベースの機能が導入されたりしています。詳細は、日語訳もしてあるリリースノートを参照してください。

    Boost 1.54.0がリリースされました - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/07/02
  • Boost.勉強会 #12 大阪でした。 - Faith and Brave - C++で遊ぼう

    Boost.勉強会 #12 大阪 - boostjp 2013/06/22(土)、大阪でBoost.勉強会を開催しました。主催は遥 佐保さんです。 今回ぼくは、「C++コミュニティを作る」という大それたタイトルで発表させていただきました。 Development C++ Community from Akira Takahashi この発表は最初、「コミュニティ」の定義をWikipediaから持ってきたり、海外のコミュニティを淡々と紹介していく方向で作っていたのですが、一度全部捨てました。そういう論理的な説明は、知識にはなっても、これから何かを始める人の動機にはならないというのを知りました。なので今回は、『スイッチ!』というで学んだ「感情に訴えかける」というアプローチを取り入れてみました。 先日cpprefjpをGitHubに移行したのですが、私の発表が終わった日の夜あたりから、pull

    Boost.勉強会 #12 大阪でした。 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/25
  • LLVM/Clang 3.3リリース - C++11全実装バージョン - Faith and Brave - C++で遊ぼう

    Clang 3.3 Release Notes Clang 3.3がリリースされました。 このバージョンでは、C++11の継承コンストラクタ、thread_localキーワード、属性(noreturn、carries_dependency、それとalignas)が実装され、C++11の言語機能に完全対応しました。 carries_dependencyは、現在の実装は何もしないそうです。 また、C++1yの実験的サポートとして、2進数リテラルやdecltype(auto)に対応しています。

    LLVM/Clang 3.3リリース - C++11全実装バージョン - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/19
  • C++Now! 2013のビデオが公開されはじめました - Faith and Brave - C++で遊ぼう

    C++Now 2013 Keynotes now available まず、3つキーノートが公開されました。

    C++Now! 2013のビデオが公開されはじめました - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/12
  • C++14 変数テンプレート - Faith and Brave - C++で遊ぼう

    N3651 - Variable Templates (Revision 1) C++11には、関数テンプレート、クラステンプレート、エイリアステンプレート、リテラル演算子テンプレート、可変引数テンプレートといったテンプレートがありますが、C++14では変数テンプレート(Variable Templates)というものが追加されます。 これは、変数の定義にテンプレートを使用可能にし、変数定義を特定の型で特殊化可能にするというものです。たとえば、円周率πの変数は、以下のように定義できます。 // 円周率変数piの定義 template<typename T> constexpr T pi = T(3.1415926535897932385); // テンプレート定義された変数の使い方 // 円の面積を求める template<typename T> T area_of_circle_with

    C++14 変数テンプレート - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/10
  • GCC 4.8.1 - C++11全実装バージョン - Faith and Brave - C++で遊ぼう

    GCC 4.8 Release Series Changes, New Features, and Fixes アナウンスが遅くなりましたが、GCC 4.8.1がリリースされています。 このバージョンでは、decltypeのN3276仕様に対応、メンバ関数の左辺値 or 右辺値によるオーバーロードという機能が追加され、C++11の言語機能が全実装されました。 ライブラリ(libstdc++)の方で、正規表現ライブラリと、いくつかのType Traitsの実装が不足していますが、実用上十分だと思います。

    GCC 4.8.1 - C++11全実装バージョン - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/07
  • 書籍『The C++ Programming Language』第4版 - Faith and Brave - C++で遊ぼう

    The C++ Programming Language (4th Edition) - Stroustrup The C++ Programming Language (4th Edition) - Amazon こちらもアナウンスが遅れましたが、Bjarne Stroustrupの書籍『The C++ Programing Language』の第4版が2013/05/19に発売しました。C++11に対応しています。 日語では『プログラミング言語C++』というタイトルで、第3版まで発売しているシリーズです。

    書籍『The C++ Programming Language』第4版 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/06/07
  • C++14のCommittee Draftが公開されました - Faith and Brave - C++で遊ぼう

    New paper: N3690, Programming Languages—C++, Committee Draft C++14のCommittee DraftであるN3690が公開されました。規格書のベータ版です。 Working Draftをすっ飛ばしてCommittee Draft(CD)になったので、この次のステップはもう、各国のコメントを受けて修正するDraft International Standard(DIS)です。なので、ここから大きな追加・変更はないと思います。 軽量コンセプト、ファイルシステムライブラリ、ネットワークライブラリの基的な機能なども検討されていますが、今回のドラフトには含まれていないようです。こちらは、「Trip Report: ISO C++ Spring 2013 Meeting」にあるように、C++14と同時に公開できるよう、並行して仕様策定が

    C++14のCommittee Draftが公開されました - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/05/16
  • optionalがC++14入り - Faith and Brave - C++で遊ぼう

    N3672 A proposal to add a utility class to represent optional objects (Revision 4) optionalがC++14に入ることが決まりました。 boost::optionalベースで、細かいところが変わってます。変更点は、上記paperかこのブログの履歴を追ってもらうとして、Revision 4ではoperator==()とoperator<()以外の比較演算子が削除されています。 これは、それ以外の演算子の動作について合意がとれなかったのと、これらの演算子が、コンテナにoptionalを入れることのみを目的にしているからだそうです。 std-proposalsでいまsatodaさんが「せめてoperator!=()はほしい」という意見を出して議論しています。 optional Rev.4 (N3672): Wh

    optionalがC++14入り - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/05/08
  • C++14 実行時サイズの配列(コア言語版) - Faith and Brave - C++で遊ぼう

    N3639 Runtime-sized arrays with automatic storage duration (revision 5) 以前、「C++1y 動的配列クラスの提案」というエントリで、std::dynarrayクラスが提案されていることを紹介しましたが、ライブラリ側だけでなく、組み込み配列の拡張としての動的配列も考えられています。そしてこの両方が、C++14に含める予定で進められています。 コア言語版の方は、見た目はC99のものと同じで、組み込み配列の定義時に実行時の要素数を指定します。 void f(int n) { int ar[n]; } C99とは異なり、実行時サイズの配列は、sizeofをとることはできません。 配列の領域確保にスタックが使われるかどうかは、規定されません。要素数に0以下が指定されたり、実装定義の限界要素数を超えたりする場合は、std::bad

    C++14 実行時サイズの配列(コア言語版) - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/05/07
  • C++1y 通常の関数の戻り値型を推論 - Faith and Brave - C++で遊ぼう

    N3638 Return type deduction for normal functions ラムダ式では、return文から戻り値の型を自動的に推論してくれますが、通常の関数は推論してくれません。この提案は、ラムダ式と同じく、通常の関数でも戻り値型を推論できるようにしよう、というものです。 通常の関数で戻り値を推論してほしい場合は、関数宣言の戻り値型を「auto」にします。 auto f(); // 関数f()の宣言。戻り値の型は「不明」。 auto f() { return 1; } // 関数f()の戻り値型はint int x = f(); // x == 1 参照型を返したい場合は、戻り値の型をauto&にします。 int x = 3; auto& f() { return x; } int& r = f(); ここまでの機能は、GCC 4.8で-std=c++1yオプション

    C++1y 通常の関数の戻り値型を推論 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/05/01
  • C++ポケットリファレンスについて書ききれなかった、いくつかのこと - Faith and Brave - C++で遊ぼう

    昨日、『C++ポケットリファレンス』の紹介エントリを書きましたが、ここではそのエントリで書ききれなかったことを書きます。読者向けではなく、このの著者とレビュアーのためにプロジェクトの記録として残すことと、の執筆に携わる人に参考にしてほしい、という意図で書きます。 プロジェクトメンバの構成 『C++ポケットリファレンス』の執筆は、6人の共著者、編集者が1人と、5人のレビュアーが関わっています。ぼくはとりまとめ役です。 その内、レビュアーの一人である兎さんが、レビュー管理のためのRedmineを立てて運営してくれていて、同様にレビュアーの一人であるDigitalGhostさんが、原稿管理のためのGitリポジトリを用意してくれました。Gitリポジトリは、弊社ロングゲートのサーバーに置いてあります。 使用したサービスとツール 単著でレビュアーなしであれば、エディタで原稿を書き、それを編集者に送

    C++ポケットリファレンスについて書ききれなかった、いくつかのこと - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/04/25
  • C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう

    N3571 A Proposal to add Single Instruction Multiple Data Computation to the Standard Library ひとつのCPU命令で複数のデータを操作する、SIMD(Single Instruction Multiple Data)を抽象化したライブラリの提案。これは、スレッドを使用するタスク並列性に対して、データ並列性と呼ばれている分野の技術です。 この提案は、Boost.SIMDとしてBoostに提案される予定のライブラリが元になっています。Boost.SIMDについては、私が翻訳したスライド資料もあるので、合わせて参照してください(Boost.SIMDによる実用的なSIMDアクセラレーション)。 このライブラリは、SIMDを抽象化したpack型と、それに対して操作を行うaccumulate()やtransfor

    C++1y SIMDライブラリの提案 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/04/19
  • C++1y 動的配列クラスの提案 - Faith and Brave - C++で遊ぼう

    N3522 C++ Dynamic Arrays C99にある可変長配列がC++でもほしい、という動機から、std::vectorとは少し違う動的配列クラスが提案されています。 int n = 3; dynarray<int> ar(n); // 動的に要素数を決定する(その後追加、削除はできない) size_t size = ar.size(); // コンストラクタで設定した要素数を取得(3が返る) // イテレータによる操作 for_each(ar.begin(), ar.end(), [](int&) {}); コンストラクタで動的な要素数を決定し、その後、要素の追加・削除を行わないのが特徴です。 アロケータを設定できないインタフェースになっていますが、これは領域をヒープにとるかスタックとるかを、ユーザーに決定させない(隠蔽する)という目的があるようです。 現状、ムーブできない等、

    C++1y 動的配列クラスの提案 - Faith and Brave - C++で遊ぼう
    hiroyukim
    hiroyukim 2013/04/03