Javaslang 3.0之路
Javaslang 是一個開源的函數式庫,為Java 8及以上提供了持久化的數據類型和函數式的控制結構,最近,它發布了3.0版本的 路線圖 ,這個路線圖規劃到了2017年的3月份:
Javaslang是由軟件開發者 Daniel Dietrich 所創立的,為了配合Java 8的早期發布版本,它的第一次發布是在2013年。它借助Java 8的lambdas表達式 基于函數式的模式來創建各種新特性 ,其意圖在于通過函數式的集合庫替代Java的標準集合。
在最近jOOQ(Java Object-Oriented Querying API)的一次采訪中,Dietrich闡述了為Java添加 對象-函數式(object-functional) 編程風格的愿景:
我認為很多用戶對Java 8總體上是失望的,那些已經非常熟悉更高級語言的用戶感覺會更加強烈。Java語言的架構做得已經很好了。Java 8帶來了一些突破性的新特性,比如Lambdas、新的Stream API和CompletableFuture。但是,從API的角度來看,這些新的抽象僅僅是以一種很差的方式集成到了語言中。
對象-函數式編程并不是什么新的概念。在兩個領域,它都達到了最佳,也就是面向對象編程和函數式編程。在JVM之上,Scala是更好的可選方案之一。Java的Lambdas是一個推動型的特性,借助它,我們就可以創建類似于Scala的Javaslang API。
Michael Feathers 是 R7K Research & Conveyance 的創立者和主管,他曾經發推文說,“OO通過封裝可變部分使代碼易于理解,而FP通過最小化可變部分使代碼易于理解”。
在此之前的2.0發布版本
2.0版本關注與Java 8的互操作性。它有 1900個提交 ,重要的特性包括:
- 用于并發編程的新接口, Future 和Promise;
- 新的模式匹配API;
- 新的集合類型。
最近的一篇Javaslang 博客文章 闡述了如何使用新的模式匹配API,并預覽了即將發布的2.1.0版本所新增的API方法:
2017年3月將要發布3.0版本
盡管3.0版本的變更集合已經進行了規劃,但是依然歡迎開發社區參與Javaslang的 Gitter討論 ,詳細閱讀正式的 提議 列表并參與項目的 貢獻 。
Dietrich與InfoQ進行了交流,討論了如何邁向3.0版本:
InfoQ:Javaslang與其他函數式庫的差異在哪里呢,比如 jOOλ 、 StreamEx 和 Cyclops ?
Daniel Dietrich:Javaslang致力于將Scala中盡可能多的好東西帶到Java語言中。這是獨特的賣點。沒有必要重復發明輪子,也沒有必要為已經解決的問題創建新的概念。通過將功能調整至Scala的水平,我們會從中受益,原因如下:
- Scala背后的一些基本理念對于Javaslang來說也是有效的,比如類似的持久化集合層級;
- 學習曲線比較平滑,對于已經熟悉Scala的用戶來說,使用Javaslang會非常容易。Scala文檔中的許多內容對于Javaslang來說也是有效的,尤其是如何通過集合庫解決通用的問題(比如棧溢出);
- Javaslang比Java 8更加具有表述性/簡潔,比Java 8的Stream可能也會更快
jOOλ和StreamEx包含了工具性函數,它們會讓Java 8 Stream的使用更加容易。但是,用戶必須要編寫沒有必要的噪音代碼。更多的代碼行意味著可能會有更多的錯誤。
Cyclops是一個分布式編程的庫,但是沒有RxJava和Akka那樣流行。它就像一個函數式特性的游樂場,比如無棧遞歸以及取消monadic類型。這對于Java來說并不實用,這些特性我們有意不會包含在Javaslang的核心中。
InfoQ:Java 9的延期發布,現在日程是在2017年的7月,會影響Javaslang 3.0在3月份的發布規劃嗎?
Dietrich:Javaslang會保持對Java 8的向后兼容性。Java 10中所包含的新的Java特性才會影響到Javaslang API。所以,我目前看不出Java 9的延期會對Javaslang 3.0的發布日期會有什么影響。但是,路線圖還是有了一些的變化。
InfoQ:對于Javaslang 2.1.0發布版本或者Javaslang 3.0的路線圖你有什么更新要同我們分享嗎?
Dietrich:Javaslang新特性的開發和測試需要更多的時間。在年底,我們將會公開Javaslang 2.1.0的一個BETA版本。在Javaslang 2.1.0發布之后,才會啟動Javaslang 3.0的工作,從而避免沖突所帶來的損耗。為了補償3.0版本所造成的延遲,在2.1.0版本中將會包含一些原本規劃后續版本才提供的特性。
Javaslang 2.0.x已經非常成熟了,所以我們將會花時間將2.1.0做好。我目前不能給出確切的發布日期,但是我建議我們的用戶盡可能早地開始測試BETA版本和發布候選版本。
Javaslang 3.0不會向后兼容Javaslang 2.x。從用戶的角度來說,業已依賴Javaslang的代碼庫會覺得即將推出的2.1.0會更有意思,而3.0發布版本則代表著Javalsang的未來。
來自:http://www.infoq.com/cn/news/2016/11/the-road-to-javaslang-3