KMP 2024 年总结,Kotlin 崛起的一年

2024 Google I/O 上正式官宣了 KMP(Kotlin Multiplatform)项目,它是 Google Workspace 团队的一项长期「投资」项目,由 JetBrains 开发维护和开源的项目,简单来说,JetBrains 主导,Google Workspace 投资并提供技术支持。

当然,Kotlin Multiplatform 和 Compose Multiplatform 虽然都是 JetBrains 维护的项目,它们经常被一起提及,但是他们其实是两个项目

  • Kotlin Multiplatform:提供了 Kotlin 的跨平台
  • Compose Multiplatform:Compose UI 的跨平台框架,提供 UI 跨平台能力

用 JB 官方的话说就是:借助 Compose Multiplatform,开发者可以将 Kotlin Multiplatform 的代码共享能力推向应用逻辑之外。

而在 2024 年 Google 和 JetBrains/Kotlin 为许多 Jetpack 库添加了 Kotlin 多平台支持, 例如:

  • Ktor 通过处理 REST 服务消耗来简化网络任务
  • kotlinx.serialization 将数据转换为 JSON 等格式
  • Okio 管理基本的文件 I/O
  • SKIE 适配了类型和协程在 iOS 上的使用
  • CocoaPods 集成支持使用 iOS 特定的依赖项
  • Room 从版本 2.7.0-alpha01 开始 支持 Android、PC和 iOS
  • Datastore 从版本 1.1.0 开始添加 KMP 支持
  • Lifecycle 和 ViewModel 从 2.8.7 开始支持 Android、PC 和 iOS
  • ····

回到 KMP 的迭代更新上,在今年年初,Kotlin/Wasm 发布 Alpha 版,支持将 Kotlin 代码编译为 WebAssembly, 同步 Compose Multiplatform也开始支持 Kotlin/Wasm

另外 Compose Multiplatform 在 2024 具有典型意义的更新有

  • 从 Compose Multiplatform 1.6.10 开始:

    • iOS 进入 Beta 阶段,适用于 ProMotion 120 Hz,增加原生风格控件适配

    • Web Alpha

    • Compose 编译器已合并到 Kotlin 代码库中,从而让项目支持 Kotlin 2.0 的迁移

  • 从 1.7.0 开始:

    • iOS 相关性能优化,触摸交互优化等:

    • 桌面支持 dragAndDropSourcedragAndDropTarget 的拖放功能:

另外一个重大更新就是 Kotlin 2.0 系列发布,引入了 K2 编译器,统一了 Kotlin 支持的所有平台,所有编译器后端现在都共享大量逻辑和统一的管道,例如开发 KMP 库分发的下一代格式,让 KMP 库的开发和 JVM 库开发一样简单。

还有随着 IntelliJ IDEA 2024.3 版本开始,K2 模式正式脱离 Beta 阶段,开始进入稳定版本阶段,K2 模式显著提高了 Kotlin 代码分析的稳定性、内存的消耗效率和 IDE 的整体性能,并支持 Kotlin 2.1 语言功能等。

K2 模式代表 IDE 中对 Kotlin 支持的几乎完全重写

K2 模式下除了编译性能的巨大提升之外,在 Kotlin 代码分析、补全和导航速度方面也取得了巨大进步:

其实这些年随着 Kotlin 的发展,其本身的性能表现已经相当不错,例如在 bddicken/languages 的语言基准测试比较的图形化展示上看,Kotlin 的整体性能表现就挺不错:

还有一个有意思的更新在于,Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE ,而在官方调整过的 Kotlin Multiplatform Roadmap 优先关键事项里,可以看到其中就包含了「独立的 Kotlin Multiplatform IDE,专为多平台开发量身定制的开发环境」的相关内容:

其实在此之前, Kotlin Multiplatform 官方就开始推荐使用 JetBrains Fleet 作为开发工具,而这次是更激进的采用基于 JetBrains Fleet 的独立 Kotlin Multiplatform IDE 的计划,其核心在于:

  • Fleet 里可以在 Kotlin 代码直接跳转到对应的 Swift 代码:
  • Fleet 里 rename 操作可以自动同时关联 Swift 和 Kotlin :
  • 在 Fleet 里 debug 断点可以同时作用 Swift 和 Kotlin :

