回答

3

我專注於使項目不可變。不可變對象允許您比「線程安全」對象更容易推斷多線程代碼。該對象具有一個可以在線程之間傳遞而沒有任何同步的可見狀態。它考慮了多線程編程。

如果您有興趣,我已經發表了很多關於不可變對象的工作,特別是代碼庫上的不可變集合。該項目的名稱是RantPack。在收集區我有

  • ImmutableCollection <牛逼>
  • ImmutableMap < TKEY的,TValue >
  • ImmutableAvlTree <牛逼>
  • ImmutableLinkedList <牛逼>
  • ImmutableArray <牛逼>
  • ImmutableStack <Ť>
  • ImmutableQueue <Ť>

有一個額外的墊片層,其(CollectionUtility),這將產生實現BCL接口如IList的<Ť>和ICollection的<Ť>包裝對象。他們不能完全實現接口,因爲它們是不可變的,但是所有可能的方法都被實現了。

包含單元測試的源代碼(C#)也可在網站上找到。

0

請勿使用成員變量或全局變量。使用本地堆棧的函數/方法。當一個方法僅使用內部作用域變量和調用參數並使用out/inout/reference參數或返回值返回所有信息時,它是可用的。

+0

你沒有涵蓋這一切:[...]不使用I/O函數或函數返回隨機值等,基本上不會有副作用的使用功能。 – Claymore 2008-12-09 09:07:29

1

我主要用Java編程。我正在耐心等待關閉語言的日子。但是由於我仍然停留在Java 1.4.2上,即使它們被添加了,這對我來說也不是很長時間!

也就是說,我的主要「功能性」編程方式是大量使用「最終」關鍵字。我試圖讓儘可能多的類完全不可變,而其餘的則在瞬態和不可變之間有明確的區別。

+0

+1爲「最終」 - 不變性是你的朋友。如果您使用其中一種功能性JVM語言(例如Clojure或Scala),您也不需要等待關閉:-) – mikera 2011-03-08 16:40:29

0

使一切變得異步。 使用不可變對象,消息等。 通過隊列進行通信。

+0

我可以看到MQ如何幫助併發,但功能如何? – Guillaume 2008-12-09 07:53:32