1

我正在用 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;
}

但是,有些MessageTypes 并没有所有的字段,而且当我可以使用多态性自动完成这项工作时,使用 switch 语句并记住哪些类型具有哪些字段是很烦人的。是使用immutable这里推荐的类层次结构,还是我已经在使用最好的方法,为什么?

编辑

另外,如果我应该使用不可变类,那么创建用户定义类的不可变对象的推荐方法是什么?它们来自的类的静态方法将返回值转换为immutable?

4

1 回答 1

2

根据经验,如果您有一个多态类型层次结构,那么类是可以使用的工具。如果设计上不可能发生突变,那么不可变类应该可以有效地解决问题。

Ali 的 DConf2013 精彩演讲最近发表在:http: //youtu.be/mPr2UspS0fE。它非常详细地介绍了 D的用法const和主题。它建议使用语法来创建不可变类immutable的其他好东西 。auto var = new immutable(ClassType)(...);然后所有初始化都转到构造函数,不需要特殊的黑客攻击。

于 2013-05-14T08:51:49.213 回答