Kotlin 要起飞了,大家怎么看

2017-05-18 02:34:14 +08:00
 laxenade
Android 宣布支持 Kotlin(???)
11490 次点击
所在节点    Kotlin
48 条回复
plqws
2017-05-18 22:38:37 +08:00
Kotlin 这种现代语言的上位总比 Go 这种原始语言越来越火来得好
Go 能实现 Reactive ?不存在的
Go 的 OOP ?不存在的
还是让 Go 在服务端领域继续发挥自己的作用吧,拿来写客户端程序?别逗了
jyf
2017-05-18 22:52:48 +08:00
我的感觉是 不管 kotlin 靠不靠铺 反正看来是要扔掉 java 了
所以打算去投奔 lambdanative
DemoJameson
2017-05-18 23:15:47 +08:00
所谓的钦定就是以后会对 Kotlin 做全面的支持,测试啊性能啊稳定性啊之类的提升。
momocraft
2017-05-18 23:28:38 +08:00
比 java 好 支持
cloud107202
2017-05-19 00:15:09 +08:00
有人提到很疑惑 kotlin 和 scala 的区别,作为一个双修且两个语言都有上过准生产环境的经历(感谢开明又帅气的 boss),简单说说我的浅显理解:
1. kotlin 运行时相对轻量,标准库逻辑不多。这主要体现出二者在实现思路上的显著差别,kotlin 一切尽可能复用 Java 已有的逻辑和实现,不少 API 仅仅是 Java 版本的封装。而 scala 则是一切都自己来一套。得益于此 kotlin 获得了与 Java 强大的交互性,kt 文件可以跟 Java 文件混写在一个工程(与 scala 不同的一点在于,kotlin 甚至不用以大目录区分),并在 Intellij 大法的加成下,拥有无语伦比的开发体验。
这一点也或多或少体现在工具链上,kotlin 可以与 maven/gradle 无缝交互,而 scala 的官方构建工具 sbt 有一定上手难度,再加上众所周知的原因,从 sbt 的安装到工程导入伊始便会遇到层层阻碍,私以为这一点极大地阻碍了 scala 在国内的推广。

2. 在 Functional Programming 支持层面,二者均支持 first-class function/high-order function, Closure, Algebraic Data Type, Type Inference 尾递归优化等在静态语言里如果想舒爽的使用 FP Style 所必须的元素. 相比于 scala, kotlin 还欠缺 Pattern matching, Lazy evaluation 等特性,不过当前的程度已经足够令我满意。和 golang 这种欠缺类型多态的语言相比,kotlin 与 scala 都可以将很多副作用(Nullable,Either,Throwable,IO)直接 encode 进入类型系统,并通过类型系统直接表达和保证对这些副作用的正确处理。相关的 TypeClass/Monad 类库推荐 https://github.com/MarioAriasC/funKTionale 类比 scala 社区比较流行的 scalaz 和 cats.

3. 开源社区的亲和力与推广,Jetbrains 在营销和推广方面显然是个经验丰富的老司机,合纵连横多点开花收获了 Spring, Eclipse(Vert.x)等多个在 Java 领域举足轻重的大型社区官方支持。至于跟 Google Android 团队的关系也早在 Google 启用 Android Studio 作为 official support IDE 时算起便暧昧起来了。另一边,scala 社区背后的 Typesafe 公司(现在更名为 Lightbend)则曾对 Spring 抛来的橄榄枝不理不睬,保持一副高冷作风(e.g. 于 2012 年烂尾的 spring-scala 项目)。毕竟那边也有自己一套 Akka, Play, Lagom 等有自己玩法的技术栈,不亦乐乎。

4. 兼容性,算是一把双刃剑,可以扩大占有份额,也是创新前行路上的镣铐。kotlin 当前版本的字节码是 jdk 1.6 的规范(即使 kotlin 1.1 在编译期给定-jvm-target 1.8 开关,生成的字节码也仍然没有利用 invokedynamic, default method )。另一点,同样也得益于小体积的标准库,在 Android 平台面对 APP 体积与 65535 方法数限制时,足以游刃有余。scala 从 2.12 起只能运行在 jdk 1.8 上面。

5. 创新与野心:2008 年横空出世的 scala 带来很多创新点,收获了极大地关注度,以至于倒逼促成了 jdk 1.8 的若干语法改动(stream API, optional, lambda)。kotlin 相对于 scala 或一众现代高级语言来说,更多的是取其精华且有所舍弃(比如 implict 这种相对复杂且显著拖慢 compiler 的特性) 并且吸收了其他领域语言的特性(比如 Delegated properties 应该是借鉴自 Objc 的 KVO?) 增强语言在移动平台的表达力。这一头 scala-native 这种玩票性质的工程多年还没什么进展,而另一头 Jetbrains 已经招兵买马组织了一波独立团队去并行研发 kotlin-native, 我内心还是很希望 Jetbrains 能把主要精力聚焦到 be a better Java, 至于 better c++这种事情完全可以交给 Rust 去折腾。

6. 学习成本,综合前面几点,尤其是第一点,kotlin 当前版本( 1.1.2 )几乎是处于没有标准库的阶段,对于一个 Java 熟手来说,简单通读一遍官网的语法规范即可上手。而随着后期 kotlin 其他标准库的补全和语法 /关键字的丰富(coroutine 协程 API 将于 1.2 版本彻底稳定,而剑指 Functional Programming 的 immutable collections 也正在紧锣密鼓的研发中),后面学习起来会遭遇更多的信息和心智负担。考虑到实用性和上手速度,对这两门语言都感兴趣的话,我建议(先)学习 kotlin,而且是立刻和马上学起。

有感而发加上闲得慌,一不小心写成了长文,希望对有兴趣想尝试的小伙伴们有些许帮助。
xingda920813
2017-05-19 00:36:22 +08:00
@cloud107202
1. Scala Ant / Maven / Gradle / SBT 都可以的;
2. Scala 在 OO 方面走的更远,Trait,类型系统等,FP 的特性也比 Kotlin 多;
4. Kotlin 这样做,性能跟编译成 Version 52 字节码的 Scala 2.12 有差距;
3, 6 说到了 Scala 的痛点,确实是这样,现在加上 Google 钦点,Kotlin 是要学起了。
cloud107202
2017-05-19 00:38:57 +08:00
@xingda920813 you are right,第一点,就我的体会来说,kotlin 直接 copy 来官方的构建模板很顺滑,而 scala 数次没有折腾成功就弃了,所以没太展开。感谢补充
bullest
2017-05-19 16:01:33 +08:00
@team-gbl-android I am not sure who wants to go first but to anyone that is interested feel free to write your next feature in Kotlin. Mention the whole team on the PR for the feature. Be prepared to defend your code.

今天我们公司的通知

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX