Javaslang 3.0之路

weixin_33806914發表於2016-11-21

Javaslang是一個開源的函式式庫,為Java 8及以上提供了持久化的資料型別和函式式的控制結構,最近,它釋出了3.0版本的路線圖,這個路線圖規劃到了2017年的3月份:

\\

17f835f957a052c99fbd1070bb4f98c5.png

\\

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 FeathersR7K Research \u0026amp; Conveyance的創立者和主管,他曾經發推文說,“OO通過封裝可變部分使程式碼易於理解,而FP通過最小化可變部分使程式碼易於理解”。

\\
在此之前的2.0釋出版本
\\

2.0版本關注與Java 8的互操作性。它有1900個提交,重要的特性包括:

\\
  • 用於併發程式設計的新介面,Future和Promise;\\t
  • 新的模式匹配API;\\t
  • 新的集合型別。\

271c81a159b26d6c8fd5d7154d9351a6.png

\\

最近的一篇Javaslang 部落格文章闡述瞭如何使用新的模式匹配API,並預覽了即將釋出的2.1.0版本所新增的API方法:

\\

d58838ddd1fb74d0aed2c27a124a5637.png

\\

60cba68521e05fff06694283e5859365.png

\\
2017年3月將要釋出3.0版本
\\

儘管3.0版本的變更集合已經進行了規劃,但是依然歡迎開發社群參與Javaslang的Gitter討論,詳細閱讀正式的提議列表並參與專案的貢獻

\\

Dietrich與InfoQ進行了交流,討論瞭如何邁向3.0版本:

\\

InfoQ:Javaslang與其他函式式庫的差異在哪裡呢,比如jOOλStreamExCyclops

\\
\

Daniel Dietrich :Javaslang致力於將Scala中儘可能多的好東西帶到Java語言中。這是獨特的賣點。沒有必要重複發明輪子,也沒有必要為已經解決的問題建立新的概念。通過將功能調整至Scala的水平,我們會從中受益,原因如下:

\\
  • Scala背後的一些基本理念對於Javaslang來說也是有效的,比如類似的持久化集合層級;\\t
  • 學習曲線比較平滑,對於已經熟悉Scala的使用者來說,使用Javaslang會非常容易。Scala文件中的許多內容對於Javaslang來說也是有效的,尤其是如何通過集合庫解決通用的問題(比如棧溢位);\\t
  • Javaslang比Java 8更加具有表述性/簡潔,比Java 8的Stream可能也會更快(參見我們即將推出的Vector的測試基準: https://github.com/javaslang/javaslang/pull/1557)。\

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版本中將會包含一些原本規劃後續版本才提供的特性。完整的特性列表可以參見我們專案的站點,即https://github.com/javaslang/javaslang

\\

Javaslang 2.0.x已經非常成熟了,所以我們將會花時間將2.1.0做好。我目前不能給出確切的釋出日期,但是我建議我們的使用者儘可能早地開始測試BETA版本和釋出候選版本。

\\

Javaslang 3.0不會向後相容Javaslang 2.x。從使用者的角度來說,業已依賴Javaslang的程式碼庫會覺得即將推出的2.1.0會更有意思,而3.0釋出版本則代表著Javalsang的未來。

\
\\

相關資源

\\

檢視英文原文The Road to Javaslang 3.0

相關文章