为了协助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,咱们决议测验运用月报的方式,收拾展现最近一个月的 Kotlin 技能动态。

月报的首要内容包含:收拾展现最近一个月的最新技能动态,精选博客,精选视频,社区活动等

最新动态

Kotlin 1.9.0-RC 版别发布

What’s new in Kotlin 1.9.0-RC:Kotlin 1.9.0-RC 版别已发布,首要包含以下内容

  • 持续完善 Kotlin K2 编译器,添加了对 Kotlin/Native 后端的支撑
  • 在枚举类中引荐运用entries属性替代values()办法进行遍历
  • 1.7.20 版别引入的..<操作符成为稳定 API
  • 供给了一个用于根据名称获取正则表达式capture group的新 API
  • 供给了一个新的扩展函数createParentDirectories,可用于创立带有必要父目录的新文件,如果目录已存在,则不操作,否则创立目录
  • Kotlin 跨渠道 Gradle 插件支撑配置缓存
  • Google 的 Android 团队将供给自己的 Gradle 插件来支撑 Kotlin Multiplatform 中的 Android Target
  • Kotlin/Native 在拜访 object 单例的 const val 字段时将不再初始化 object

精选博客

Kotlin 中的函数式编程:探究 Monad 及其实际用例

Kotlin 是一门从一开端就支撑函数式编程的言语,而 Monad 是函数式编程中的一个重要概念,本文首要介绍了 Monad 是什么,在 Kotlin 函数式编程中如何运用它们,以及一些 Monad 的实际运用事例。

Monad 的概念看起来有些难以理解, 关于 Monad 到底是什么也能够参阅灰蓝天边大佬翻译的: Kotlin 版图解 Functor、Applicative 与 Monad

运用 ParallelGC 加快 Kotlin 编译速度,并减少内存占用

JDK 17: Using ParallelGC for the Kotlin process in Android Builds

咱们知道 Kotlin 编译过程中守护进程会占有很多的内存,这其间不可避免的会发生 GC,因而不同的废物收回战略也会影响 Kotlin 编译速度

本文分别运用 G1 废物收回器与并行废物收回器编译 nowinandroid 项目,对比数据如下:

  • Kotlin 编译任务耗时减少了22%
  • Kotlin 进程的废物收回器耗时减少了60%
  • Kotlin进程内存运用量减少了51%

当然不同项目的测验成果或许不同,数据仅供参阅。不过 Android 文档中的优化构建速度指南也引荐咱们运用并发废物收回器,因而感兴趣的同学也能够测验下,看看与本文的测验数据是否一致

Kotlin 编译器介绍

Crash Course on the Kotlin Compiler | K1 + K2 Frontends, Backends

本文介绍了 Kotlin 编译的整体流程,包含 K1 和 K2 两个编译器前端的异同特点,以及编译器前端产品是如何经过 JVM、JS、Native 和 WASM 四个编译器后端,来生成相应的方针产品的。

一起咱们知道 K2 编译器前端比起 k1 编译器前端在功能上有了很大的提升,本文也介绍了 K1 编译器前端功能的首要问题在于十分糟糕的代码局部性和内存局部性。一切的descriptors都是慵懒的,因而编译器总是在不同部分的代码之间跳转,从而破坏了 JIT 优化的数量。此外,解析的一切信息都存储在一个大的 Map(BindingContext)中,因而 CPU 不能充分缓存对象。

从Kotlin中return@forEach了个寂寞

本文探讨了 Kotlin forEach 中一个简单出错的细节,在 Kotlin 言语中,return@forEach 的效果类似于 continue 而不是 break。文章解释了其背后的原理,并供给了一个相应的解决方案。

(1..7).forEach {
    if (it == 3) {
        return@forEach // 相当于 continue 而不是 break
    }
    Log.d("xys", "Num: $it")
}

如何运用 Kotlin 技能栈构建一个播客网站

《Kotlin 炉边闲谈》是一个讨论 Kotlin 相关资讯的中文播客,播客网站现已上线:Kotlin 炉边闲谈官方网站

该网站运用 Kotlin 技能栈构建,包含前端展现,后端云函数接口,数据爬虫获取与播放数据图表分析等功能。现在前端部分仍然是由 js 结构构建,后续在 Kotlin/WASM 成熟后或许能够弥补这一缺憾。一起后续也将推出 Kotlin 跨渠道移动端 app,敬请期待。

这个例子是 Kotlin 端到端解决方案的一个很好的示范,概况可见:how I make a podcast website using serverless technology in 2023

Kotlin 技术月报 | 2023 年 6 月

Kotlin 动态化结构 Zipline

Dynamic Kotlin with Zipline

Zipline 是 Cash 公司开源的一款 Kotlin 动态化结构,借助这个结构,咱们能够运用 Kotlin 编写功能和事务逻辑,并将它们动态推送给用户,免去了对运用发版的依靠。

Zipline 基于 Kotlin 跨渠道构建,现在 1.0 版别是经过 Kotlin/Js 后端将 Kotlin 代码编译成 Js 代码,Js 代码发送到端上后经过 QuickJs 引擎执行。需求留意的是,编译成 Js 代码仅是 Zipline 内部的一个完成细节,因而在后续的迭代中能够方便地替换,在 Zipline 2.0 中将会切换到 WebAssembly。

Zipline 不只能够动态更新事务逻辑,经过与 Compose 跨渠道结构 Redwood 结合,也能够完成动态更新 UI,概况可见 Jake Wharton 大神在 KotlinConf 上的共享: Playing in the Treehouse with Redwood and Zipline

Redwood + Zipline = Treehouse = “支撑动态化的 Compose 跨渠道方案”。这套方案解决了 Kotlin UI 跨渠道及动态化两个关键问题,具有很大的幻想空间和运用潜力。

Kotlin 技术月报 | 2023 年 6 月

精选视频

Compose 跨渠道快速上手

Build Your First Compose Multiplatform App (KMM):Philipp Lackner 是一位在 YouTube 上十分活跃的讲师,首要共享 Kotlin 与 Android 相关的教程。在此视频中,他详细介绍了如何逐步创立一个 Compose 跨渠道项目,完成在 Android 和 iOS 渠道上共享 UI。

Kotlin 编译成 WebAssembly

Kotlin goes WebAssembly!:Kotlin 1.8.20 引入了新的编译后端:WebAssembly,Kotlin 代码经过编译成 WebAssembly ,能够运行在浏览器,Node.js 等环境中。本视频首要介绍了 Wasm 是什么,Kotlin Wasm 的现状与示例,以及其在未来的展望

Kotlin 技术月报 | 2023 年 6 月

Compose 烘托机制的秘密

Compose 烘托机制的秘密:这是由上海 Kotlin 用户组组织者带来的一场精彩共享。在本视频中,您将了解到 Jetpack Compose 是如何在屏幕上制作的,一起还会介绍 Skia 引擎与 OpenGL ES、Vulkan 等图形 API 之间的关系以及 Compose-Multiplatform 在各个渠道上的烘托方式。

Kotlin 技术月报 | 2023 年 6 月