QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

与 Andrey Breslav 谈论 Kotlin 1.0 的发布

  • 2016-03-03
  • 本文字数:2471 字

    阅读完需:约 8 分钟

在经过了三个月的 beta 测试后, Kotlin 团队终于宣布发布 Kotlin 的 1.0 版本,该版本的目标是提升这门语言在 API 与 ABI 方面的稳定性。

从该语言的第四个 beta 发布,到发布候选版本的出现,直至 1.0 版本的正式发布,该语言经历了大量的变化,包括它的标准库与 Kotlin IDE。特别是对于标准库的修订主要专注于对它的 API 进行清理,并减少资源的占用,从而更好地配合 Android 应用的开发。在语言方面,新版本对于语法与语义进行了大量的修正,并且最终确定了二进制格式,移除了字节码中一些比较晦涩的部分。新版本中的工具引入了一种全新的算法,以改善依赖的检测,按照 JetBrains 的说法,这一点大大提升了增量式编译的速度。此外,IntelliJ IDEA 的最主要 Kotlin 插件现在也包含了 Android 插件,因此 Android 在新版本中得到了直接支持。

来自 JetBrains 的 Andrey Breslav 是 Kotlin 的设计主管,他也澄清了 Kotlin 在向后兼容方面的计划。具体来说,Kotlin 将致力于确保新的代码能够与旧的二进制文件共同编译与运行(即 ABI/API 的向后兼容),而旧的二进制文件也能够与新的二进制文件相兼容(即 ABI 的向前兼容)。在源代码层面,团队的目标是确保新的编译器能够顺利地编译所有旧的编译器能够编译的代码。InfoQ 与 Breslav 进行了一次访谈。

促使你设计 Kotlin 这门语言的动力是什么?

当我们 2010 年刚启动这个项目的时候,最初的想法是创建一种更好的语言以用于开发我们的产品,并且能够运行在 JVM 上,不久我们就意识到还有其他人也有同样的需求。虽然当时还有一些用于替代 Java 的其他选择,但他们都不太适合于我们的需求(有些用户与我们的需求有所差别,那些语言对于他们来说已足够完美)。我们的需求如下:

  • 静态类型:这一点的目标在于大规模代码库的可维护性。
  • 更平滑的迁移路径:逐渐地将新的代码引入现有的代码库,以尽量减少对其他代码的影响。
  • 高质量的工具:我们相信,一门语言的生产力很大程度上取决于工具的支持。
  • 易于学习及理解:我们团队并没有区分“库的作者”与“库的使用者”这两种角色,我们希望所有开发者都能够在所运用的语言中达到相同的生产力。

可以说,具备以上四点特性的 Kotlin 在 JVM 的所有实现中可以说是独一无二的。

Kotlin 终于发布了 1.0 版本,你能否总结一下这个里程碑的意义?

许多开发者在这一版本发布之间就已经在开始使用 Kotlin 了,但一个官方的 1.0 版本为用户提供了更好的保障。经常有用户对我们说:他们的组织不会考虑采用 Kotlin,除非能够发布一个正式的 1.0 版本,我完全理解这些组织的决定。如今随着 1.0 版本的问世,Kotlin 终于得以“正式亮相”,用户也可以放心地在生产环境中使用它了。这种信心很大程度上来自于语言的进化方式:从现在起,我们将承诺新版本的向后兼容性,即该语言及其标准库的后续版本中出现的任何改动都不会破坏之前版本所编译生成的二进制文件。因此,在用户部署 Kotlin 代码时,他可以确信不会出现兼容性问题,正如部署 Java 代码一样。

我们为 1.0 版本的发布投入了 5 年时间,后向兼容性是投入这么多时间的一个主要原因。我们必须保证这门语言设计上的优雅性及实践性,否则就难以保证不会出现任何破坏性的变更。并且我们相信,只有在实际的生产环境中使用这门语言,才能够做出这种承诺。因此,我们目前已经在 JetBrains 本身的产品中使用 Kotlin 近两年时间,并且对于它有着充分的信心。

当然,这并不是说这门语言的设计从一开始时就是完美的:我们在 JetBrains 产品以及其他项目的生产环境中发现了一些严重的问题,但我们仍有充分的时间去修复这些问题并进行进一步的验证。

Svetlana Isakova 在 DroidCon-DE 上将 Kotlin形容为“Android 上的 Swift”。你能否详细地说明一下 Kotlin 在现有的编程语言浪潮中如何占据一席之地?

"Android 上的 Swift"这个引人注目的说法是由 Mike Gouline 首先提出的,而公众很快接受了它。这是个非常准确的比喻,可以这么说:正如 Swift 对于 iOS 开发者来说是比 Objective-C 更为现代化的替代者一样,对于 Android 开发者来说,Kotlin 则是 Java 的一个更为现代化的替代方案。不过我要指出一点,Kotlin 的应用并不仅仅限于 Android 的开发而已。

