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

Javaslang 3.0之路相关推荐

  1. (zt)Web 2.0奔路进行时

    Web 2.0奔路进行时 作者 黄昆 Web2.0不是独立存在的,在2006年将会全面融入互联网,这种融入并不意味着Web2.0以及Web2.0所代表的创新浪潮的消退,反而将以这种充满活力的创新方式引 ...

  2. oracle websp,探索Web2.0成就SP 2.0之路

    最近我看到互联网上最火爆的话题是:Web2.0如何赢利?而在SP行业论坛中最热的讨论是:是SP如何走出当前的困局,最近也有些行业人士抛出了一个SP2.0的概念.前段时间和网易前内容总监李学凌聊天,他说 ...

  3. 记一次 react 15.3.1 老项目升级到 react 16.7.0 之路

    互相交流学习,请加我微信: iyangyuanjian,QQ:624508914 1.前言 该项目是公司内部服务与外部服务的中台系统,我称之为大杂烩 项目始于:2015年10月8号 18:31:39秒 ...

  4. ajax路由器,注册ajax用户的步骤 _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...

    注册ajax用户的步骤 在网站设计中,ajax技术的使用已经很普遍了,尤其在交互式的网站中,ajax技术更不可缺少了,几乎在所有的交互式网站应用中,都会看到ajax的技术,大型网站诸如会员的注册,小型 ...

  5. 魅蓝3卡插上显示无服务器,给魅蓝3插卡的方法步骤 _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...

    给魅蓝3插卡的方法步骤 昨日下午,魅族再次发布了一款青年良品---魅蓝3,相比前一代魅蓝2有一定的提升.此次带来的魅蓝3同样采用了单卡槽双卡设计,支持双卡双待,之前新全网通,支持TF卡扩展,所以相比魅 ...

  6. 未来IT革命5.0之路,何去何从?

    前言: 今天坐着高铁,漫漫旅途思索着生活和远方,大家拼此一生,总是上错车或者误了点,是否很多人都曾想过:如果我早点借款买了一线的房子现在是不是就成了包租公,坐享一世繁荣?如果我早些时候深刻掌握了概率统 ...

  7. 我的linux redhat6.0之路-1.2

    上一篇文章写了samba的搭建方法,但是却没有真正的尝试搭建,今天我就试了下搭建方法,做一个简单的总结,我已修改了配置文件 配置项中的内容就再写一次,顺便记忆 workgroup 指的是工作组 ser ...

  8. cuda nvcc版本不一致_入坑第一步:Win10安装cuda+cuDNN+TensorFlow-GPU走过的那些路

    这两天安装tensorflow-gpu被折腾够呛,幸亏最后成功了,给想要安装的大神们看下我走过的坑,避免掉入. 如果是新手,需要安装下面几个软件: 第一步 安装anaconda 首先就是Python编 ...

  9. jaxb转xml空值双标签_单品运营思维:标签-词路-聚焦-直搜-超直

    非标品标签思维:针对非标品 主要是2.0为主的打法 根据搜索入池的关键词,有什么词做什么词. 有个细节:不一定进什么词做什么词,这个维度当中加入3.0的思维 3.0入手 转2.0再切3.0(检测词路健 ...

最新文章

  1. Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈
  2. html js绑定键盘按键触发事件(按回车键登陆)
  3. IntelliJ IDEA 常用快捷键和设置
  4. P4169-[Violet]天使玩偶/SJY摆棋子【CDQ分治】
  5. Maven的单元测试没有执行的问题
  6. JAVA设计模式之抽象工厂模式
  7. 如何从 ArcView 3.3 版本的工程迁移到 ArcGIS Desktop 10 ?
  8. js之好看的鼠标点击-光标特效
  9. C. 点和圆 (类与对象)
  10. 虚拟机MAC地址冲突,如何生成新的mac地址
  11. 杭电操作系统实验三--- 实现模拟shell(arm架构华为云)
  12. 【Fragment】FragmentManager和FragmentTransaction使用
  13. PHPcurl请求很慢解决办法
  14. 2022-2028全球管道式全屋除湿机市场现状及未来发展趋势
  15. QS世界大学 计算机科学与信息系统学科排名!中国高校表现如何?
  16. Ubuntu下主板集成前置音频输出设备没有声音的解决办法
  17. centos8安装jdk教程
  18. 华北电力大学C语言题库答案,华北电力大学(北京)C语言期末考试题及答案.pdf
  19. Linux常见的文件内容查找和替换命令
  20. GO语言基础之error

热门文章

  1. Mysql存储过程查询结果赋值到变量
  2. 诗与远方:无题(六十一)- 杂诗
  3. dev调试时无法进入下一步_【问题解决方案】Dev C++ 无法调试的问题与解决
  4. frame跨页传值/AJAX出错解决方案 + 知识补充:浏览器同源政策
  5. Vue 组件 mixins
  6. 关于Java静态属性初始化
  7. vue+node全栈移动商城【6】-node接口配置文件
  8. 设计模式实践系列 (3) - 装饰模式 ( Decorator )
  9. 【译】区块链是如何工作的——用JavaScript演示
  10. Struts2之初识篇(一)——与struts的区别和基本配置