関数引数に scope つけると何が変わるの?
コンパイル時のものか実行時のものかもわからない
教えてえろいひと
void foo(scope Object obj) {
global = obj;
}
ドキュメントによるとこれがコンパイルエラーになるという意味だと思うんだが…ならぬ
scopeは今はうまくエラーがでないんじゃなかったっけ?
Bugzilla登録されてたはず
>>506 -release を付けると 範囲チェックを省くってのは明記されてるよ………コマンドラインのところに(ボソッ
正しくは、現状の動作は
・-releaseをつけると@safeがついてない関数で範囲チェック用のコード生成が省略される
・-noboundscheckをつけると@safeな関数のコードも範囲チェックが省かれる
つまり
・デフォルトでは範囲チェックを実施(安全側に倒している)
・-releaseをつけると@safe保証が必要なところのみに範囲チェックを限定
・-noboundscheckはスピード重視の方向け、素人にはお勧めしない
となる
>>517 関数引数に scope つけると何が変わるの?
今のところ意味があるのはdelegate型の引数につけた場合のみ。
void foo(scope int delegate() dg) { ... }
dgに渡されるデリゲートがfooの呼び出し側でクロージャを作らないことを保証してくれる。
>>522 ありがと。実行時に振る舞いが変わることは確認できた