最后就是 klibs.io 平台发布,Klibs.io 作为 KMP Package 的 Web 服务,支持查找选定平台(JVM、Android JVM、Wasm、JS、Kotlin/Native)的特定用途的 Kotlin 多平台库,而网站的数据为来自 GitHub 和 Maven Central 的数据编制索引,并使用 AI 生成的元数据来增强搜索结果,它的目的是通过提供 KMP 相关信息来更轻松地评估库:

满足条件的情况下 klibs.io 平台自动爬出统计

当然,既然是跨平台,肯定少不了 2024 主角之一的鸿蒙, 在 2024 Kotlin 中文开发者大会里,许多大厂都分享了 KMP 适配鸿蒙的事件,而这在过去一段时间已经引起了官方的注意,Kotlin 编译组的 lead 表示,他们也在研究如何在 KMP 中支持 Harmony0S

目前群组的讨论大概分成两部分:

  • 一方提议可以通过重新使用 Kotlin/JS 编译器,直接生成 ArkTS (而不是JS),这样做可以重新使用 Kotlin/JS 生态系统中已经拥有的 TypeScript 互操作性,另一个好处是将重新使用 HarmonyOS 工具链的所有其他部分,而通过 Kotlin/Native 会有两个运行时和两个独立的垃圾回收器,维护成本更高,同时也有大佬表示,在他们 Top 级别应用下 Kotlin/JS 转换下的性能还不错。
  • 另一方则认为 Kotlin/JS 整体性能较差,国内 Top 企业在鸿蒙适配中,经常使用 C API 而不是 TS API ,因为它可以带来更好的性能,这也是为什么 Kotlin/Native 在适配中被更多 Top 企业作为最终方案的理由,所以明显 Compose + Kotlin/Native 的路线更合适,比如 ArkTS(release) 和 Kotlin/Native(release) 之间 n 体问题的性能测试下,Kotlin/Native 性能甚至可以比 ArkTS 快 10 倍。

当然最终 KMP 官方是否会确认支持,或者说才去 Kotlin/JS 还是 Kotlin/Native 方案,具体还要等 2025 的最终讨论结果。

最后,到 2025 年,JetBrains 将专注于增强 Kotlin Multiplatform 生态系统,包括将 Compose Multiplatform for iOS 升级到稳定版、Kotlin-to-Swift 导出支持和前面提到的一体化 KMP IDE 的公开版本等。

希望 2025 年 KMP 和 Compose 能正式全平台落地,感谢这个百花齐放的时代~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/65855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot教程】搭建SpringBoot项目之编写pom.xml

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 👏今天毛毛张分享的内容主要是Maven 中 pom 文件🆕,涵盖基本概念、标签属性、配置等内容 文章目录 1.前言🥭2.项目基本…

【Java 学习】详讲代码块:控制流语句代码块、方法代码块、实例代码块(构造代码块)、静态代码块、同步代码块

💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持&#x…

【亚马逊云科技】基于Amazon EKS部署高可用的OceanBase的最佳实践

一、前言 随着企业业务的快速发展和数据量的不断增长,高性能、高可用的数据库解决方案成为了关键需求。OceanBase作为一款分布式关系型数据库,以其高扩展性、高可用性和高性能的特点,逐渐受到企业的广泛关注。然而,在复杂的分布式…

【工具】—— SpringBoot3.x整合swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的接口文档。Swagger简单说就是可以帮助生成接口说明文档,操作比较简单添加注解说明,可以自动生成格式化的文档。 项目环境 jdk17SpringBoot 3.4.0Sp…

从0入门自主空中机器人-2-1【无人机硬件框架】

关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…

基于视觉语言模型(VLM)的CogAgent

前言 CogAgent 是由清华大学与智谱AI联合推出的一个多模态大模型,专注于图形用户界面(GUI)的理解和导航。它代表了在视觉语言模型(VLM)领域的一项重要进展,特别是在GUI Agent能力方面。相较于传统的基于文…

win10、win11-鼠标右键还原、暂停更新

系统优化 win 10jihuo win 11jihuo鼠标右键还原暂停更新 update 2024.12.28win 10 jihuo winx,打开powershell管理员,输入以下命令,选择1并等待 irm https://get.activated.win | iex参考:https://www.bilibili.com/video/BV1TN411M72J/?sp…

