タグ

C++に関するt-murachiのブックマーク (188)

  • 「バグを意図的にバグのまま残す」という選択肢がある

    はじめに gcc v12.1において、C++の正規表現ライブラリstd::regexに、正規表現のバリデーションを改善するパッチ(以下"改善パッチ"と表記)が取り込まれました。改善パッチによって、これまではバリデーションにひっかからなかった不正な正規表現文字列が"正しく"不正なものと認識されて例外が発生するようになりました。 これだけ聞けばいいことだけのように思えるかもしれませんが、実はそうでもなかったりします。経験豊富なかたであれば見た瞬間ゾッとしたかもしれません。記事では、この一見問題なさそうな改善パッチによって発生しうる問題、および、その具体的例について紹介するとともに、この手のパッチを当てるかどうかは難しい判断になるという知見を共有します。 結論 改善パッチによって発生する問題 発生条件 gcc v12.1以降、あるいは改善パッチをバックポートされた任意のバージョンを使ってC++

    「バグを意図的にバグのまま残す」という選択肢がある
    t-murachi
    t-murachi 2022/07/31
    std::regexは興味あってよく触ってた時期もあったけど、あれは設計自体があまりよろしくないと思う。パターンを決め打ちで埋め込んでしまうにはコストもリスクも重すぎるし、外部入力に依存するにはカジュアルさ文字数
  • C++言語によるお嬢様コーディングがブームの兆し!?/「こちらのmain様は何もお受け取りにならず代わりにintをお返しになる関数でして……」【やじうまの杜】

    C++言語によるお嬢様コーディングがブームの兆し!?/「こちらのmain様は何もお受け取りにならず代わりにintをお返しになる関数でして……」【やじうまの杜】
    t-murachi
    t-murachi 2022/06/23
    こねーよ(´・ω・`)=3
  • ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 【CEDEC ページ】https://cedec.cesa.or.jp/2020/session/detail/s5e8327a52702c.html 【解説付きの書籍版 📚】https://zenn.dev/tetsurom/…

    ゲーム開発者のための C++11~C++20, 将来の C++ の展望 - CEDEC2020 - Speaker Deck
    t-murachi
    t-murachi 2020/09/03
    めっちゃ充実してる… HTML版欲しいです(´・_・`)
  • 江添亮のC++入門

    書はプログラミングの経験はあるがC++は知らない読者を対象にしたC++を学ぶためのである。書はすでに学んだことのみを使って次の知識を説明する手法で書かれた。C++コンパイラーをC++で書く場合、C++コンパイラーのソースコードをコンパイルする最初のC++コンパイラーをどうするかというブートストラップ問題がある。書はいわばC++における知識のブートストラップを目指しただ。これにより読者はを先頭から読んでいけば、まだ学んでいない概念が突如として無説明のまま使われて混乱することなく読み進むことができるだろう。 C++知識のブートストラップを意識した入門書の執筆はなかなかに難しかった。ある機能Xを教えたいが、そのためには機能Yを知っていなければならず、機能Yを理解するためには機能Zの理解が必要といった具合に、C++の機能の依存関係の解決をしなければならなかったからだ。著者自身も苦し

  • C++17/20 Features and Fixes in Visual Studio 2019 - C++ Team Blog

    Visual Studio 2019 version 16.0 is now available and is binary compatible with VS 2015/2017. In this first release of VS 2019, we’ve implemented more compiler and library features from the C++20 Working Paper, implemented more <charconv> overloads (C++17’s “final boss”), and fixed many correctness, performance, and throughput issues. Here’s a list of the C++17/20 compiler/library feature work and

    C++17/20 Features and Fixes in Visual Studio 2019 - C++ Team Blog
    t-murachi
    t-murachi 2019/04/20
    なんか色々と手が入ってた! 後でじっくり読みまふ。
  • フリーソフトウェア徹底活用講座

    ◆移り気な情報工学 第62回  地震をきっかけにリアルタイム・システム再考 第61回  海を渡って卵を産む北京の「海亀族」 第60回  超遠距離通信とソフトウェア無線 第59回  IT先進国フィンランドの計画性 第58回  物理的に正しいITの環境対応 第57回  年金,e-チケットに見るディジタル時代の情報原 第56回  「着るコンピュータ」から「進化した布地」へ 第55回  技術を楽しむネットの文化 第54回  情報爆発2.0 第53回  プログラミングの現場感覚 第52回  GPS+LBS(Location Based Service)がおもしろい 第51回  技術の格差社会 第50回  フィンランドに見る,高齢化社会を支える技術 第49回  たかが技術倫理,されど技術倫理 第48回  若者の理科離れ,2007年問題から「浮遊」せよ 第47回  機械のためのWWW――Google

    t-murachi
    t-murachi 2019/03/26
    古い情報だけど、コンパイラオプションによる生成コードの変化から考察が練られているのはとても参考になる。
  • volatileとatomicの違い - 簡潔なQ

    volatileとatomicの違いを調べるために、以下のC++プログラムをコンパイルしてみる。 #include <atomic> void func1(int *p) { ++*p; ++*p; } void func2(volatile int *p) { ++*p; ++*p; } void func3(std::atomic_int *p) { ++*p; ++*p; } $ g++ -std=c++11 -pthread -O2 -Wall -Wextra -g -c func.cpp -o func.o環境による可能性はあるが、出力された機械語は端的に言うと次のようなものになる。(なおアーキテクチャはLinux x86-64) func1: addl $2, (%rdi) ret func2: movl (%rdi), %eax addl $1, %eax movl %eax

    volatileとatomicの違い - 簡潔なQ
    t-murachi
    t-murachi 2019/03/23
    機械語すんげーわかりやすい(^q^)
  • volatileが必要な場面を見つけ出す

    1#include<signal.h> 2 3sig_atomic_t interrupted; 4 5void sigint_handler(int signum){ 6 interrupted = 1; 7} 8 9int main(){ 10 signal(SIGINT, sigint_handler); 11 while(!interrupted){ 12 [何かの処理] 13 } 14 return 0; 15} このコードは sig_atmoic_t interrupted にvolatileが付いていないので最適化するとバグります。 main()からの読み取りは、コンパイラの最適化によって削除されてしまう可能性がある。 真っ先に思ったこと:「知らねぇぇぇ・・・ & なんで??」 最適化によって削除されたり、変更されたりする変数を把握することができません。 **つまり、vola

    volatileが必要な場面を見つけ出す
    t-murachi
    t-murachi 2019/03/23
    volatile に関する議論。 yohhoy さん無双。最適化周りは頭では分かってても結構混乱するよね…(´・_・`)
  • C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? C++ Advent Calendar 2018 この記事はC++ Advent Calendar 2018 15日目の記事です。 14日目: VTKライブラリ 16日目: C++のエラー処理との付き合い方 当初見積もりよりも大幅に長い記事となり、投稿したのは12/22で1週間遅刻です。すみません。 お知らせ cpprefjpにchar8_t型追加について解説を書きました。ぎゅぎゅっとコンパクトに、また査読を受けて中立的な表現で書いていますので、よければどうぞ。 UTF-8エンコーディングされた文字の型としてchar8_tを追加 - c

    C++標準化委員会、ついに文字とは何かを理解する: char8_t - Qiita
    t-murachi
    t-murachi 2018/12/23
    低レベル言語であろうとする意識と、現実のOSが提供するAPI (特にファイル周り) との兼ね合いとのせめぎあいって側面も…(´・ω・`)
  • ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita

    NTT データ数理システムでリサーチャーをしている大槻 (通称、けんちょん) です。 今回はソートについて記します。 0. はじめに データ構造とアルゴリズムを学ぶと一番最初に「線形探索」や「ソート」が出て来ます。これらのテーマは応用情報技術者試験などでも頻出のテーマであり、アルゴリズムの Hello World とも呼ぶべきものです。 特にソートは、 計算量の改善 ($O(n^2)$ から $O(n\log{n})$ へ) 分割統治法 ヒープ、バケットなどのデータ構造 乱択アルゴリズムの思想 といった様々なアルゴリズム技法を学ぶことができるため、大学の授業でも、アルゴリズム関連の入門書籍でも、何種類ものソートアルゴリズムが詳細に解説される傾向にあります。記事でも、様々なソートアルゴリズムを一通り解説してみました。 しかしながら様々な種類のソートを勉強するのもよいが、「ソートの使い方」や

    ソートアルゴリズムを極める! 〜 なぜソートを学ぶのか 〜 - Qiita
    t-murachi
    t-murachi 2018/04/06
    うまく編纂すればこれだけで本になりそう。素晴らしい。
  • C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita

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

    C++11TMPによるコンパイル時コンパイラltmpcを支えるテンプレートメタプログラミングテクニック - Qiita
    t-murachi
    t-murachi 2017/12/29
    特殊なネタではあるけど、再帰深度と領域確保のバランスの問題とか、アルゴリズム選定全般に一般化できる話でもあるように思う。
  • Boost 1.65.1リリース - Faith and Brave - C++で遊ぼう

    Version 1.65.1 - Boost C++ Libraries Boost 1.65.1リリースノート - boostjp Boost 1.65.0に重大なバグが何件かあったため、パッチバージョンアップしたBoost 1.65.1がリリースされました。1.65.0はスキップして1.65.1を使用してください。 1.65.1のリリースノートには、1.65.0の修正内容も含まれます。

    Boost 1.65.1リリース - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2017/09/12
    おっと…
  • 標準C++の欠陥解決は、過去のバージョンに遡って適用される - Faith and Brave - C++で遊ぼう

    C++17で入る予定の、可変引数でミューテックスを受け取ってスコープを抜けたらロック解除するscoped_lockクラスですが、C++17がDIS (Draft International Standard) の段階になり、仕様の手直しがもうほぼできない段階になってから、引数順の変更が行われました。 P0739R0 Some improvements to class template argument deduction integration into the standard library この変更は、ドラフト仕様 (Working Draft) としては、さらに次のバージョンのC++20に適用されました (Editor’s Reportを参照) 。しかし、libstdc++、libc++といった標準ライブラリの実装や、cppreferenceサイトなどでは、この変更がC++17に

    標準C++の欠陥解決は、過去のバージョンに遡って適用される - Faith and Brave - C++で遊ぼう
    t-murachi
    t-murachi 2017/09/02
    まぁバージョンによって引数の順序が異なるとかやりたくないですしね(´・_・`)。
  • C++標準化委員会の文書: P0250R0-P0259R0

    P0250R1: Wording improvements for initialization and thread ids (CWG 2046) 実行単位と実行順序についての文面や言葉の使い分けを微妙に変える提案。 標準化委員会の中では、C++は将来的に、プログラムが明示的にスレッドを使っていなかったとしても、実装が自動的に初期化を並列実行することを許可したいコンセンサスがあるが、現行の文面も既存のコードもそのまま対応できるようにはなっていない。とりあえず文面を整理する。 [PDF] P0251R0: Unified Call Syntax Wording 統一関数呼び出し記法の提案。 f( x, y )という式を書いた時に、f( x, y )を満たすfが存在しない場合、x.f( y )を呼び出す機能のことだ。 template < typename T > void f( T x,

    t-murachi
    t-murachi 2016/07/01
    byteも元々は1文字って意味で、必ずしも8bitsではなかったような… コンピュータ依存の byte 単位って扱いにするのか、あくまで 8bits 固定にするのか (後者なら octet?) そも byte != 8bits なコンピュータを考慮する必要あるのか…?
  • Boost 1.61.0リリースノート - boostjp

    家リリースノート: https://github.com/boostorg/website/blob/master/feed/history/boost_1_61_0.qbk http://www.boost.org/users/history/version_1_61_0.html リポジトリは以下: https://github.com/boostorg/ リポジトリからのビルド方法は、egtraさんのブログを参照: 「Modularized Boost(GitHubへ移行したリポジトリ)を使用する」 新ライブラリ Compute 並列及びGPU計算のためのライブラリ DLL DLLとDSOを容易に扱うためのライブラリ プラットフォームを横断した次の様な操作を提供する ライブラリをロードする 任意の関数や変数をインポートする マングリングされた関数やシンボルへのエイリアスを作成する

    t-murachi
    t-murachi 2016/05/16
    なんか今回すごいな…
  • Boost.Fusion, Boost.Phoenixのメンテナになりました - にゃははー

    今朝見慣れないメールがいくつか飛んできていて、その中でJoel de Guzman(FusionとかPhoenixとかSpiritとかのAuthor)が、「君をメインメンテナとしてコミット権追加しといたから、ヨロシク」ってなてました。 Boostの開発はgithubに移行してからpull-requestすれば誰でも参加できるものだったので、特にコミット権は不要で(ただしコミット権持った人が反応しないとめっちゃ滞る)、まぁいいかなってFusionとか100個ぐらいpull-requestガシガシ投げてたんですが、最近Phoenixもいじるようになって流石に面倒になってきたんでしょうか... 当のJoelはSpirit.X3の開発に専念したいみたいですし。 コミット権あっても何でもやっていいわけではないので、明らかなtypoとかテスト追加とかは直接やるとして、結局はpull-request出し

    Boost.Fusion, Boost.Phoenixのメンテナになりました - にゃははー
    t-murachi
    t-murachi 2016/05/09
    なにそれこわい
  • Ubuntu 16.04にアップグレードした

    Ubuntu 16.04にアップグレードした。今回はかなり問題だらけだった。 まず、アップグレードが正常に終わらなかった。古いパッケージを削除する途中で、hicolor-icon-themeのインストールスクリプトが正常に終了しなかったとのメッセージが表示された。同じ問題が報告されているようだ。 Bug #1571139 “package hicolor-icon-theme 0.15-0ubuntu1 failed to...” : Bugs : hicolor-icon-theme package : Ubuntu 他にも、Localesのインストールスクリプトが正常に終了しなかったというメッセージも表示された。 そして、"E: mkinitramfs failure cpio 141 gzip 1"と表示されたまま画面が完全に固まってしまった。入力を一切受け付けず、端末に切り替えるこ

    t-murachi
    t-murachi 2016/04/25
    いろいろと酷いな…
  • C++30周年を記念してCFrontのバグ調査をしてみた

    Finding Bugs In The First C++ Compiler - What does Bjarne Think! CFrontの30週年を記念して、C++の設計者にして最初の実装者であるBjarne Stroustrupの実装したC++実装、CFrontに静的解析ツールをかけてバグを洗い出してみた記事が上がっている。 C++の最初のコンパイラーのバグの調査:Bjarneは何考えてたんだ! C++は先月30周年を記念したので、PVS-Studio開発部署は自前の静的コード解析ツールを使って、最初のC++コンパイラーであるCFrontのバグを探してみようと思い立った。これは奇妙なお祝いの仕方のように思われるだろう、とくに、C++の創始者であるBjarne Stroustrupを問い詰めるわけだから。彼の返答も載っている。 C++の30年の歩み、Bjarne Stroustrup

    t-murachi
    t-murachi 2015/11/30
    パラノイアテストっていうのか。すごいな。
  • Visual StudioにClangフロントエンドがやってくる

    22日に書いたのだがあげ忘れていた。 Microsoft promises Clang for Windows in November Visual C++ update • The Register 先月のCppConでMicrosoftが発表した内容によれば、Visual StudioにClangがやってくるそうだ。 Microsoftは独自のプロプライエタリなC++コンパイラーを開発しているが、将来、Visual StudioでClangが扱えるようになるそうだ。 現在、AndroidやiOS開発用には、Visual StudioでもGCCやClangが使えるが、Windows用にもClangが提供されるらしい。 MSのC++コンパイラーには、フロントエンド部分(パースして内部表現に変換)とバックエンド部分(内部表現からコード生成)があるが、Clangが使われるのはこの内のフロントエ

    t-murachi
    t-murachi 2015/11/02
    なんにしても選択肢が増えるのはええことやな。
  • C++標準化委員会の文書のレビュー: P0021R0-P0029R0

    P0021R0: Working Draft, C++ Extensions for Ranges Range TSのドラフト。コンセプトを使ったRangeライブラリの提案。 イテレーターのペアを扱うよりも、Rangeという単位で簡単に扱うことができる。 ユーザーにわかりやすい恩恵としては、algorithmにイテレーターのペアではなくコンテナーを渡せるようになる。単に使う際にはコンセプトを意識する必要はない。 P0022R0: Proxy Iterators for the Ranges Extensions vector<bool>のようなプロクシーイテレーターをRangeに対応させるためにRange提案を修正する提案。既存のiter_swapに加えて、iter_moveを追加して、プロクシーイテレーターのためのカスタマイゼーションポイントとする。 コンセプトにマップがあればもっと楽に

    t-murachi
    t-murachi 2015/10/31
    米欄がよく分からん議論で吹き上がっとるw newtype は typename というこれ以上ないくらいうってつけの名前が既に予約語として存在してるんだからそれを流用すればいいんじゃないかな。