以便您将来可以轻松地使您的程序并发。
5 回答
我专注于使项目不可变。不可变对象允许您比“线程安全”对象更容易地推理多线程代码。该对象具有一种可见状态,可以在线程之间传递而无需任何同步。它消除了多线程编程的思想。
如果你有兴趣,我已经发表了很多关于不可变对象的作品,特别是代码库上的不可变集合。该项目的名称是RantPack。在我的收藏区
- 不可变集合<T>
- 不可变映射<TKey,TValue>
- 不可变的AvlTree<T>
- 不可变的LinkedList<T>
- 不可变数组<T>
- 不可变堆栈<T>
- 不可变队列<T>
还有一个额外的填充层(CollectionUtility),它将生成实现 BCL 接口(例如 IList<T> 和 ICollection<T>)的包装器对象。它们不能完全实现接口,因为它们是不可变的,但所有可能的方法都已实现。
包含单元测试的源代码 (C#) 也可以在该站点上找到。
我主要用Java编程。我正在耐心等待将关闭添加到语言中的那一天。但是由于我仍然停留在 Java 1.4.2 上,即使它们被添加,这对我来说也不会持续很长时间!
也就是说,我的主要“函数式”编程方式是大量使用“final”关键字。我尝试让尽可能多的类完全不可变,而其余的类则明确区分什么是瞬态的和什么是不可变的。
不要使用成员变量或全局变量。使用函数/方法的本地堆栈。当一个方法仅使用内部范围的变量和调用参数并使用 out/inout/reference 参数或返回值返回所有信息时,它是函数式的。
使一切异步。使用不可变对象、消息等。通过队列进行通信。
这是关于 rubyconf 2008 的一个关于该主题的演讲,它主要以 ruby 为中心,但有几个概念仍然有效。
http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html