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 \u0026amp; Conveyance的創立者和主管,他曾經發推文說,“OO通過封裝可變部分使程式碼易於理解,而FP通過最小化可變部分使程式碼易於理解”。
\\在此之前的2.0釋出版本
\\2.0版本關注與Java 8的互操作性。它有1900個提交,重要的特性包括:
\\- 用於併發程式設計的新介面,Future和Promise;\\t
- 新的模式匹配API;\\t
- 新的集合型別。\
最近的一篇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來說也是有效的,比如類似的持久化集合層級;\\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的未來。
\
相關資源
\\- Ismaël撰寫的通過Javaslang超越函式式正規化;\\t
- Grzegorz Piwowarek撰寫的Javaslang——函式式Java的正確做法;\\t
- Federico Tomassetti撰寫的 在Java中進行函數語言程式設計:Javaslang起步。\
檢視英文原文:The Road to Javaslang 3.0
相關文章
- VUE 3.0 初體驗之路Vue
- 公務員之路3.0註冊分析
- AS3.0升級埋坑之路S3
- Swift3.0-學習之路之導航控制器Swift
- Android Studio3.0更新之路(遇坑必入)Android
- 智慧安全3.0實踐|SASE技術架構的演進之路架構
- Redis Cluster 3.0Redis
- API閘道器:Apache APISIX 3.0與Kong 3.0比較APIApache
- Servlet 3.0 新特性Servlet
- Vue 3.0 來了!Vue
- webpack3.0配置Web
- ZendFrameworkModelsGenerator3.0Framework
- EasyCriteria 3.0 釋出
- Servlet3.0 特性Servlet
- Express 3.0釋出Express
- EJB 3.0簡介
- Teamviewer3.0View
- mPaaS 3.0 多媒體元件釋出 | 支付寶百億級圖片元件 XMedia 錘鍊之路(圖片快取篇)元件快取
- Laravel之路Laravel
- 求職之路求職
- Serverless——前端的3.0時代Server前端
- Laravel-Excel3.0 使用LaravelExcel
- 迎接區塊鏈 3.0區塊鏈
- Flutter Boost3.0初探Flutter
- vue3.0 propsVue
- Vue3.0新特性Vue
- 安裝Vue3.0Vue
- Vue 3.0 升級指南Vue
- EventBus 3.0 原始碼分析原始碼
- Unity GPU Query OpenGLES 3.0UnityGPU
- 搶先看Swift3.0Swift
- Swift3.0 CurryingSwift
- zabbix3.0安裝
- jQuery 3.0 的新特性jQuery
- Flash AS3.0實戰S3
- mongodb 3.0 replica set 配置MongoDB
- Servlet 3.0 之 FilteringServletFilter
- C# 3.0新功能C#