至于 Kotlin 所涵盖的平台与领域,可以说只要是使用 Java 的地方就能够运行 Kotlin:包括桌面、服务端与移动端等任何平台。Kotlin 所生成的字节码与 Java 6 相兼容,使它的应用范围更加广阔。运行时本身非常小(只有大约 800K),并且我们非常注意避免任何可能会使 Kotlin 代码在某些场合无法工作的运行时问题(例如我们避免使用特定的类加载器或运行时打包的需求等等)。此外,我们目前正在为 Kotlin 开发一个基于 JavaScript 的后台(目前还处于实验阶段),这会进一步扩展 Kotlin 的可应用性:用户将能够通过 Kotlin 开发完整的 web 应用。

Kotlin 未来的路线图是怎样规划的?

我们还有许多任务要完成,这些任务有大有小。之前提到的 JS 后台是一个比较大的任务。另外还有工具链的性能。Kotlin 现在已经在 IntelliJ IDEA 上实现了增量式编译,如果你修改了某些代码,那么只有被改动的文件(而不是模块!) 会被重写编译。我们也希望为 Gradle 用户带来相同的体验,这部分工作正在进行中。即将到来的 1.1 版本将能够生成 Java 8 字节码(并同时生成 Java 6 字节码),以实现多种功能优化,例如 lambda 表达式等等。在语言特性方面,我们并不打算在 1.1 中引入任何重大的改动,但可能会去除某些限制,例如 data 的相关类。我们还计划进一减少标准库的方法数量,这对于 Android 开发者来说是相当重要的。

我们还在计划一些更为激动人心的特性,举例来说,我们打算在 Jigsaw 运行时模块正式发布时提供对它的支持,并且在 Kotlin 的未来版本中加入对 async/await 语法的支持。

使用 Kotlin 1.0 的用户必须对全部代码进行重新编译,以清除之前版本所生成的代码。同样道理,所有已经过期的语言结构会造成错误。用户可以在 IntelliJ IDEA 中通过一个预打包的插件进行下载,或者直接从 GitHub 库进行构建。

查看英文原文: Q&A with Andrey Breslav on the Kotlin 1.0 Release

2016-03-03 18:001829
用户头像

发布了 428 篇内容, 共 180.9 次阅读, 收获喜欢 39 次。

关注

评论

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

Flink垃圾图片分类优胜奖比赛攻略_贪吃的小香猪-148队

阿里云天池

tair性能挑战赛攻略心得-Zzzzz

阿里云天池

TikTok怎么开直播?TikTok直播专线是什么?

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 海外直播网络 tiktok直播网络

低代码开发:数据分析如何快速响应企业需求

EquatorCoco

低代码

茶思屋直播|TinyEngine+AI:聚焦主航道,在实践中探索低代码技术黑土地

OpenTiny社区

低代码 OpenTiny TinyEngine

Multitouch for Mac(多点触控手势增强神器)

Mac相关知识分享

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

Apache IoTDB

工业物联网PaaS平台的商业模式研究

不在线第一只蜗牛

云原生 物联网 PaaS

干货满满!第二期流程挖掘实践训练营圆满落幕~

望繁信科技

流程挖掘 流程资产 流程智能 数字北极星 望繁信科技

VLDB 2024 圆桌会议回顾:展望物联网与 AI 时代的时序数据库

Apache IoTDB

2024中国算力大会,河南如何绘写算力长卷?

脑极体

AI

什么是任务管理工具

高端章鱼哥

BBEdit for Mac(HTML文本编辑器)

Mac相关知识分享

关于深度学习量化的操作

芯动大师

深度学习 gpu 模型化

阿里巴巴API助力电商:商品详情获取与数据驱动的完美结合

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

谷歌云推出全新区块链RPC服务:简化Web3开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 公链开发 代币开发

mac苹果电脑办公套件全家桶下载:Office2019 for Mac 下载

你的猪会飞吗

Microsoft Office 2019 office 2019 mac破解软件下载

C++中对象的延迟构造

快乐非自愿限量之名

Java c++

离散制造 vs 流程制造:锚定精准制造未来,从装配线到化学反应,实时数据集成在制造业案例中的多维应用

tapdata

数据库

开发一个 PicGo 插件

yuanyxh

前端 PicGo js

TikTok直播专线服务商推荐

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 TikTok跨境直播

智能财务推动企业数字化转型的研究及实践

快乐非自愿限量之名

低代码

试用完几十款ETL工具后的经验总结,ETL工具用这三款就足够了

RestCloud

kettle ETL DataX ETL数据集成

借助Python和搜狐视频联盟API自动推荐热门视频

幂简集成

视频 API

TON基金会与Curve Finance合作:推出基于TON的新型稳定币互换项目

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

Mint Expedition Season 3 拉开帷幕:登顶高峰的时刻到了

NFT Research

blockchain web3 空投

Java获取Object中Value的方法

快乐非自愿限量之名

Java

四类取整方式

不在线第一只蜗牛

c++ C#

fetch --nohooks webrtc 失败

webrtc developer

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技

mes 万界星空科技 食品MES 食品行业 食品

解锁 PDF 文件:使用 JavaScript 和 Canvas 渲染 PDF 内容

yuanyxh

前端 js PDF

与Andrey Breslav谈论Kotlin 1.0的发布_Java_Sergio De Simone_InfoQ精选文章