Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オープン化が進むC++の現状と展望
Search
Akira Takahashi
August 25, 2021
Programming
19
11k
オープン化が進むC++の現状と展望
Akira Takahashi
August 25, 2021
Tweet
Share
More Decks by Akira Takahashi
See All by Akira Takahashi
C++26アップデート 2025-03
faithandbrave
0
1.3k
C++26 エラー性動作
faithandbrave
2
1.1k
C++20の整数
faithandbrave
0
190
コンテナと文字列の中間インタフェースspanとstring_view
faithandbrave
1
480
C++23 スタックトレースライブラリ
faithandbrave
0
460
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
1.2k
使いたい標準C++機能がない環境でいかに実装・設計するか
faithandbrave
2
1.1k
C++20からC++23までの変化
faithandbrave
9
12k
C++20 status
faithandbrave
0
950
Other Decks in Programming
See All in Programming
Cache Strategies with Redisson & Exposed
debop
0
120
衛星の軌道をWeb地図上に表示する
sankichi92
0
220
Rethinking Data Access: The New httpResource in Angular
manfredsteyer
PRO
0
190
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
120
型安全なDrag and Dropの設計を考える
yudppp
5
620
What Spring Developers Should Know About Jakarta EE
ivargrimstad
1
370
なぜHono×GraphQLを選んだのか?
junichi_fukushima
0
830
2025年のz-index設計を考える
tak_dcxi
13
5.1k
External SecretsのさくらProvider初期実装を担当しています
logica0419
0
190
コードに語らせよう――自己ドキュメント化が内包する楽しさについて / Let the Code Speak
nrslib
4
450
マテリアルって何者?RealityKitで扱うマテリアル入門
nao_randd
0
130
ワイがおすすめする新潟の食 / 20250530phpconf-niigata-eve
kasacchiful
0
120
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
How to Ace a Technical Interview
jacobian
276
23k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Code Reviewing Like a Champion
maltzj
523
40k
Making Projects Easy
brettharned
116
6.2k
GraphQLとの向き合い方2022年版
quramy
46
14k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
RailsConf 2023
tenderlove
30
1.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Navigating Team Friction
lara
185
15k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Transcript
オープン化が進むC++の 現状と展望 ⾼橋 晶 (Akira Takahashi) cpp_akira@Twitter faithandbrave@GitHub 2021/08/25 (⽔)
OSS X Users Meeting #31
⾃⼰紹介 • ⾼橋 晶 (Akira Takahashi) • C++⽇本語リファレンスサイトcpprefjp のコアメンバ •
C++の勉強会C++ MIXの運営 • 著書 • 『C++テンプレートテクニック』 • 『C++ポケットリファレンス』 • 『プログラミングの魔導書 Vol.1』
お仕事 • Preferred Networks (PFN) という会社で、深層学習 ⽤プロセッサMN-Coreを 作っています • 電⼒性能で何度か
世界⼀位を獲得しました • そのチームで私は、コン パイラ以下の低レイヤー なソフトウェアスタック を開発しています
本⽇のお話 • C++はオープンソースではなくISOで標準化されている⾔語で す • ですが、オープンソースの影響を受けて標準C++の策定作業が 徐々にオープン化してきています • この発表では、以下のようなことを話します •
標準C++のオープン化 • オープンソースライブラリの作られ⽅・使われ⽅の変化 • C++が活躍する場の変化
標準C++のオープン化
現在はC++20 • 1998年にC++98が策定されてから、次の規格は2011年のC++11 と、13年の策定間隔があった • 2003年にC++03もあったが⾮常に⼩さなアップデート • その後は3年間隔での定期アップデートが⾏われている • C++11以降では、策定体制の変化、⾔語進化の⾼速化、
それによる外部ライブラリの事情の変化などがある
C++11策定までのクローズドな標準化 • ⼀昔前までのC++は、標準化のメーリングリストがクローズド で、標準化委員会のメンバーしかアクセスできなかった • 定期的に⾏われる国際標準化委員会も、もちろん委員会の メンバーしか参加できない • ⼀般のC++ユーザーは議論に参加することはできず、 決定したものを追いかけるしかなかった
謎のC++標準化委員会
C++14以降での変化 • C++11には、オープンソースライブラリであるBoostから多く の機能が導⼊された • それを受け、標準化委員会はオープンソースの開発者に、 標準化への参加を依頼し始めた • しかし、オープンソースの開発者たちはクローズドなものに 興味が薄く、参加に消極的だった
• それもあり、C++の標準化を議論するメーリングリストがオー プンになり、だれでも議論に参加できるようになった https://isocpp.org/
標準C++でオープンになったもの • メーリングリスト • 新機能の提案 (std-proposals) • より広いC++の議論 (std-discussion) •
分野ごとの専⾨グループ (study group) • 規格案 • https://github.com/cplusplus/draft • 編集ミス程度なら、ここからPull Requestを送れる • 各提案の進捗状況 • https://github.com/cplusplus/papers • ここのissueで確認できる
標準C++でオープンになっていないもの • 国際標準化委員会への参加 • 標準化に参加している企業、および国の代表に限られている • 新機能の提案には国際標準化委員会でのプレゼンテーションが 必要 • だが、オープンなメーリングリストで提案して、委員会メンバーが
提案を引き継ぐ、という形式で広く提案が⾏われるようになった • 国際標準化委員会での完全な議事録 • 機能の経緯を完全に追いきれないことは、まだある
オープンになっていないものはまだまだあるが… • 標準C++策定のオープン化によって、ハンドリングしきれない ほど多くの新しい提案が⾏われるようになった • 多すぎて⽇本語情報の発信もとてもたいへんです • 元々、⾔語の議論グループとライブラリの議論グループくらい しかなかったのが、20を超える専⾨グループごとに議論が同時 並⾏に⾏われている
• オープン化によって⾔語の進化は⼤幅に加速していると⾔える
C++オープンソースの変化
C++とオープンソース • C++は標準ライブラリによって環境差を吸収しているが、 すべての環境差を吸収できているわけではない • ある:I/O、スレッド、ファイルシステム、スタックトレース • ない:ネットワーク、オーディオ、グラフィクス、プロセス、 GPUなど •
標準ライブラリで扱いきれない範囲はオープンソース に頼ることになる • 定番と⾔えるライブラリもあるが (Boost、ICU、OpenCV など)、⾔語の進化にともなってライブラリの事情も変わっ てきている
Visual Studio標準ライブラリ実装の オープンソース化 • GCCやClangといったコンパイラはもともとオープンソース • それらに加えて、Visual StudioでのC++標準ライブラリの実装 もオープンソース化された •
https://github.com/microsoft/STL
Boostの衰退 • 準標準ライブラリという⽴ち位置だったBoostだが、徐々に衰退している • 現在のバージョンは1.77.0 • Boost 2.0の議論が進まないまま、バージョン1系で77までずるずるいっている • Boost設⽴メンバーの離脱、コンサルティング会社BoostProの解散
• リーダー不在で、重要な決定ができない状態 • Boost内のライブラリを個別に扱える仕組みの頓挫 • Boostは⼤きくなり続け、ユーザーは巨⼤ライブラリのダウンロードを避けるように なった • ただ、分野によってBoostのライブラリがまだまだ最新なことはある • 古いC++バージョンで最新の標準ライブラリの機能を使う、という⽤途でも使える
個⼈オープンソースへの移⾏ 1/3 • ボランティア組織の⼤きなライブラリから、 個⼈の軽量なオープンソースライブラリへ、ユーザーは移⾏し てきている • Boostが衰退していることも影響
個⼈オープンソースへの移⾏ 2/3 • ⽂字列フォーマットライブラリ{fmt}も個⼈のオープンソースだ が、広くユーザーを獲得し、C++20で標準化されている • ちなみに、このライブラリが作れるようになった背景に、 可変引数テンプレート、汎⽤定数式constexprなど⾔語の新機能が⼊っ たおかげ、というのがある •
フォーマット⽂字列のコンパイル時検証もある cout << format("{} {}", "Hello", 314) << endl; // "Hello 314"
個⼈オープンソースへの移⾏ 3/3 • 広く使われているテストライブラリCatch2、 ロギングライブラリspdlogなども個⼈リポジトリ • どのライブラリを使えばいいか悩ましい時期だが、 Awesome C++やStackoverflowを⾒て⾃分の⽤途にあるものを 選ぶことになるだろう
TEST_CASE("test name") { REQUIRE(a == b); } spdlog::info("information log"); spdlog::error("error log");
⾔語更新によるライブラリ設計への影響 • 標準C++が3年スパンで更新されることもあり、最新のライブ ラリ設計というものが変わりやすい • 例として、C++11でラムダ式 (無名関数) が導⼊されたことによ り、その後のライブラリ設計が⼤きく変わった •
C++20でもコルーチンが導⼊されたことにより、今後のライブ ラリ設計に⼤きな影響があるだろう setTimer(10s, [] { cout << "10秒経過" << endl; });
パッケージマネージャは? • Conanというのがあるが、それほど流⾏っていない • CMakeの機能で依存ライブラリをダウンロード・インストール する⼈が、ちらほらいるくらい • パッケージマネージャがあると、ダウンロード数などで⼈気ラ イブラリの可視化がされやすいが、いまは⼈気ライブラリがわ かりにくい
• まだまだ発展途上
オープンソース関係の今後の課題 • 変わりやすい最新のライブラリとその設計の知⾒をいかに共有 していくか • ⺟国語情報をどう増やすか • ボランティアの開発者に継続開発してもらうためのインセン ティブ •
オープンソースでは開発者の失踪もよくある • GitHub Sponsorsがもっと流⾏るといいですね
C++が活躍する場の変化
C++の仕事がなくなった • という話をよく聞くようになった • これは、C++が活躍する場が変化したことによる • GUIやゲームはC#へ • Web需要増によるJavaScriptや、サーバー処理が得意な⾔語へ •
領域特化した⾔語がより使われるのは正当進歩だと思う • C++が真に必要になる領域とはなにか
C++が活躍する場はどうなったか 1/3 • ⾼速化のためのバックエンド • フロントエンドには使いやすい (スクリプト) ⾔語を使い、 バックエンドにC++がいる、という開発が増えている •
C#のバックエンドにC++ • ゲーム開発では、Unity 3DもIL2CPPでC#からC++に変換してコンパイ ルしている • Unreal Engineでのゲーム開発も、基本はBluePrintというスクリプトを 使⽤し、必要なところでC++を使⽤する • PythonのバックエンドにC++ • 機械学習が盛んなPythonでも、⾼速化が必要なライブラリはC++で 実装され、Pythonインタフェースを介して使⽤している
C++が活躍する場はどうなったか 2/3 • ⼤規模計算・シミュレーション • ムーアの法則は実はまだ細々と続いていて、⾼速化するコンピュータ を極限まで使い切りたい要求はまだまだある • 天気予報が1週間先までだったのが、新世代のスパコンによって2週間 先まで予測できるようになったニュースは、わかりやすいインパクト
があった • コンピュータ性能はどれだけあっても⾜りない
C++が活躍する場はどうなったか 3/3 • エッジデバイス上のアプリケーション • ⾞など電⼒要求の厳しい環境 • ⾃動運転、スマートデバイス、ロボットなどエッジデバイスアプリ ケーションの需要は⾼まっている
C++が活躍する場にどう向き合うか • 道具によって仕事を選ぶよりも、仕事によって道具を選んだほ うが、よいのではないか • C++を使う必要がなくなった仕事は、C++を使うよりも簡単に 作れるようになったのだろう • 特定の⾔語の固執せず、いろいろな⾔語を学び、状況に応じて 適切な⾔語を選択することを私は推奨する
• ただし、⾼速化や省メモリを要求される環境で、C++はこれか らも使われ続け、その要求はコンピュータが果てしなく速くな らない限り、なくならない
まとめ • 標準C++はオープン化によって議論が加速した • C++界隈のオープンソースライブラリは移ろいやすい状況に なっており、個⼈ライブラリが使われることが増えた • C++が求められる領域はたしかに減ったが、これからも必要と される領域はある •
C++の進化が⾼速化することにともない、教育が追いつかなく なってきている。情報共有はさらに必要とされるだろう