0

以便您将来可以轻松地使您的程序并发。

4

5 回答 5

3

我专注于使项目不可变。不可变对象允许您比“线程安全”对象更容易地推理多线程代码。该对象具有一种可见状态,可以在线程之间传递而无需任何同步。它消除了多线程编程的思想。

如果你有兴趣,我已经发表了很多关于不可变对象的作品,特别是代码库上的不可变集合。该项目的名称是RantPack。在我的收藏区

  • 不可变集合<T>
  • 不可变映射<TKey,TValue>
  • 不可变的AvlTree<T>
  • 不可变的LinkedList<T>
  • 不可变数组<T>
  • 不可变堆栈<T>
  • 不可变队列<T>

还有一个额外的填充层(CollectionUtility),它将生成实现 BCL 接口(例如 IList<T> 和 ICollection<T>)的包装器对象。它们不能完全实现接口,因为它们是不可变的,但所有可能的方法都已实现。

包含单元测试的源代码 (C#) 也可以在该站点上找到。

于 2008-12-09T07:45:28.843 回答
1

我主要用Java编程。我正在耐心等待将关闭添加到语言中的那一天。但是由于我仍然停留在 Java 1.4.2 上,即使它们被添加,这对我来说也不会持续很长时间!

也就是说,我的主要“函数式”编程方式是大量使用“final”关键字。我尝试让尽可能多的类完全不可变,而其余的类则明确区分什么是瞬态的和什么是不可变的。

于 2008-12-09T07:47:58.387 回答
0

不要使用成员变量或全局变量。使用函数/方法的本地堆栈。当一个方法仅使用内部范围的变量和调用参数并使用 out/inout/reference 参数或返回值返回所有信息时,它是函数式的。

于 2008-12-09T07:46:24.753 回答
0

使一切异步。使用不可变对象、消息等。通过队列进行通信。

于 2008-12-09T07:48:44.500 回答
0

这是关于 ruby​​conf 2008 的一个关于该主题的演讲,它主要以 ruby​​ 为中心,但有几个概念仍然有效。

http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html

于 2008-12-09T18:44:46.253 回答