.kt与.java还有.groovy_Scala、Groovy、Clojure 、Kotlin 分别解决了 Java 的什么痛点?

楼上的回答有一些不妥,我来补充一下。

所谓Scala的目的是什么?事实上Scala作者Martin Odesky他在《Programming in Scala》中写到,Scala的目的是为了更好的融合OO与FP,确实,不是取代Java。而且打造一个更伟大的JVM语言。和干掉Java半点关系都没有。作者只是想搞一个可以伸缩的JVM语言。不过Scala确实在很多方面引领了JVM语言的潮流。同时强大的类型系统让Scala的表达能力和抽象能力比Java,Kotlin都强。这让Scala非常实现写类库和框架。如Spark和Akka。然而Scala为了伸缩性和表达能力牺牲了易用性,所以写应用Scala就太重了。比如把Scala用户分为应用程序开发人员和类库设计人员,然后在归纳出他们要掌握的东西。你就发现哪来写应用的话Scala的很多特性都用不上。这就是为什么有Kotlin。

Kotlin是想干掉Java。众所周知Scala用户里有Better Java派和Pure-FP派。Kotlin在很多地方就是学习了Scala的语法,比如说data class和类构造器的设计,在Scala中都可以找到类似的东西。同时有加了不少语法糖,比如getter和setter,委托的语法糖,解决了Java没有这方面语法的缺点。虽然说抽象能力和类型系统比Scala差很多。但是吸引了Better Java派的目光。毕竟Kotlin的目的就是在JVM上建立一个有C#的易用性,Scala的语法精简,Java的生态的语言,要是你觉得Java语法太垃圾干嘛不用呢?总体再说,Kotlin的目的就打造Better Java,打造新一代的JVM语言(这个新一代和Scala不一样,Scala是强调类型系统的改良和伸缩性。Kotlin是语法糖)。如上文所提到,Scala的高级特性比如类型投影,存在类型,高阶类型这些拿来开发应用基本没什么用。所以有了Kotlin,Kotlin的类型系统就是Java类型系统的延续。但是哪来开发类库Kotlin的抽象能力就不够用了。看看Arrow.kt就知道Kotlin实现各种代数上的抽象结构有多难。

而Pure-FP派的Scala用户因为是Scala类型系统的重度用户,没有高级的类型就写不出来了,所以就继续用Scala。

Groovy的目的就是为了开发一个JVM上的脚本语言。灵活性比Scala还强。Groov亮点就是写DSL很方便,比如Gradle的build script。Groovy的优缺点和其他脚本语言比如Ruby差不多。我觉得Groovy就是一个JVM上的Ruby++。和Ruby一样灵活,一样可以写DSL。但是Groovy能搞的Scala大部分都做的出来,搞DSL的话Scala也行,只是不那么方便。

Clojure就是JVM上的Lisp。解决的Java语法和Lisp差别太大的缺点。当然,Clojure还是很强的,有Marcos,而且比Scala的Marcos强,可以玩meta programming。所以拿Clojure造DSL比Groovy还方便。

总体来说,Scala解决的Java的类型系统不够强大,抽象能力不足的缺点。Kotlin解决Java语法糖不够多的缺点,Groovy解决了Java太死板的缺点,Clojure要解决和和Groovy差不多,只是靠Lisp化做得更彻底一点。

所以要是你要选语言,可以看这个写脚本 => Groovy

元编程,玩 => Clojure

Android,干各种Java适合干的事情(如后端) => Kotlin

开发类库,玩函数式编程,数据分析,一些微服务(如Akka)=> Scala

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值