Upgrade to Pro — share decks privately, control downloads, hide ads and more …

tfcon-2022-cpp

 tfcon-2022-cpp

TechFeed Conference 2022「最近の C++ (2022 年)」
発表者: https://twitter.com/Reputeless

Ryo Suzuki

May 14, 2022
Tweet

More Decks by Ryo Suzuki

Other Decks in Technology

Transcript

  1. 鈴木 遼 (Siv3D)
    最近の C++ (2022 年)
    5 分でわかる C++ のトレンド
    1

    View Slide

  2. 発表者プロフィール
    鈴木 遼
    • C++ ゲーム・アプリ開発フレームワーク Siv3D の作者
    • C++ プログラミング教室を運営 / 早稲田・上智・駒澤大学で講義
    • C++ に関する商業出版 / 技術書典出展 / 技術発表

    View Slide

  3. 身近なところに C++
    • OS (Windows, Android, macOS, iOS)
    • Web ブラウザ (Google Chrome, Firefox, Safari)
    • コンピュータグラフィックス (Photoshop, CAD ソフト)
    • オフィススイート (Microsoft Office, LibreOffice)
    • ゲームエンジン (Unreal Engine, Unity, Godot)
    • コンシューマゲーム / モバイルゲーム
    • Web サービスのバックエンド (Google, YouTube, Facebook, Amazon)
    • 組み込み / ロボット / 自動運転車
    • 金融 (C++ 作者 Bjarne Stroustrup は、現在モルガン・スタンレーの Technical Fellow)
    • プログラミング言語コンパイラ / 仮想マシン

    View Slide

  4. 競技プログラミングのブームで C++ 学習者が増加
    • AtCoder などの競技プログラミング(競プロ)に挑戦する人が増えている
    • 競プロは歴史的に C++ がデファクトスタンダード
    • 中高生が目標とする、日本情報オリンピック (JOI) / 国際情報オリンピック
    (IOI) は C++ を使うルールになっている
    • 競プロに関する書籍の多くが C++ を前提に書かれている

    View Slide

  5. 便利なオンライン C++ コンパイラが登場
    • Web ページ上で C++ コードを書いて実行結果を確認できるサービスが発展
    • 複数のコンパイラの種類やバージョン間の比較・検証が容易に
    Compiler Explorer
    • 各種コンパイラ (GCC, Clang, MSVC など) での
    コード実行結果、生成されるアセンブリを出力
    • 代表的な (非標準) ライブラリも収録
    Wandbox
    • 国産の C++ オンラインコンパイラ
    • コードの実行結果を表示。API も提供

    View Slide

  6. 静的コード解析ツールが進化
    • 静的コード解析ツールの性能が向上し、C++ の様々な間違い / 非効率を、
    実行前に検出できるようになってきた
    GCC や Clang の静的解析機能
    Visual Studio
    • エディタ上に情報を表示
    PVS-Studio
    • ヒューリスティック解析による typo の検出にも強い

    View Slide

  7. C++ Core Guidelines が整備
    • C++ プログラマが統一的で優れたモダン C++ を書くためのガイドライン
    • 2015 年に初公開
    • 現在もアクティブにメンテナンスされ 約 500 項目に
    • 各ガイドラインはルール、理由、サンプルコード、代替案や例外などで構成
    • 『Effective C++』や『C++ Coding Standards』の現代版
    • ガイドラインの大半は、静的解析ツールでの検証ができるようデザイン
    • (例 1) C.47: メンバー変数は宣言順のとおりに定義、初期化する
    • (例 2) ES.86: ループ変数を for 文の本体で変更することを避ける

    View Slide

  8. C++ の規格更新と主要コンパイラの対応状況
    • 主要コンパイラ (GCC, Clang, MSVC) は、ほぼ対応完了。
    業務での活用事例も増えている
    • MSVC が一番乗りで対応完了、GCC, Clang も大部分の機能に対応
    • 一部の機能が、最新のコンパイラにおいて先取りで使える
    2016 2017 2018 2019 2020 2021 2022 2023 2024
    C++17 発行
    主要コンパイラが C++17 対応を実装
    C++20 発行
    主要コンパイラが C++20 対応を実装
    C++23 発行
    主要コンパイラが C++23 対応を実装
    C++17
    C++20
    C++23

    View Slide

  9. C++17 の注目機能
    • ファイルやディレクトリの操作に関する ライブラリ
    • 無効値を表現できる 型
    • Java の や Haskell の に相当
    • 型安全に共用体 ( ) を表現できる 型
    • Tuple-like な値を分解して、複数の変数にバインドできる構造化束縛
    • 戻り値の無視時に、コンパイラに警告を出させる 属性
    • 所有権を持たない文字列クラス
    を返す関数

    View Slide

  10. C++20 の注目機能
    • ヘッダを置き換える Modules
    • テンプレートの型制約を柔軟かつ簡潔に記述できる Concepts
    • Python 風のテキストフォーマット
    • 三方比較演算子 <=> と、それによる比較演算定義の簡略化(自動化)
    • コルーチン用の文法
    • コンパイル時計算できる操作の拡大(ソートや動的配列も に)
    • ビット演算に関する標準ライブラリ関数の追加

    View Slide

  11. C++23 の注目機能 (予定)
    • のように添字演算子に複数の引数を渡せるように
    • スタックトレースに関する情報を取得する ライブラリ
    • 標準ライブラリが Modules に対応
    • の代わりに ですべての標準ライブラリを使用可能
    • の進化版

    View Slide

  12. C++ 最新情報はどこで手に入る?
    日本語
    • cpprefjp
    • cppmap
    • C++ Twitter コミュニティ
    英語
    • Standard C++ Foundation
    • cppreference.com
    • reddit [r/cpp]
    • hacking C++

    View Slide