Unwind-safe scope(failure)

D 言語の scope(failure) を極大級 C++ 闇魔法を総投入してでもエミュレートしたいが stack unwind のときにどうしよう問題.
8
でちまるさん(実際かわいい) @decimalbloat

セミコロン取り除きたいけどさすがに無理やで

2012-03-18 01:49:16
tyru @_tyru_

@decimalbloat これもしかしてD言語の…

2012-03-18 01:49:29
tyru @_tyru_

#bm D言語のscope(exit)文などをC++でエミュレート RT decimalbloat: http://t.co/VBENCaEL

2012-03-18 01:54:06
tyru @_tyru_

@decimalbloat ですねlambdaとか関数宣言のdeleteとか…

2012-03-18 01:57:33
でちまるさん(実際かわいい) @decimalbloat

@tyru まぁ関数のdefault/delete宣言はなくてもいいのですがラムダ式パワーはあまりにも絶大ですね…

2012-03-18 01:59:44
あいおーれーと @iorate

@decimalbloat uncaught_exception 使うとスタック巻き戻しで呼ばれる関数の中でも failure に転んでしまいませんか? http://t.co/SX1wGvLL

2012-03-18 02:00:12
tyru @_tyru_

@decimalbloat ですね…使える範囲広すぎますね…

2012-03-18 02:01:41
tyru @_tyru_

@decimalbloat そういえばこれCAT()とCAT_I()って何で同じの2つ定義してるんでしょうか…?

2012-03-18 02:03:44
でちまるさん(実際かわいい) @decimalbloat

@iorate うーん確かにその位置では呼ばれてほしくないですね…しかしその位置に関して言えばscope(failure)置くなというか,例外投げんなという話ではありますが…

2012-03-18 02:07:40
でちまるさん(実際かわいい) @decimalbloat

@tyru マクロの引数が展開されるタイミングを制御するためです

2012-03-18 02:08:58
tyru @_tyru_

@decimalbloat やっぱりなんか意味あるのですか…どうもです(引き下がる)

2012-03-18 02:13:32
でちまるさん(実際かわいい) @decimalbloat

しかしデストラクタで呼んでる関数の中にscope(failure)あっても呼ばれてしまう.これはアレかなー.

2012-03-18 02:14:32
tyru @_tyru_

D言語のscope(exit)文などをC++でエミュレート RT decimalbloat: http://t.co/VBENCaEL [!ifttt, !twitter] http://t.co/WI3LR9iL | T0Cv8 http://t.co/2Bcx0Hjt

2012-03-18 02:19:41
Akso de la Malbono @Cryolite

@decimalbloat これ, rollback が2回(1回目は scope guard の初期化直後に)呼ばれる可能性があるのでは?

2012-03-18 02:20:20
でちまるさん(実際かわいい) @decimalbloat

@Cryolite アッ,一時オブジェクトさんの存在忘れてた!

2012-03-18 02:25:45
Akso de la Malbono @Cryolite

@decimalbloat すいません. std::uncaught_exception 使うとやはり危ないと思うので, scope(exit) のみを提供して,スコープを出るときにそのスコープで宣言されたすべての scope guard を無効化する方式で行きましょう.

2012-03-18 03:26:40
Akso de la Malbono @Cryolite

@decimalbloat ちょっと私が持ちうる全暗黒魔力を総投入して「そのスコープで宣言されたすべての scope guard を無効化」を簡素化してみます.

2012-03-18 03:28:34
でちまるさん(実際かわいい) @decimalbloat

ところでC(ryさんが謎の極大魔法を使おうとしてる痕跡が見られますが…

2012-03-18 22:46:58
Akso de la Malbono @Cryolite

マクロの展開結果が block-declaration で良ければ,「block の nesting level が上がった時の最初の1回目の評価だけ異なるコンパイル時定数を生成」「評価するたびに結果のコンパイル時定数が1ずつ増える」あたりはかなり簡単にできることは分かった.

2012-03-19 00:20:20
でちまるさん(実際かわいい) @decimalbloat

そんなことより今手元にある,C(ryさんが書いたコードをプリプロセスしたものを読まなければならない

2012-03-19 01:52:24
1 ・・ 5 次へ