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++20の整数
faithandbrave
0
77
コンテナと文字列の中間インタフェースspanとstring_view
faithandbrave
1
320
C++23 スタックトレースライブラリ
faithandbrave
0
280
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
930
使いたい標準C++機能がない環境でいかに実装・設計するか
faithandbrave
2
970
C++20からC++23までの変化
faithandbrave
9
12k
C++20 status
faithandbrave
0
890
Other Decks in Programming
See All in Programming
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
910
CSC509 Lecture 11
javiergs
PRO
0
180
as(型アサーション)を書く前にできること
marokanatani
10
2.6k
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
OnlineTestConf: Test Automation Friend or Foe
maaretp
0
110
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
1.1k
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
290
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
210
Realtime API 入門
riofujimon
0
150
CSC509 Lecture 09
javiergs
PRO
0
140
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
YesSQL, Process and Tooling at Scale
rocio
169
14k
BBQ
matthewcrist
85
9.3k
Teambox: Starting and Learning
jrom
133
8.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Navigating Team Friction
lara
183
14k
Fireside Chat
paigeccino
34
3k
Building Applications with DynamoDB
mza
90
6.1k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
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++の進化が⾼速化することにともない、教育が追いつかなく なってきている。情報共有はさらに必要とされるだろう