タグ

C++に関するyohshiyのブックマーク (93)

  • 高速なハッシュテーブルを設計する | POSTD

    (訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) はじめに 稿では、高速で汎用的なハッシュテーブルを作るために行う、設計についての多くの意思決定事項を紹介します。最終的に、私の emilib::HashSet とC++11の std::unordered_set の間のベンチマークが出来上がりました。もし、ハッシュテーブルに興味があって、自分で設計したいなら(どのプログラミング言語かに関わらず)、稿がヒントになるかもしれません。 ハッシュテーブル は、素晴らしい発明です。 ならし計算量O(1) ( O(√N)時間 )で、挿入、削除、検索を行うことができます。ならし計算量とは、ハッシュテーブルの計算に平均でO(1)の計算量がかかることを意味しますが、時々、これよりも多くの時間がかかる場合があります。具体的には、ハッシュテーブルに空きがない場合で、挿入の

    高速なハッシュテーブルを設計する | POSTD
    yohshiy
    yohshiy 2016/09/23
  • C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 先日、社内で主にLinux上でC/C++を用いている開発者向けの講義をしました。 「こんなことができる」と知ってもらい、興味を持てば各自で勉強してもらおうと広く浅くツールを紹介しました。 gtags, ASan, Valgrind, addr2line, cppcheck, SystemTap, perfなどです。 興味があれば講義資料「C/C++プログラマのための開発ツール」をごらんください。 コンパイラオプション 受講者には新人やサイボウズ・ラボユースの学生もいたので基的なところから紹介しました。 C/C++コンパイラを使うときはできるだけ警告オプションをつけるのが望ましいです。 警告が出るのは自分のコードの書き方に不備があることが多いからです。 gccやclangでは-Wall -Wextraは基としてそれ以外にも有用なオプションがあります(C++

    C/C++プログラマのための開発ツール - Cybozu Inside Out | サイボウズエンジニアのブログ
    yohshiy
    yohshiy 2016/09/15
    Linux 系の開発ツール。
  • C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう

    C++1zから、標準ライブラリのいくつかの機能が非推奨となります。非推奨となった機能は将来のバージョンで削除される可能性がありますのでご注意ください。 std::iteratorクラス 自作イテレータを作るときに基クラスとして使用するstd::iteratorクラスですが、これを使ってもイテレータを定義するのはあまり簡単になりませんでした。 このクラスを使用することによって問題がより複雑になってしまうケースもありましたので、非推奨となります。 Boost.Iteratorのようなイテレータを簡単に定義するための新たな仕組みは提供されませんので、標準ライブラリの範囲では、イテレータは最初から最後まで自分で定義することになります。 std::allocatorクラスのいくつかのメンバと、std::allocator<void> C++11からアロケータの中間インタフェースとデフォルト実装を提

    C++1z 古くなった機能を非推奨化 - Faith and Brave - C++で遊ぼう
    yohshiy
    yohshiy 2016/09/12
    使ってる機能ひとつもないけど、一応ブクマ
  • 世界最速のフォントレンダラ、font-rsの内部に迫る | POSTD

    この2年間、フォントのレンダリングソフトについて性能の限界を追究してきました。結論は、Rustで書かれたフォントレンダラ font-rs が、業界標準のFreeTypeに比べて、マグニチュード単位のレベルで速いということです。現時点ではこれは製品レベルのライブラリではなく技術的なデモではありますが、その速さを解析するに十分すぎるほどの理由になります。今回の投稿では、目を見張るようなパフォーマンスがどうやって生まれたのかを正確に記すつもりです。 測定結果 最初に数値について説明します。以下は、pixels/emの値を 1から200の間で変化させて、Roboto Regularフォントの「g」のレンダリングに要した時間を測定した結果です。測定は2.9GHzのXeon E5-2690で行いました。比較したレンダラは、FreeType2.6.5、純正Rustのみのfont-rs、SIMDで加速した

    世界最速のフォントレンダラ、font-rsの内部に迫る | POSTD
    yohshiy
    yohshiy 2016/08/29
    速度を求められる部分は今までほぼ C++ だったけど、 Rust の選択肢がでてきた。
  • お手軽に使える高速なSSE4.2専用文字検索ライブラリ - Cybozu Inside Out | サイボウズエンジニアのブログ

    サイボウズ・ラボの光成です。 今回はC/C++用文字検索ライブラリmie_stringを紹介します。 mie_stringはテキストの中から複数文字のいずれかが存在する場所を高速に検索する関数を提供します。 文ではその使い方と性能を紹介します。また後半ではSIMD命令を使うときに悩ましい端数処理について詳解します。 準備 mie_stringではCのintrinsic関数(SSE4.2)を使ったものとアセンブリ言語で書いたものの二つを用意しました。 intrinsic関数を使う場合はMIE_STRING_INLINEを定義してからmie_string.hをincludeしてください。 これ以外のファイルは不要です。C/C++のどちらからも使えます。 includeするだけでつかえるので簡単ですね。 なお、コンパイルオプションにはgcc/clangなら-msse42や-mavx、Visua

    お手軽に使える高速なSSE4.2専用文字検索ライブラリ - Cybozu Inside Out | サイボウズエンジニアのブログ
  • GitHub - reinterpretcat/utymap: Highly customizable library for procedural world generation based on real map data

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - reinterpretcat/utymap: Highly customizable library for procedural world generation based on real map data
    yohshiy
    yohshiy 2016/07/27
    色んなデータから 2D/3D マップを作製するライブラリー。コア部分が C++ で、描画部分は Unity で実装されているらしい。
  • Felix

    The Felix Programming Language High performance scripting language. Tutorials | Language Reference | Library Reference | User Guide | Download | Community Run source programs directly. Generates machine binaries via C++ instead of bytecode. Statically typed for reliability and scalability. Supports both ML-like functional and C-like imperative programming styles. Rich set of datatypes in standard

    yohshiy
    yohshiy 2016/07/11
    C++ のコードにも変換できるスクリプト言語
  • Moved to new URL: http://ferret-lang.org

    yohshiy
    yohshiy 2016/06/27
    とうとう Scheme みたいに Clojure → C++ → バイナリー のツールでた。
  • MicrosoftによるC++バイナリへのテレメトリ呼び出しの自動挿入について考える

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    MicrosoftによるC++バイナリへのテレメトリ呼び出しの自動挿入について考える
    yohshiy
    yohshiy 2016/06/24
    ばれたから、今後はやめるというようにも取れる。
  • C++11スマートポインタで避けるべき過ち Top10 | POSTD

    (注:2017/10/25、いただいたフィードバックを元に翻訳を修正いたしました。修正内容については、 こちら を参照ください。) 私は新しいC++11のスマートポインタをとても気に入っています。自分でメモリを管理するのが嫌だと感じる多くの仲間たちにとって、これはいろいろな面で天の助けでした。私の場合、このおかげで新人にC++を教えるのがずっと楽になりました。 しかし、C++11のスマートポインタを幅広く使っていた2年ちょっとの間で、使い方を誤ると、プログラムの効率が落ちたりクラッシュして壊れたりするという事態に何度も遭遇しました。参照用に、以下に例を載せました。 まずはこれらの”過ち”を、簡単なAircraftクラスを例に取って見てみましょう。 class Aircraft { private: string m_model; public: int m_flyCount; weak_p

    C++11スマートポインタで避けるべき過ち Top10 | POSTD
  • mapでキーの有無を調べるには、find()よりcount()が便利 - minus9d's diary

    mapコンテナ(mとする)でキーの有無を調べる場合、今まではメンバ関数のm.find()を呼ぶ方法を使っていた。m.find()を使う方法では、「m.find()の戻り値がm.end()に等しければキーが存在しない、そうでなければキーが存在する」としてキーの有無を判別していた。 しかし、m.count()を使った方がより直感的である。m.count()を使う方法では、「m.count()の戻り値が0に等しければキーが存在しない、1に等しければキーが存在する」という簡単仕様なので分かりやすい。 以下のコードでは、find()を使う場合とcount()を使う場合とを比較した。どちらも結果は同じである。 #include <iostream> #include <map> using namespace std; bool has_key_using_find(map<int, string>

    mapでキーの有無を調べるには、find()よりcount()が便利 - minus9d's diary
    yohshiy
    yohshiy 2016/06/17
    find だと見つかった時点で関数が終わるけど、count は必ず最後の要素まで見る必要がある。結果が同じでも速度が違う。
  • GitHub - doctest/doctest: The fastest feature-rich C++11/14/17/20/23 single-header testing framework

    doctest is a new C++ testing framework but is by far the fastest both in compile times (by orders of magnitude) and runtime compared to other feature-rich alternatives. It brings the ability of compiled languages such as D / Rust / Nim to have tests written directly in the production code thanks to a fast, transparent and flexible test runner with a clean interface. The framework is and will stay

    GitHub - doctest/doctest: The fastest feature-rich C++11/14/17/20/23 single-header testing framework
    yohshiy
    yohshiy 2016/05/23
    ヘッダー一つの軽量単体テストフレームワーク
  • Cling

    What is Cling Cling is an interactive C++ interpreter, built on the top of LLVM and Clang libraries. Its advantages over the standard interpreters are that it has command line prompt and uses just-in-time (JIT) compiler for compilation. Many of the developers (e.g. Mono in their project called CSharpRepl) of such kind of software applications name them interactive compilers. One of Cling’s main go

    Cling
    yohshiy
    yohshiy 2016/05/23
    C++ のインタープリタ
  • Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD

    Sublime Text は、私のお気に入りのプログラミング用テキストエディタです。 Sublime Textで気に入っている特徴の1つは、あいまい検索アルゴリズムです。ファイルや関数の検索が超高速なのです。これまで多くの人が、インターネット上で、この仕組みについて質問していましたが、満足の行く回答はありませんでした。そこで、私が自らこれを解明することにしました。 全部読むのが面倒な方へ 文を読まずに最終結果だけ知りたいですか? 了解! 私は、あなたを責めたりしませんよ。 インタラクティブなデモ: こちらをクリック ソースコード: C++JavaScript Sublime Textの仕組み Sublime Textのあいまい一致とは何でしょうか。そして、なぜそれはそんなに賢いのでしょうか。聞いてくれてうれしいです。 Sublime Textには、2つの非常に便利なナビゲーション関

    Sublime Textの「あいまい一致」をリバースエンジニアリング | POSTD
    yohshiy
    yohshiy 2016/05/12
    なにかに使えるかも
  • 「GCC 6.1」リリース、C++14がデフォルトに | OSDN Magazine

    GNU ProjectのGCC開発チームは4月27日、「GNU Complier Collection(GCC) 6.1」を公開した。6系初のリリースとなり、C++14がデフォルトとなるなどの変更が加わっている。 GNU Complier Collection(GCC)はC/C++/Objective-C、Fortran、Java、Ada、Goなどの言語に対応するコンパイラ集。当初GNU Operating System向けのコンパイラとして開発されたという経緯を持つ。 GCC 6.1は、2015年4月に最初のリリースが公開されたGCC5系に続く最新版となる。5系の最新版は2015年12月に公開された5.3。C++フロントエンドのデフォルトが、これまでのC++98からC++14に変更された。古いC++向けコードについては明示的に使用するC++標準を指定するか、コードの修正が必要としている

    「GCC 6.1」リリース、C++14がデフォルトに | OSDN Magazine
    yohshiy
    yohshiy 2016/05/06
    C++14 がデフォルトで、C++17 も標準ライブラリーが実験的にサポート
  • C++17 and other future highlights of C++

    published at 10.03.2016 11:25 by Jens Weller Save to Instapaper Pocket Welcome to the 3rd and last part about current proposals for C++17 and beyond. In the last part, there was an overview on the current Technical Specifications, most likely to move into C++ after C++17. The full proposal listing of 2016 sorted by subgroups contains many more proposals then I can cover. Last week the C++ Committe

    yohshiy
    yohshiy 2016/03/11
    C++17 と今後の機能のハイライト。リフレクションがついたら、でかい。
  • Introducing C++ experimental io2d - Cristian Adam

    yohshiy
    yohshiy 2016/02/29
    2D の描画ライブラリーが C++ の標準に入ったら、うれしいな。
  • Compilers - What Every Programmer Should Know About Compiler Optimizations

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. February 2015 Volume 30 Number 2 Compilers - What Every Programmer Should Know About Compiler Optimizations By Hadi Brais High-level programming languages offer many abstract programming constructs such as functions, conditional statements and loops that

    Compilers - What Every Programmer Should Know About Compiler Optimizations
    yohshiy
    yohshiy 2016/02/23
    VC++ での最適化
  • C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD

    背景と導入 何十年もの間、CやC++の標準規格は、マルチスレッディングや並行処理を「その標準の範囲を超えたもの」として扱ってきました。標準規格の目的である”抽象機械”の力が及ばない、”対象依存”という影の世界においてです。メーリングリストやニュースグループの質問には並行処理に関するものが山ほど寄せられましたが、それらにすぐに突き返された回答は「C++はスレッドには関知しません」という何とも冷淡なものでした。この件によって当時のことを思い出す人々は、今後も絶えないでしょう。 しかしC++11の登場で、そんな状況に終止符が打たれたのです。C++標準化委員会は、時代の流れに乗らないと、この先C言語が取り残されてしまうと悟ったのでしょう。彼らはスレッドや同期メカニズム、アトミック操作、メモリモデルなどの存在に、ようやく気付いたわけです。そして標準規格として、C++コンパイラやライブラリのベンダーに

    C++11のスレッド、アフィニティ、ハイパースレッディング | POSTD
    yohshiy
    yohshiy 2016/02/12
    C++11 での並列処理関連の話
  • 計算幾何 - boostjp

    計算幾何は、Boost Geometry Libraryによって提供される。 インデックス 2つの図形が互いに素かを判定 2つの図形が交点を持っているかを判定 図形がもう一方の図形の完全な内側にあるかを判定 2つの図形が空間的に等しいかを判定 面積を計算する 図形の中心座標を計算する 図形の凸包を計算する 2つの図形の距離を計算する 2つの図形の差を計算する 2つの図形の和を計算する 2つの図形の共通部分を計算する 図形の包絡線を計算する 図形の長さを計算する 図形を逆向きにする 図形を単純化する 図形から重複した点を削除する 図形を平行移動する 図形を拡大縮小する 図形を回転する 2つの図形が互いに素かを判定 2つの図形が互いに素かを判定するには、boost::geometry::disjoint()アルゴリズムを使用する。 disjoint()関数は、2つの図形が重なりあっていなければ

    yohshiy
    yohshiy 2016/01/28
    Boost Geometry の機能を図付きで使い方を紹介。ただし、一部