constant-initialization 第二回戦(多分)

constexpr がコンパイル時定数のためだけにあると思っている人に,それ以外の超重要な用途その1を説明するための下準備.
3
Akira Takahashi @cpp_akira

「メモリぺろぺろ」で通じ合える牛とハザード仕様書

2012-09-10 16:43:55
Akso de la Malbono @Cryolite

@kikairoya あー,んー,まー,本当は規格の範疇だけでやれるのが良かったけれどこれでエミュレートは可能か…….

2012-09-10 16:44:31
若年寄(もう若くない) @kikairoya

@Cryolite 規格の範疇なら、main() の先頭で生成するオブジェクトのコンストラクタで同じことをやるとか

2012-09-10 16:45:27
Akso de la Malbono @Cryolite

@kikairoya あ,っていうか本来見せたいことは「constant-init. じゃないと static-init. 以上 dynamic-init. 未満なものが見えて, constant-init. だと初期化が完全に完了した状態しか見えない」なので……えーと?

2012-09-10 16:48:49
若年寄(もう若くない) @kikairoya

@Cryolite あ、グローバルなオブジェクトに対してはこれじゃだめだ、意味が無い。 適当に用意したグローバルなオブジェクトのコンストラクタの中でスレッド作って読みに行くとかそういう

2012-09-10 16:50:43
Akso de la Malbono @Cryolite

@kikairoya んー,理想としては「struct S{ S()... }; を定義して, S のデフォルトコンストラクタに constexpr 付けるか付けないかで S の非 const グローバルオブジェクトの初期化の様相が変わる」を見せたいので,スレッド起動するとなー.

2012-09-10 16:54:47
Akso de la Malbono @Cryolite

@kikairoya まー,面倒くさい問題だし自分でもちっと考えるるるー.

2012-09-10 16:55:27
若年寄(もう若くない) @kikairoya

@Cryolite うん、S::S が走る前にアクセスできればよいということ?

2012-09-10 16:55:59
Akso de la Malbono @Cryolite

@kikairoya 「constexpr 付けないと S::S が走る前が見えて, constexpr 付けると S::S が走った後しか見えない.」だけど, dynamic-init の間ではこれ普通なので「『見える・見えない』が main 関数の中から」で.

2012-09-10 16:59:18
若年寄(もう若くない) @kikairoya

@Cryolite 全てのグローバルオブジェクトは main の実行前に初期化されることが要求されているのでは

2012-09-10 17:00:19
若年寄(もう若くない) @kikairoya

@Cryolite え、こういうことできる実装って現存するん?

2012-09-10 17:04:28
若年寄(もう若くない) @kikairoya

@Cryolite まず before the first odr-use of (ry な初期化を実装している処理系を持ってこないとしょーがない

2012-09-10 17:06:12
Akso de la Malbono @Cryolite

@kikairoya おそらく規格的には DSO の lazy loading を想定してるんじゃないかと思うけれど,自分が探した感じだと http://t.co/Gpp6FVmk とか? ただし,環境が用意できないのでわからん.

2012-09-10 17:06:28
Akso de la Malbono @Cryolite

@kikairoya なのでわりとずーっとこの環境探してる.

2012-09-10 17:07:15
Akso de la Malbono @Cryolite

@kikairoya MSVC の delay load は,挙動としてはこの範疇に入らないのですかね?

2012-09-10 17:09:11
Akso de la Malbono @Cryolite

@kikairoya いずれにせよ規格上はこの挙動が許されているので,constant-init.が超重要で,constant-init.が無いとmain関数に入った後からでも普通に恐ろしい事態が発生する可能性がががが,という論旨でconstepxrの重要性を説きたい.

2012-09-10 17:13:52
Akso de la Malbono @Cryolite

@kikairoya MSVC の delay load か sun の lazy loading がこの挙動なら,実環境としては無視するわけにはいかんのではないかと~.

2012-09-10 17:16:34
Akso de la Malbono @Cryolite

@kikairoya まー, sun のなら…… MSVC は試してもそもそも constexpr が実装されていないので悲しい.

2012-09-10 17:18:34
若年寄(もう若くない) @kikairoya

@Cryolite え、とりあえず delay load でそうなるのかどうかだけ

2012-09-10 17:19:18
若年寄(もう若くない) @kikairoya

@Cryolite あと dlopen(2) で開いた場合どうなるの、とか

2012-09-10 17:20:17