私は D プログラミング言語でマルチスレッド プログラムを書いていますが、この言語にはかなり慣れていません。Tid.send()パッケージ内のおよびreceive[Only]()APIを使用してスレッド間で渡される型std.concurrencyには、送信側と受信側のスレッド間の競合状態を回避するために値型または定数でなければならないという制限があります。struct Message私は値渡ししていた単純な型を持っています:
enum MessageType {
PrepareRequest,
PrepareResponse,
AcceptRequest,
Accepted
}
struct Message {
MessageType type;
SysTime timestamp;
uint node;
ulong value;
}
ただし、一部MessageTypeの s にはすべてのフィールドがなく、switch ステートメントを使用して、ポリモーフィズムを使用してこの作業を自動的に行うことができるときに、どの型にどのフィールドがあるかを覚えておくのは面倒です。ここで推奨されるクラス階層を使用していimmutableますか、それとも私がすでに使用しているアプローチが最善の方法ですか?その理由は?
編集
また、不変クラスを使用する必要がある場合、ユーザー定義クラスの不変オブジェクトを作成するための推奨される方法は何ですか? immutable戻り値を?にキャストするクラスの静的メソッド。