読んだもの1 P0145R1: Refining Expression Evaluation Order for Idiomatic C++

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

第 5 章 2 次元モデル Chapter 5 2-dimensional model. Contents 1.2 次元モデル 2-dimensional model 2. 弱形式 Weak form 3.FEM 近似 FEM approximation 4. まとめ Summary.
Essay writing rules for Japanese!!. * First ・ There are two directions you can write. ・よこがき / 横書き (same as we write English) ・たてがき / 縦書き (from right to.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング言語としてのR 情報知能学科 白井 英俊.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
読んだもの P0254R0: Integrating std::string_view and std::string およびその関連スレッド 稲葉 一浩.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
Step-by-Step Guide on How to Start ALICE Analysis
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
プログラミング基礎I(再) 山元進.
情報処理Ⅱ 2007年12月17日(月).
プログラミング言語論 第6回 型 情報工学科 篠埜 功.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとデータ構造 2011年6月13日
構造体.
条件式 (Conditional Expressions)
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
Microsoft Consumer Channels and Central Marketing Group
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
プログラムの制御構造 選択・繰り返し.
Cプログラミング演習 中間まとめ2.
PROGRAMMING IN HASKELL
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
プログラミング 4 記憶の割り付け.
アルゴリズムとプログラミング (Algorithms and Programming)
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
ソフトウェア制作論 平成30年10月3日.
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
Java8について 2014/03/07.
型の compatibility とポインタ演算
コンパイラ 2011年10月20日
構造体と共用体.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造1 2009年6月15日
ネットワーク・プログラミング Cプログラミングの基礎.
情報処理Ⅱ 2005年10月28日(金).
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
コンパイラ 2012年10月11日
アルゴリズムとデータ構造 2010年6月17日
フレンド関数とフレンド演算子.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
演算子のオーバーロード.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
C言語講座第5回 2017 構造体.
情報処理Ⅱ 第8回:2003年12月9日(火).
プログラミング演習I 補講用課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

読んだもの1 P0145R1: Refining Expression Evaluation Order for Idiomatic C++ 稲葉

WHAT IT IS std::cout << f() << g() << h(); C++14 : f(), g(), h() の評価順序は未規定 提案 : f(), g(), h() の順で評価 std::map<key_t, size_t> m; m[key] = m.size(); C++14 : m[key] が 0 になるか 1 になるかは未規定 提案 : 0 になる void foo(unique_ptr<T> x, unique_ptr<T> y); foo(new T, new T); C++14 : メモリリークするかも 提案 : しない などなど、ある程度評価順序を規格で決める

WHAT IT IS *NOT* x = x++; f( a(), b(), c() ); これは変わらず未定義 ただし、(改造版Visual C++で実験してみた結果)“we feel confident recommending the left-to-right evaluation rules” と書いてあるので今後変わるかも

MOTIVATION foo().bar().buz() のようなメソッドチェーン << をストリームへの出力演算子として使う (cf. std::future<>::then) << をストリームへの出力演算子として使う スマートポインタ などなど、Cに遡る “評価順序は不定” が最初に定義 された頃から比べると、様々なイディオムが発達して きており、それらのイディオムを自然に活用できるよう に言語サポートがあるべきだ」

この提案に関するMLのスレッド 「E << F」 と 「E <<= F」 で順序違うのは… 「E = F」 が右から左で Java や C# と違うのは… 「演算子の結合方向を考えても代入演算だけが右から 左なのは自然」 「C# チームに何故左から右と定義したのか聞いてみた ら(C++のように)左辺で頑張りまくることは、そもそもC# では少ないので…という反応だった」 Bjarne 「今新しく言語を設計するなら代入は左手の値 が右手に入るようにするんだけどなあ (脱線)」

この提案に関するMLのスレッド 「*ptr_expr = big_struct_expr;」 で先に左辺でア ドレスを計算してそこに右辺の結果を直に書き込むと いう最適化ができなくなる 「逆に右to左だからこそできる最適化も色々あると GCCの人は言っていた。it depends だ」

読んだもの2 P0144R1: Structured bindings See Also: P0217R0: Proposed wording for structured bindings

WHAT IT IS

PROPOSED IMPL 右辺が配列型なら展開 右辺の型に対して .get<#>() メンバ関数か get<#>() ADL関数が適用できるなら、それを使っ て展開 構造体/クラスなら public メンバの先頭から順に 展開

DESIGN CHOICES auto のみ (明示的な型宣言やconcept宣言は扱わない) auto& や const auto は サポート “Should there be a way to explicitly ignore variables?” not yet. std::tie における std::ignore 的な物を用意できたらい いが、変数宣言部なので簡単ではない “Should there be support for recursive destructuring?” not yet. 「複雑なことは pattern matching (C++ 2X?) を入れるときにそ のsyntaxに合わせるように考えたい」

この提案に関するMLのスレッド (合計で300レス以上燃えている) 右辺のtupleよりも変数リストが短い場合はエラーにすべ きでは?  そうする方向に検討が進んでいる模様 提案中のstd::variant にも get<#>があるので“分解”で きてしまう問題  問題が認識され始めたところ、議論中 auto じゃない型を明示させろ派が大変活発 Bjarne が蹴り続けている auto {x, y} = std::ensure<int, string>(f()); のようなヘルパー が書けるからいいだろと言っている人もいる。