タグ

C++に関するendo_5501のブックマーク (74)

  • モダンなC++におけるコンパイル時間削減のテクニック - Qiita

    はじめに C++は他の高級言語と比べると、run-time性能で優れています。C++11、C++14ではテンプレートを使ったテクニックが多く登場し、静的型言語特有のデメリットを大きく解消することとなりました。 しかし... ... ... ... ............. 遅い!!! コンパイルが終わらない!!! 複雑なテンプレートテクニックを使用したライブラリとかだと、どうしてもコンパイル時間が肥大化してしまう。 というわけで今回は、C++11以降の「モダンなC++」においてコンパイル時間を削減させるテクニックをいくつか紹介します。 対象となる読者 C++のテンプレートや共有ライブラリを使用した経験があり、C++の優れたテンプレートの機能を活用したいが、コンパイルに時間がかかって困っている人。あるいは、C++で書かれたライブラリの開発に携わっている人。 コンパイル時間削減のためのテクニ

    モダンなC++におけるコンパイル時間削減のテクニック - Qiita
  • 2018-11のC++ドラフトの主要な変更

    N4792 C++20のドラフトが更新された。今回も強めの変更が入っている。 まずconstexprが大幅に強化された。 p1002r1.pdf Allowing dynamic_cast, polymorphic typeid in Constant Expressions C++20での最終的な目標は、std::vectorやstd::stringをconstexpr対応させることだ。そのために従来ならば実行時処理であった様々な機能がconstexprに対応している。今回の変更では、try/catchブロックやdynamic_cast/typeidがconstexprに対応した。また、unionの有効なメンバーの変更もconstexprに対応した。 try/catchブロックはコンパイル時評価される場合、単に無視される。 dyanmic_cast/typeidは当にconstexpr

    endo_5501
    endo_5501 2019/01/08
    “UTF-8文字型のchar8_tが入った。理想的な変更が行われた” Rangeもええ感じだ
  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - cpprefjp C++語リファレンス 追記 全ての開発者が知っておくべきUnicodeについての最低限の知識 - GIGAZINE Unicodeについて簡潔にまとまってるいい記事を見つけました。 Caution この文章には以下の要素が含まれます。苦手

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
    endo_5501
    endo_5501 2018/12/23
    “無視できない負債が現代もなおプログラマーを、ひいてはソフトウェアを利用する罪のない一般市民を巻き込んでいる。地雷原の撤去は終わっていない”
  • Introducing the C++ Lambda Runtime | AWS Compute Blog

    AWS Compute Blog Introducing the C++ Lambda Runtime This post is courtesy of Marco Magdy, AWS Software Development Engineer – AWS SDKs and Tools Today, AWS Lambda announced the availability of the Runtime API. The Runtime API allows you to write your Lambda functions in any language, provided that you bundle it with your application artifact or as a Lambda layer that your application uses. As an e

    Introducing the C++ Lambda Runtime | AWS Compute Blog
  • 【技術書典5】「C++でできる!OS自作入門」を出します(ダウンロード頒布有) - uchan note

    大人気の技術書オンリーの同人誌即売会「技術書典 5」が、2018/10/08(月・祝)に池袋サンシャインシティで開かれます。 秋葉原 UDX ではないのでご注意を! 今回は「C++でできる!OS自作入門」を出しますので、そのお知らせです。 頒布情報 日時 2018 年 10 月 8 日(月・祝) 場所 池袋サンシャインシティ 2F 展示ホール D(文化会館ビル 2F) ブース お 05「bitnos」 bitnos のサークルページ 書名 C++でできる!OS自作入門 bitnos ブースでは既刊 3 種類も展示します。 ページ数 52(表紙含む) 概要 この同人誌は OS を書いてみたいと思っている方に、記述言語として C++ を選んでもらうためのです。 世にある自作 OS のは C 言語で書いてあるものが多いですが、機能が豊富な C++ も有力な選択肢であることをお伝えするのが目標

    【技術書典5】「C++でできる!OS自作入門」を出します(ダウンロード頒布有) - uchan note
  • Rust より C++ が優れている 12 のポイント - uchan note

    若干釣りタイトルですが,私が「Rust にはない C++ の良さ」を募ったところ,12 個ほどの優れている点が報告されたので,まとめてみます. 背景 私は 2018/10/08 開催予定の技術書典5で,『C++でできる!OS自作入門』と題して,Clang+LLD で C++ を使って OS 開発する際の注意点とか C++ の活用例を解説する同人誌を書こうと思っています. その下調べもかねて,このようなツイートをしました. C++好きな人!ぜひ,RustにはないC++の良さを教えてください!— C++でOS自作 技術書典5 お05 (@uchan_nos) 2018年8月24日 そうしたら知り合いからこんなリプが飛んできました. これ、まとめてblogにして!— shoma (@shoma) 2018年8月24日 一部の人に参考になるかもしれないのでまとめることにしました.ただしネタ多めです

    Rust より C++ が優れている 12 のポイント - uchan note
  • C++に提案されている静的例外

    C++に静的例外が提案されている。 [PDF] P0709R1: Zero-overhead deterministic exceptions: Throwing values 例外はそのパフォーマンスへの影響が懸念され、一部のC++プロジェクトではコンパイラーオプションによって例外自体が無効化されていた。 これは由々しき事態だ。というのも、例外は標準C++の機能の一部であり、標準ライブラリは例外の存在を前提にして設計されている。例外が無効化されているということは、それはもはやC++ではない。C++風の別言語を使っていることになる。 なぜ例外は忌避されるのか。例外のパフォーマンスが非決定的だからだ。例外の実装はスタックからの確保ではなくヒープからの動的なメモリ確保が必要で、例外のキャッチにはRTTIによる型情報の比較が必要だ。 ifとgotoによるエラー処理のパフォーマンス特性は決定的に見

  • C++完全理解ガイド Rev1.4.01 - Qiita

    はじめに C++を完全理解したので完全理解ガイドを書く。 最初に言っておくがタイトルは詐欺で、実際はポエムである。 僕は仕事C++を書いたことはないのでなんか変なことを言っているかも知れない。 ところで無職になったので、普通にC++で職がほしい。 2018年6月から受託で仕事をもらい、毎日C++17を書いています。 2018年9月から雇用され、毎日C++17を書いています。 かなり雑に書いているはずなので、コメント等でどんどんマサカリを投げてほしい。 僕は何者か 工学部を卒業して4年ほど高校の理科教師をやっていたが、現在無職になった人。 工学部を卒業して4年ほど高校の理科教師をやっていた。 最初は良かったのですが、授業に慣れ、このまま自分の成長が止まってしまうのかとなぁと思い、辞めて無職に。 一ヶ月無職を楽しんだあと、某から受託でC++を書く仕事をもらい、C++17を書いている。 主にツ

    C++完全理解ガイド Rev1.4.01 - Qiita
  • 実践C++応用講座 第14回 結構便利な可変長引数テンプレート | Theolizer®

    こんにちは。田原です。 テンプレートの基的な部分は概ね網羅しつつありますので、そろそろ当応用講座も終盤です。 さて、今回は可変長引数のテンプレートを解説します。再帰定義を使う場合も多く使い方は結構難しいですが、結構便利です。テンプレート・プログラミングしていると使いたくなることがたまにあると思いますので、解説してみます。 1.C言語時代からある可変長引数関数(Variadic functions) 標準ライブラリのprintf()関数などで可変長引数が使われています。これがあれば十分では?と思う方も少なくないと思いますので、まずはC言語時代からある可変長引数関数の問題点を説明します。 1-1.引数の型違いの問題 可変長引数関数は、呼び出し側は引数を自由に(好き勝手に)指定できます。問題はそれらの引数の型を呼び出された側に伝達する方法をC言語がサポートしていないことです。なので、呼ばれた側

    実践C++応用講座 第14回 結構便利な可変長引数テンプレート | Theolizer®
  • 最強のC/C++インデクサー "Rtags" を本気で使う - Qiita

    関数定義や参照へキーひとつで飛ぶことのできるタグジャンプ。いまやコードリーディングに無くてはならない機能ですが、これを可能にするのがCtagsやGNU GLOBAL (Gtags) といった「インデクサー」です。 記事では、C/C++用の優れたインデクサーであるRtagsのセットアップの方法、そしてVimとの連携の仕方について書いていきます。 Rtagsの利点 インデクサーは、ソースコードをパースして関数や変数などのシンボル名と位置を記録したタグ(インデックス)データベースを作成するプログラムです。 Ctagsは現在最も広く使われているインデクサーの一つで、Cを始めとしてRubyPythonなど、40あまりの言語に対応しています。ところがC++では文法の複雑さゆえに内部のパーサーが十分に対応できず、正しくシンボル名を認識できなかったりします。Gtagsも同様の問題を抱えています。 そこ

    最強のC/C++インデクサー "Rtags" を本気で使う - Qiita
  • C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita

    C++のテンプレートメタプログラミングによるコンパイル時C言語コンパイラ、「ltmpc」を作っています。まだまだ実装すべきことはたくさんありますが、最低限動くようになってきました。 ltmpcのはなし 実は、以前にC11のフルセットをサポートするC言語のコンパイラがC++TMP上に実装されたことがありました。 コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 しかし、この自動生成法のアプローチでは、メモリ使用量が爆発する問題から、残念ながら現存するコンパイラで現実的なコンピュータ上で動かすことはできません。 テンプレートメタプログラミングで、C言語のコンパイラほど大きな「動く」プログラムが作られたことは今までになかったように思われます。今回は、いかにして「動く」TMPプログラミングを行っていくか、というおはなしをしたいと思います。 既存技術の紹介 constexprメタ

    C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita
  • C++のLoggingライブラリ plog - Qiita

    札幌C++勉強会の もくもく会#10でもくもくと調べていたことをここに記す。家Readme.mdを読んで、そのままメモっただけ。 Plog - portable and simple log for C++ 小さくまとまっているログ出力ライブラリ。 インストール header-onlyなのでgithubからダウンロードしてインクルードパス通すだけです。

    C++のLoggingライブラリ plog - Qiita
  • 今回C++ドラフトに入った機能

    Trip report: Fall ISO C++ standards meeting (Albuquerque) | Sutter’s Mill Herb Sutterが今回の標準化委員会の会議でドラフト入りした機能についていち早く速報を出している。具体的な文書などはリンク先で確認してもらうとして、概要だけ説明する。 range-based forに初期化子が書けるようになった。 for ( auto result = f() ; auto && value : result ) ; <bit>にbit_castingが追加された。 short from = 42 ; auto to = bit_cast<std::uint16_t>(from) ; operator <=>が追加された。 operator <=>は2つのオペランドの大小比較と等号比較を一度にできる演算子だ。この演算子を

  • C++の未定義の挙動で呼ばれないはずの関数が呼ばれる場合

    Krister Walfridsson’s blog: Why undefined behavior may call a never-called function 以下のようなコードをClangでコンパイルすると、 #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } Clangは以下のような最適化されたコードを吐く。 main: movl $.L.str, %edi jmp system .L.str: .asciz "rm -rf /" これは以下のようなコードと同じだ。

    endo_5501
    endo_5501 2017/09/26
    “なぜこのコードでEraseAllが呼び出されてしまうのか。もちろん未定義の挙動のためだ”
  • (翻訳)Apache Arrowと「pandasの10項目の課題」 - Qiita

    始めに:pandasの作者であるWes McKinneyさんがPythonのデータツール関連でとても興味深いblogを書かれているので、翻訳して日のPyDataコミュニティに公開してもいいでしょうか、とお聞きしたところ、快諾をいただきましたので少しずつ訳して公開していこうと思っています。 2017/9/21(木) Apache Arrow、pandas、pandas2、そして最近の私の作業の大まかな方向性と視界が開けてきている未来に関して、これから一連のポストを書いていきます。このポストはその第一弾です。少々量があり、全体に技術的な色合いが濃くなっていますが、興味を持たれたなら読み進めていってください。 このポストでは、pandasの内部構造に関する主要な問題のいくつかと、それらに対して私が着実に進めてきた現実的な解決策の計画と構築について、できる限り簡潔に説明しようと思います。外から見

    (翻訳)Apache Arrowと「pandasの10項目の課題」 - Qiita
  • TechCrunch

    [A version of this piece first appeared in TechCrunch’s robotics newsletter, Actuator. Subscribe here.] Earlier this month, Google’s DeepMind team debuted Open X-Embodiment, a database of robotic

    TechCrunch
  • 「GCC 7.1」リリース、長らく使われていたReloadがLRAに置き換えられる | OSDN Magazine

    GNU Compiler Collection(GCC)開発チームは5月2日、最新版となる「GNU Compiler Collection(GCC) 7.1」を公開した。CやC++を始めとした各種フロントエンド、オプティマイザなどが強化されている。 GNU Compiler Collection(GCC)はGNU Projectが開発するコンパイラ集。GNU Operating Systemのコンパイラとして開発がスタートしたプロジェクトで、初の正式版(1.0)がリリースされてから今年で30年を迎えるという。C/C++/Objective-C、Fortran、Java、Ada、Goなどさまざまな言語に対応する。 GCC 7.1は2016年5月に公開されたGCC 6系に続く新しいメジャーリリースで、既存の機能の修正や強化だけでなく新たな機能も加わっている。 バージョンでは、GCCで長らく使

    「GCC 7.1」リリース、長らく使われていたReloadがLRAに置き換えられる | OSDN Magazine
  • Boost.PropertyMap (.pdf)

    2010/10/23 Boost.勉強会 #3 関西 プレゼン資料 .pdf とりあえず upload 版Read less

    Boost.PropertyMap (.pdf)
    endo_5501
    endo_5501 2017/03/20
    iteratorについて
  • GDBがC++コード注入をサポート

    C++ Support Added To GCC's libcc1, Benefiting GDB - Phoronix C++ support in libcc1: A comprehensive update – RHD Blog 最新のGCC 7では、GDBC++のコード注入をサポートするようになった。 GDBは、デバッグ中のプログラムにC言語のコードをその場でコンパイルしてコード注入して実行する機能を持っている。これにC++が対応した。 この機能はlibcc1.soを通じてGDBとGCCが強調動作することによって実現されている機能だ。 CとC++は似ている言語ではあるが、名前空間など名前検索のルールが異なるので、シンボル名を探すにもGDBC++の名前検索を実装しなければならない。また、テンプレートにも特別な対応が必要だ。

  • C++1z トライグラフを削除 - Faith and Brave - C++で遊ぼう

    C言語から引き継がれた「トライグラフ (trigraph)」という機能は、ASCIIより小さなISO/IEC 646という文字コードでもプログラムが書けるように用意された機能で、いくつかの文字の代替表現を使用できるようにするものです。 トライグラフ表現 置き換え後の文字 ??= # ??/ \ ??' ^ ??( [ ??) ] ??! | ??< { ??> } ??- ~ 以下のトライグラフを使用したコードは、 ??=define arraycheck(a,b) a??(b??) ??!??! b??(a??) 以下のように置き換えられます: #define arraycheck(a,b) a[b] || b[a] 文字コードの問題がなくなった現代では、トライグラフは不要になりました。ユーザーにとってわかりにくいこともあり、多くのコンパイラがトライグラフをデフォルトで無効にしたり警告を

    C++1z トライグラフを削除 - Faith and Brave - C++で遊ぼう