Kotlin语言现在怎么不火了?

前几年到处都在说这个要取代java来开发安卓应用,目前看很少有用这个语言的,关于安卓开发的书依旧讲的用java。我想开发点小的安卓应用,用apiclo…
关注者
379
被浏览
1,059,890

86 个回答

Kotlin从来也没大火过吧……


其实很简单,就是2000年之后,程序设计语言越来越不能孤立的评价。 几乎所有的程序设计语言都是和库绑定的 ,而Google不把Java基础类库全部重写一次,或者说Java生态不用Kotlin重写一次。那Kotlin在JVM的地位也就只能和Scala什么的一样不温不火。只会在开发android的时候考虑一下……



其实如果真的觉得语言可以提升生产力,那直接用C#就好了……

.NET的BCL就是C#写的,所以才会用起来如丝般顺滑。

就算是用C#,如果一个异步方法不提供XXXAsync版本,而只提供BeginXXX和EndXXX版本,那封装一下也是挺难受的……


之前有很多直接弄个翻译器从Java翻译成C#代码的 XXX.NET 项目,能跑起来,但是用起来就是说不出的恶心。这就是语言和类库不适配造成的违和感(别东张西望,说的就是你 Hibernate.NET Lucene.NET )……




说白了,设计个语言,比写个支撑他的基础库简单多了……



顺便说一句,一个优秀的程序设计语言不在于他有多少语法元素和特性,而在于这个语言的语法元素是否 符合直觉 。更进一步的就是是否 符合你的直觉

符合直觉,或者说你的直觉和语言设计者的口味一致的语言, 不单用起来爽,学起来也快

你要追求语言简单,直接用脚本最简单,不支持寻址和指针,没有值类型的Java本质上就比一些脚本语言多了个接口和继承的语法。而且非要装模做样的区分继承类和实现接口除了恶心人没有什么太大的意义。

要追求极致简单直接Brainfuck就好了,哪有什么语法元素少就学起来快的理论……

C语言语法元素更少,除了比Java多个union、宏和指针还有啥?



有人反复强调无缝,而事实就是, 无缝调用是最廉价的玩意儿 。对于JVM和CLR这种平台,语言无缝调用非常廉价,.NET和Java都支持Python甚至JS无缝调用,.NET甚至给出了CLS规范来降低语言互操作性的障碍。我都不说这些拓展, 就说亲儿子F#又如何呢

如果你想知道这些语言为什么火不起来,那很简单: 语言是和库绑定的 。但是如果你们只是想证明我自己能把两种语言能混用的很好,这说明这个答案 你们一个字都没看进去



最后说个残酷的真相吧,因为99%的程序员写的代码压根儿就不会被别人调用,所以也没人关心他们用什么语言写的,而他们 只会找实现这个功能最广泛能抄到的代码 ……哦,这就是Java火的秘密,还有PHP……



最后总结一下吧:

1、基于JVM的所有语言都能互相所谓的无缝调用,这其实是非常廉价的特性。

2、如果对于程序员来说,语言真的那么重要,能够大幅的提升生产力,直接用C#就好了,何必用Kotlin呢?毕竟大部分特性就是从C#抄的,别说什么糖太多,什么取舍。隔壁的Java不用Kotlin的时候一个说法。

3、所以,Kotlin火不起来的原因很大程度上和语言一毛钱关系没有,而在于社群和库。这也是为什么基于JVM除Java外的其他语言和基于CLR的除C#外的其他语言火不起来一回事儿。因为库没有针对性的优化。当年C#为了支持LINQ,硬生生的搞出扩展方法是为何?就是因为库上面不支持Where、Select方法,你支持lambda,支持LINQ Expression又如何?Java作为学生也不得不抄接口默认实现来玩,套路都一样。说白了如果List不提供stream方法,你非要写成 new Stream( list )看起来就难受多了……

所以语言和库是个相辅相成的事情,这一点上C#尤为突出,你库不升级,语言是无法升级的。比如说C#2依赖于System.Collection.Generics,C#3依赖于Enumerable扩展方法,C#4依赖于DLR,C#5依赖于Task的扩展,C#6依赖于FormattableString,C#7依赖于ValueTuple……

4、最后绝大多数程序员就是个CP的手艺活儿,语言优雅与否其实压根儿不重要,有得抄,有得用才是最重要的。Python在机器学习大火是因为Python适合写机器学习的算法么?显然不是,是因为大部分机器学习的库提供了Python接入,网上大把的Python代码可以去抄……恶意的揣度一下,如果当年阴差阳错用的是Lua或者JavaScript做胶合语言……