当前位置: 首页 > article >正文

Kotlin 2.4.0 正式发布,快来看看有哪些更新

昨日JetBrains 发布了Kotlin 2.4.0-Beta1。如果你管的是 Android 工具链、Kotlin 多平台或者团队里已经开始碰context receivers、注解处理、.klib兼容问题这个版本已经值得单独开分支验证。先说结论这次最有分量的变化不是单个 API而是 Kotlin 在三个方向同时推进• 语言层开始定型context parameters和注解 use-site target 相关特性正式稳定• 平台层继续对齐JVM 向Java 26走Native 向Swift Package Manager靠• 编译器层继续统一不同平台对 inline 的处理开始收敛语言层终于开始定型如果你这两年一直在关注 Kotlin 语言演进最容易感知到的信号就是context parameters。它在2.4.0-Beta1里转为稳定只有context arguments和 callable references 还没完全毕业。对于 DSL、Compose 风格 API、依赖注入、上下文感知扩展这类场景context parameters会比过去那套 receiver 叠加方式更清楚。如果你们团队之前试过context receivers现在就该重新看一眼迁移策略了。官方这次还加了一个实验能力显式传入context arguments。这不是为了“语法更酷”而是为了解决重载分派里的歧义问题。你们如果已经遇到“只差 context 参数就开始二义性”的情况这个方向就很实用。官方文档给的示例就很直接同一个sendNotification()可以在调用点明确指定要用哪套上下文class EmailSender class SmsSender context(emailSender: EmailSender)funsendNotification(){println(Sent email notification)}context(smsSender: SmsSender)funsendNotification(){println(Sent SMS notification)}context(defaultEmailSender: EmailSender, defaultSmsSender: SmsSender)funnotifyUser(){sendNotification(emailSenderdefaultEmailSender)sendNotification(smsSenderdefaultSmsSender)}如果你想提前试这个能力官方给的编译参数是kotlin{compilerOptions{freeCompilerArgs.add(-Xexplicit-context-arguments)}}标准库和 JVM没有花活但很落地标准库这次最容易直接上手的是UInt.toBigInteger()和ULong.toBigInteger()。以前从无符号整数转BigInteger很多项目都得自己绕一层字符串或者写辅助函数。现在这块总算补齐了代码会更直接也更少见“我只是想转个类型结果工具函数比业务还长”的尴尬。另一个新增能力是“判断是否已排序”的一组 API比如.isSorted()、.isSortedBy()。这类 API 看起来小但它非常适合放进集合校验、缓存命中判断、排序前短路和测试断言里。你们项目里有没有那种“为了确认顺序先sorted()一遍再比较”的代码这次可以顺手清掉一批了。官方文档里给了两组很典型的示例一组是无符号整数直转BigInteger一组是直接判断集合是否已经有序funmain(){val unsignedLongLong.MAX_VALUE.toULong() 1uL val unsignedIntUInt.MAX_VALUE println(unsignedLong.toBigInteger())//9223372036854775808println(unsignedInt.toBigInteger())//4294967295}data class User(val name: String, val age: Int)funmain(){val numberslistOf(1,2,3,4)println(numbers.isSorted())//truevaluserslistOf(User(Alice,24), User(Bob,31), User(Charlie,29),)println(users.isSortedBy(User::age))//false}JVM 侧则有两个明确信号。第一Kotlin 编译器开始支持生成Java 26字节码第二annotations in metadata 默认开启。前者说明 Kotlin/JVM 继续跟着 Java 版本节奏跑后者则更偏工具生态意义。Kotlin/Native开始更认真地接近 iOS 生态这次我认为最有方向感的更新其实在 Kotlin/Native。Kotlin Multiplatform现在可以把Swift packages作为 iOS 依赖写进 Gradle 配置了。对了昨天还发布了Swift 杀进 AndroidGoogle 和 Apple 都要失眠了感觉他们谁也不服谁。这意味着 KMP 团队以后在接入 iOS 侧能力时不一定非得先绕进 CocoaPods。对很多 iOS 团队来说Swift Package Manager才是今天更自然的依赖管理方式。Kotlin 现在主动去对齐这条生态路径本质上是在降低 KMP 和原生 iOS 协作的摩擦。如果你们团队之前就卡在“共享代码能跑但 iOS 依赖接入和维护特别别扭”这次更新很值得单独验证。它不一定立刻让所有 KMP 项目变简单但它至少说明官方正在补真正影响落地的问题而不是只补演示型能力。官方文档里的 Gradle 配置示例是这样的KMP 工程已经可以直接声明 Swift packagekotlin{swiftPMDependencies{swiftPackage(urlurl(https://github.com/firebase/firebase-ios-sdk.git), versionfrom(12.11.0), productslistOf(product(FirebaseAI), product(FirebaseAnalytics),))}}如果你们现在还靠 CocoaPods 兜底这段配置至少说明 Kotlin 官方想把 iOS 依赖接入往 SwiftPM 这条路上带。编译器这次给了一个很强的信号2.4.0-Beta1还做了一件技术上更深、但长期更关键的事.klib编译时的 inline 行为开始更一致。过去 Kotlin/JVM 会在编译期把 inline 函数直接展开但 Kotlin/Native、JS、Wasm 在.klib阶段的处理并不一样。结果就是同样叫 inline不同平台的兼容性保证并不完全等价。现在 Kotlin 先把“同模块内联”默认打开作为统一行为的第一步。这件事看上去很底层但它影响的是库发布、二进制兼容、调试预期以及多平台团队对 inline 的理解成本。如果你维护的是跨平台基础库而不是单个 App 页面这类变化就不能等到正式版再看了。官方文档给的例子也很直观同模块里的 inline 函数会在.klib生成时先展开跨模块的则留到后面的平台二进制阶段。// Existing logging.klib library inline fun logDebug(message: String){println([DEBUG]$message)}// Currently compiled App module inline fun greetUser(name: String){println(Hello,$name!)}funmain(){logDebug(App started)// Not inlined: declaredinanother module greetUser(Alice)// Inlined: declaredinthe same module}编译成.klib之后官方给出的伪代码大概会变成这样funmain(){logDebug(App started)val tmp0Aliceprintln(Hello,$tmp0!)}写在最后你们团队会现在就开分支试2.4.0-Beta1还是等 RC 再跟评论区聊聊你们最关心的是context parameters、SwiftPM还是.klib内联。[#Kotlin](javascript: [#Android开发](javascript: [#KMP](javascript: [#JetBrains](javascript: [#JVM](javascript: [#SwiftPM](javascript:

相关文章:

Kotlin 2.4.0 正式发布,快来看看有哪些更新

昨日,JetBrains 发布了 Kotlin 2.4.0-Beta1。 如果你管的是 Android 工具链、Kotlin 多平台,或者团队里已经开始碰 context receivers、注解处理、.klib 兼容问题,这个版本已经值得单独开分支验证。 先说结论 这次最有分量的变化&#xff0…...

利用快马平台快速构建403 forbidden错误演示原型,直观理解HTTP权限状态

今天在调试一个前端项目时,遇到了403 forbidden错误,突然想到可以做个简单的演示原型来帮助团队新人理解这个常见的HTTP状态码。正好最近在用InsCode(快马)平台做各种小demo,发现它特别适合快速搭建这类教学演示项目。 理解403状态码的核心场…...

从生活沟通到AI对话:写好提示词,用好AI的魔法钥匙

一个顿悟:从复杂技术到简单提示最近与一位从事软件开发的朋友交流,他提出了一个颇具启发性的构想:将软件的售后客服工作交给AI来处理。起初,他的思路充满了技术复杂性——计划向AI提供核心代码库、训练一个专属的客服模型、进行深…...

RK3576开发板调试EC11编码器,一分钟就失灵?原来是XL9535芯片这个引脚没上拉

RK3576开发板EC11编码器调试:XL9535中断引脚上拉缺失引发的"一分钟失灵"之谜 刚拿到RK3576开发板时,我满心期待地接上了EC11旋转编码器进行测试——上电后旋转旋钮,系统响应灵敏,GPIO中断触发准确。但正当我准备庆祝调试…...

OpenClaw+SecGPT-14B联动方案:3类网络安全自动化场景实测

OpenClawSecGPT-14B联动方案:3类网络安全自动化场景实测 1. 为什么选择这个技术组合? 去年我在做安全研究时,经常需要重复处理三类任务:分析漏洞报告、检查日志异常、收集威胁情报。这些工作既需要专业判断,又包含大…...

AI-AGENT概念解析 - LLM部署文件

**问题:那一个下载到本地的大模型中,包括哪些文件,各有什么功能和作用,不同的大模型,包括的文件应该是不一样的。 大家会很自然地问到:下载到本地的大模型文件夹里到底有哪些文件?不同模型的文件…...

松下Panasonic伺服调试软件 适配MINAS-A/A3/A4/B/E/S及MDDA/MH...

松下Panasonic 伺服调试 软件 支持MINAS-A A3 A4 B E S 英文版 MDDA、MHDA、MSMA、MSDA、MDMA、可以修改参数、JOG点动调试、参数拷贝、复制等 松下 伺服 软件刚拿到台新拆箱的MHDA-MA3A1A伺服驱动器?或者翻出实验室积灰好几年的MSMA电机搭MDDA A1板子练手&#xff…...

Windows 11 上安装 MinGW-w64 并运行 LVGL SDL 模拟器

目前最推荐的方式是使用 MSYS2。它安装简单、包管理方便(pacman),而且能直接安装 SDL2,避免手动复制头文件和库的麻烦。 以下是完整、推荐的步骤(2026 年最新实践): 1. 安装 MSYS2&#xff08…...

实战利器:借助快马平台构建磁盘空间分析器,cmd命令深度应用

今天想和大家分享一个非常实用的工具开发经验——如何用cmd命令构建一个磁盘空间分析器。这个工具在我们日常系统维护和磁盘管理中特别有用,尤其是当C盘突然变红或者需要清理大文件的时候。 工具核心功能设计 这个磁盘空间分析器主要解决几个实际问题:…...

暑期实习面经记录(十四)(java)(4.2号补充下,闪闪改改)

本人最近面的被问的比较多的java八股先完成再完美1.如何设计一个扣减库存或者说秒杀抢券系统2.最近问这个问的比较多多线程->线程池->并发安全->场景2.锁->synconiezed,retranlock->可重入吗->怎么实现的2.1读写锁 怎么实现的;AQS底层&#xff1b…...

嵌入式AI开发实战:从MCU到模型部署全流程

1. 嵌入式AI开发实战:从入门到项目落地作为一名在嵌入式领域摸爬滚打多年的工程师,我深知AI技术给这个传统行业带来的变革。记得2018年第一次接触基于MCU的简单图像识别时,那种"原来嵌入式设备也能做AI"的震撼感至今难忘。如今&…...

OPCUA结构体数据处理全解析:C#如何高效读写ExtensionObject中的复杂数据

OPCUA结构体数据处理全解析:C#如何高效读写ExtensionObject中的复杂数据 在工业自动化与物联网系统中,OPCUA协议已成为设备间数据交换的事实标准。当面对复杂的自定义结构体数据时,ExtensionObject的处理往往成为开发者的痛点。本文将深入剖析…...

3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南

3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法备份微信聊天记录而烦恼吗?微…...

如何轻松获取网页媒体资源?猫抓开源工具让资源提取效率提升3倍

如何轻松获取网页媒体资源?猫抓开源工具让资源提取效率提升3倍 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在浏览网页时遇…...

珠海内有哪些做专精特新,创新型中小企业。权代理事务通过率高

在珠海,众多专精特新、创新型中小企业在发展过程中,知识产权代理事务变得尤为重要,而珠海飞拓知识产权代理事务凭借其独特优势,成为了高通过率的代表。企业痛点催生专业服务在专精特新、创新型中小企业培育与申报过程中&#xff0…...

QT 生成动态链接库

QT 生成动态链接库 前言 一、创建新的动态库项目(Qt Creator) 1 新建项目 二 、 自动生成的文件结构 1 项目会包含一个导出宏定义头文件,例如 Test001_global.h: 2 在需要导出的类或函数前加上 TEST001_EXPORT(我自己测试不加也行): 3 crtl+B 或者点击左下角锤子 进行编译…...

Python胶水代码变高性能引擎(Mojo原生编译实战手记)

第一章:Python胶水代码变高性能引擎(Mojo原生编译实战手记)Python 以其简洁语法和丰富生态成为数据科学与系统集成的“胶水语言”,但其解释执行机制常在数值计算、实时推理等场景遭遇性能瓶颈。Mojo 作为新兴的系统级编程语言&…...

Linux系统学习:38张思维导图构建核心知识体系

1. Linux学习思维导图概述作为一名从嵌入式开发转战云计算的老兵,我深知系统化学习Linux的重要性。最近整理硬盘时翻出一套珍藏多年的学习资料——38张涵盖Linux核心知识体系的思维导图,这些图纸曾帮助我顺利通过RHCE认证,也指导过团队新人快…...

FastAPI + TinyDB并发陷阱与实战:告别数据错乱的解决方案

核心摘要本文针对在FastAPI框架下使用TinyDB(JSON文件数据库)时遇到的并发写入数据冲突、错乱问题,深入浅出地解释了问题根源,并提供了从“文件锁”到“内存队列”再到“乐观锁”的三种由浅入深的实战解决方案,帮助你根…...

利用快马平台与openclaw切换模型功能,快速构建待办事项应用原型

最近在尝试快速构建一个待办事项应用的原型时,发现InsCode(快马)平台的AI代码生成功能特别适合这种场景。通过平台内置的openclaw切换模型功能,可以快速比较不同AI模型生成的代码风格差异,大大缩短了原型开发周期。下面分享下我的实践过程&am…...

避坑指南:在华为Atlas 200DK A2上部署YOLOv8-pose模型前,如何用ONNX Runtime在CPU/GPU上验证推理流程

边缘部署前的关键验证:YOLOv8-pose模型在CPU/GPU环境下的ONNX Runtime推理实战 在AI模型边缘部署的实践中,一个经常被忽视却至关重要的环节是本地验证。许多工程师在将模型部署到华为Atlas 200DK A2等边缘设备时,常常跳过这一步骤直接进入板端…...

OpenClaw家装设计:Qwen2.5-VL-7B根据户型图生成3D效果示意图

OpenClaw家装设计:Qwen2.5-VL-7B根据户型图生成3D效果示意图 1. 为什么选择OpenClaw做家装设计自动化 去年装修新房时,我花了大量时间在设计师和施工队之间来回沟通。每次修改设计方案都需要等待设计师重新出图,周期长、成本高。直到发现Op…...

OpenClaw个性化设置:Qwen3.5-9B模型参数调优实战

OpenClaw个性化设置:Qwen3.5-9B模型参数调优实战 1. 为什么需要调整模型参数? 上周我在用OpenClaw自动处理一批技术文档时,遇到了一个奇怪的现象:同样的任务指令,有时候AI能完美执行,有时候却会输出一堆无…...

深入解析Camera-IMU联合标定:从理论到实践

1. 为什么需要Camera-IMU联合标定? 在机器人定位和三维重建领域,相机和IMU(惯性测量单元)是最常用的传感器组合。相机能提供丰富的环境特征信息,但在快速运动或弱光环境下容易失效;IMU可以稳定输出运动数据…...

轻舟体重管理大模型:赋能减重全病程管理,构建智能体重健康生态

在“健康中国2030”战略深入推进的背景下,慢性病防控与全民体重管理已成为公共卫生体系的重要议题。随着肥胖及相关代谢性疾病发病率持续上升,传统的体重干预模式已难以满足全人群、全生命周期的健康管理需求。在此趋势下,基于人工智能技术的…...

CMake 导言

为什么选择 CMake 在掌握 Linux 基础后,我们知道一个项目通常由多个源文件组成。想要构建这个项目,就需要按照一定的规则对源文件进行编译和链接,而这些规则通常需要在 Makefile 中定义。 但随着项目体量增大,手写 Makefile 会变得…...

如何高效突破Cursor试用限制:全功能AI编程助手解锁指南

如何高效突破Cursor试用限制:全功能AI编程助手解锁指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…...

SEO的发展趋势会是什么样的

SEO的发展趋势会是什么样的 在互联网的快速发展中,搜索引擎优化(SEO)技术一直是网站排名和流量增长的关键。随着技术的不断进步,SEO的发展趋势也在不断演变。未来SEO的发展趋势会是什么样的呢?本文将从多个角度探讨这…...

BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南

BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否经常需要从B站视频中提取字幕内…...

Companion Object - 伴生对象 类比java中的什么?

这是一个非常经典且准确的对比问题。简单来说,Kotlin 中的 companion object(伴生对象)核心类比的是 Java 中的 static(静态)成员。在 Java 中,如果你想让一个成员(方法或变量)属于类…...