Re: immutableな静的配列の初期化

投稿ツリー


このトピックの投稿一覧へ

なし Re: immutableな静的配列の初期化

msg# 1.2.1
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/9/20 1:01
9rnsr  新米   投稿数: 7
一応補足しておくと、自分が述べた「出来ない理由」は現状のdmdの実装からくるもので、仕様からの制限についてはなにも言及していません。

> The initializer for a non-local immutable declaration must be evaluatable at compile time
> (非ローカルな immutable 宣言の初期化子はコンパイル時評価可能でなければなりません)

これはinitializerを指定する場合の要件で、initializerなしの場合(つまりコンストラクタでの初期化を行う場合)は当てはまらないと思います。

> また、 shared static this() でimmutableなデータを初期化出来るとは一言も述べられていません。

これは現状の実装の穴かもしれません。immutableなグローバル変数はstatic this()とshared static this()の両方で初期化可能ですが、本来はshared static thisのみが初期化可能であるべきかもしれません。

immutable int x;
static this() { x = 10; } // コンパイルエラーになるべき?
shared static this() { x = 20; }
import std.stdio;
void main() { writeln(x); }

また型の上でもis(immutable(int) : shared(const(int)))なので、immutableな値はsharedでもあると考えたほうが自然だと思います。
投票数:15 平均点:6.00
返信する

この投稿に返信する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu