最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Javaslang 3.0 之路

  • 2016-11-21
  • 本文字数:2025 字

    阅读完需:约 7 分钟

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 可能也会更快(参见我们即将推出的 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

2016-11-21 18:009757

评论

发布
暂无评论
发现更多内容

Jenkins 构建的时候提示 DOCKER_HOST 错误

HoneyMoose

小白一键出片,三分钟成为修图大师的秘诀。

淋雨

ps LR 磨皮插件 滤镜插件

我上了个假“中台”!

雨果

数据中台

从0开始,用Go语言搭建一个简单的后端业务系统

海风极客

后端 go语言 11月月更

从1开始,扩展Go语言后端业务系统的RPC功能

海风极客

后端 go语言 11月月更

订单里的充值卡消费和积分抵扣怎么处理?

产品海豚湾

产品经理 产品设计 电商系统 分析设计 11月月更

2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果arr[i] != 0,表示i这里已经确

福大大架构师每日一题

算法 rust 福大大

专访微盟CTO黄骏伟:WOS将为去中心化商业提供一整套数字基建

B Impact

如何快速优雅的用Know Streaming创建Topic

石臻臻的杂货铺

11月月更

设计模式之美-代码评价标准

GalaxyCreater

设计模式

设计模式之美-面向对象、设计原则、设计模式、编程规范、重构的关系

GalaxyCreater

设计模式

📢利用Vite插件助力证书安装

小鑫同学

前端 插件 11月月更

华为云从入门到实战 | 云容器服务

TiAmo

华为 华为云 云开发 11月月更

433MHz自发电无线控制器

不脱发的程序猿

物联网 嵌入式 无线通信 ​433MHz自发电无线开关

史海峰:成为技术领导者 从技术到管理的必经之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

以开发之名 | bilibili会员购让IP在眼前动起来

HMS Core

视图的创建

二哈侠

Python 视图 11月月更

一文了解openEuler SIG组角色划分与管理运作

openEuler

开源

一次基于Fastjson的JNDI注入

网络安全学海

网络安全 安全 信息安全 渗透测试 漏洞挖掘

InnoDB与MyISAM的使用,该如何选择?

想要飞的猪

详解CAN总线:CAN总线通信优先级机制

不脱发的程序猿

汽车电子 CAN总线 详解CAN总线 CAN总线通信优先级机制 CAN优先级

简述机器学习库

穿过生命散发芬芳

机器学习 11月月更

MySQL能力全开放,OceanBase 社区版 4.0 正式上线

OceanBase 数据库

StarRocks 技术内幕 | Join 查询优化

StarRocks

数据库

从2开始,在Go语言后端业务系统中引入缓存

海风极客

Go 设计 后端 11月月更

Spring Boot「23」DAO 模式

Samson

Java spring Spring Boot 学习笔记 11月月更

Go 云原生实战:如何增加应用配置模块

宇宙之一粟

云原生 配置 Go 语言 Web应用开发 10月月更

使用 Goland 开发 dubbogo 项目时如何自动快速格式化 import 代码块

apache/dubbo-go

【LeetCode】最长递增子序列的个数Java题解

Albert

算法 LeetCode 11月月更

Vue组件入门(十五)异步组件

Augus

vue3.0 11月月更

互联网安全体制的挑战与机遇

阿泽🧸

互联网安全 11月月更

Javaslang 3.0之路_Java_Michael Redlich_InfoQ精选文章