C# 找出给定三角形的所有角度(Find all angles of a given triangle)

给定三角形在二维平面上所有三个顶点的坐标,任务是找到所有三个角度。 示例: 输入:A (0, 0), B (0, 1), C (1, 0) 输出:90, 45, 45 为了解决这个问题,我们使用下面的余弦定律。 c^2 a^2 …

【数据结构】(Python)差分数组。差分数组与树状数组结合

差分数组: 基于原数组构造的辅助数组。用于区间修改、单点查询。区间修改的时间复杂度O(1)。单点查询的时间复杂度O(n)。差分数组的元素:第一个元素等于原数组第一个元素,从第二个元素开始是原数组对应下标的元素与前一个元素的差&#xff0…

修复OpenHarmony系统相机应用横屏拍照按钮点不到的问题

适配OpenHarmony系统相机应用横屏UI, 相关pr: https://gitee.com/openharmony/applications_camera/pulls/233/files 适配效果 如何安装 编译好的hap提供在附件中 1.预置在源码,随固件安装 2.安装hap hdc shell "mount -o remount,rw /"…

10-Gin 文件上传 --[Gin 框架入门精讲与实战案例]

使用 Gin 框架处理文件上传是一个常见的任务,Gin 提供了简单而直观的方法来处理文件上传。下面将介绍如何用 Gin 实现文件上传功能。 1. 安装 Gin 如果你还没有安装 Gin,可以通过 Go 的包管理工具 go get 来安装: go get -u github.com/gi…

Promise实现原理解析,及实现方法。

Promise原理解析 Promise的介绍原理分析源码实现发布部分全部代码订阅部分基础代码简单发布订阅完整代码测试订阅能力链式调用的实现完整链式调用代码链式调用Promise完整功能代码 Promise的介绍 一,Promise的理解 在JavaScript中,Promise是一种用于处理…

http报头解析

http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…

【日常开发】Git Stash使用技巧

文章目录 引言一、git stash 基础命令(一)存储当前工作区的修改(二)查看存储列表 二、查看存储的内容(一)查看特定存储的详细内容(二)查看特定存储修改的文件列表 三、恢复存储的修改…

微服务保护-sentinel

为什么要有微服务保护? 微服务保护是为了避免微服务雪崩而出现的,每个微服务能处理的请求是有限的,如果一个微服务出现问题导致一个请求进入微服务的时间太久,就会导致大量去请求停滞在微服务内部,这样就会过分占用系统…

【Redis】Redis 典型应用 - 缓存 (cache)

目录 1. 什么是缓存 2. 使用 Redis 作为缓存 3. 缓存的更新策略 3.1 定期生成 3.2 实时生成 4. 缓存的淘汰策略 5. 缓存预热, 缓存穿透, 缓存雪崩 和 缓存击穿 关于缓存预热 (Cache preheating) 关于缓存穿透 (Cache penetration) 关于缓存雪崩 (Cache avalanche) 关…

关于easy-es对时间范围查询遇到的小bug

前言:在使用easy-es之前作为一个小白的我只有es原生查询的基础,在自己通过查看官方文档自学easy-es遇到了一个挫折,其他的还好语法和MybatisPlus差不多,正以为我觉得很快就能入手,在对时间范围的判断就给我当头一棒&am…

从0到机器视觉工程师(一):机器视觉工业相机总结

目录 相机的作用 工业相机 工业相机的优点 工业相机的种类 工业相机知名品牌 光源与打光 打光方式 亮暗场照明 亮暗场照明的应用 亮暗场照明的区别 前向光漫射照明 背光照明 背光照明的原理 背光照明的应用 同轴光照明 同轴光照明的应用 总结 相机的作用 相机…

HTML——53. 创建表单

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>创建表单</title></head><body><!--form标签用于创建一个表单&#xff0c;会将里面的内容一起发送服务器&#xff0c;其结构类似于表格--><!--表…

逐行讲解大模型流式输出 streamer 源码

目录 简介TextStreamer 基础流式输出TextIterateStreamer 迭代器流式输出本地代码模型加载并前端展示streamlit 输出显示gradio 输出显示 vllm 部署模型并前端展示streamlit 输出显示gradio 输出显示 备注 简介 本文详细讲解了大模型流式输出的源码实现&#xff0c;包括TextSt…