WWW.YOUINFO.SITE
标签聚合 brain

/tag/brain

LinuxDo 最新话题 · 2026-06-09 16:18:06+08:00 · tech

Neuroscience News – 8 Jun 26 Brain Stimulation Offsets Sleep Deprivation Memory Loss - Neuroscience News A new study uses optogenetics to induce localized sleep in awake mice, reversing memory loss from sleep deprivation. Est. reading time: 6 minutes [!summary]+ 一项新研究成功复制了睡眠对清醒小鼠大脑局部目标区域的恢复作用。研究人员利用光遗传刺激诱导有节奏、交替 "开-关 "的神经发射模式,这种模式是非快速眼动睡眠(NREM)的基本标志,每次持续30分钟。 这种干预措施有效地抵消了睡眠剥夺引起的记忆缺陷,并降低了这些特定区域随后对睡眠的生理需求,证明了睡眠的恢复性益处是由特定的节律模式驱动的,而不是简单地减少神经元的整体发射。 https://www.nature.com/articles/s41593-026-02318-9 [!abstract]+ 在哺乳动物中,慢波睡眠的特点是神经元同步活动在开启期和关闭期之间交替进行。慢波活动(SWA)和同步性反映了睡眠需求,与大脑皮层回路中的突触强度相关,并促进突触下行选择和记忆巩固。在这里,我们评估了睡眠的这些核心益处是否可以在清醒时获得。我们利用光遗传学技术在小鼠清醒时局部诱导交替的开/关期。这导致小鼠在随后的睡眠过程中局部同侧的SWA和同步性降低,突触强度的标志物也降低了。此外,在剥夺睡眠期间双侧诱导感觉运动皮层的关闭期,可恢复记忆巩固。因此,在清醒时诱导开/关活动足以减少局部睡眠需求并实现睡眠的核心功能。 8 个帖子 - 7 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-08 08:07:23+08:00 · tech

Neuroscience News – 1 Jun 26 Neuropixels Opto Probe Rewrites Brain Data - Neuroscience News Researchers launch Neuropixels Opto, integrating electrophysiology and optogenetics on a single hair-thin probe. Est. reading time: 8 minutes https://www.nature.com/articles/s41592-026-03077-y [!quote]+ 高密度电生理学设备让神经科学家能够观察到大量神经元群的尖峰脉冲,而光遗传学则让他们能够驱动或抑制这些尖峰脉冲。我们的研究表明,单个设备就能将这两种功能结合起来,为读写活体大脑神经活动提供高分辨率的手段。 https://www.nature.com/articles/s41592-026-03076-z [!abstract]+ 高分辨率细胞外电生理技术是记录分布式神经元群动作电位的金标准,尤其在与光遗传学结合使用时,能够以高时间分辨率操控特定类型的细胞,其优势更为显著。我们将这些方法集成到原型Neuropixels Opto探针中,该探针结合了电子和光子电路。这些器件在一个70微米宽、1厘米长的探针杆上集成了960个电记录位点和两组共14个发光体,从而能够利用蓝光和红光进行空间可寻址的光遗传刺激。在小鼠皮层中,Neuropixels Opto探针实现了高质量的记录,并结合了空间可寻址的光遗传学技术,能够差异性地激活或抑制不同皮层深度的神经元。在小鼠纹状体和其他深层结构中,Neuropixels Opto探针实现了高效的光标记,能够同时识别两种类型的细胞。Neuropixels Opto探针有望成为记录、识别和操控神经元群的有效工具。 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-07 10:19:26+08:00 · tech

Earth.com Researchers identify brain cells dedicated to disappointment Researchers have identified brain cells that are dedicated to measuring disappointment when rewards fall short. [!quote]+ 细胞簇位于外侧哈文脑内,这是一个隐藏在大脑深处的古老小结构。 长期以来,研究人员一直知道这个区域在遇到不受欢迎的意外时–突然的惩罚或根本就没有到来的奖励–会变得炙热。因此,它被称为大脑的 “反奖赏中心”。 不过,该区域拥有多种类型的神经元,但没有人能够确定每种神经元的功能。 Sylwestrak 偶然发现了这些细胞,每当小鼠希望得到食物时,它就会捕捉到邻居发出的杂散信号。结果一无所获。 研究小组加入了一些真正糟糕的经历–吹一口气、短暂的憋闷或轻微的惊吓–并观察相同神经元的反应。 在所有这些过程中,失望细胞大多保持沉默。在同一区域,更广泛的神经元组合在每一次威胁面前都会亮起,这与之前的研究发现的方式相同。 这种挑剔是有目的的。铃木指出,错过的奖励和真正的威胁需要不同的反应。 最近的历史也证明了这一点。一连串的失败让小白鼠对下一个失败的反应变得迟钝,最终放弃了探究。 中脑的多巴胺神经元则与此相反,它们会在意外收获时攀升,在失意时下降。数十年的研究证实了这种不对称性。 改变奖励的大小提供了最明显的证据。被训练成期待喝一口正常水的小鼠有时会得到一口吝啬的水,而细胞会根据不足的比例而勃发。 让他们重新养成喝一口就能大快朵颐的习惯,而同样的微薄回报现在却让他们大失所望。 在这项工作之前,科学家们知道外侧哈伯脑带着失望信号,但无法将负责的细胞与它们的邻居区分开来。 现在,有一种遗传标记可以将它们区分开来,这是该地区首次对这一精确计算进行清晰的处理。 研究小组希望通过增减这些细胞,了解它们是如何引导健康的奖赏追求的,以及它们的失效是如何导致成瘾和抑郁等病症的。 PubMed Central (PMC) Dopamine, Updated: Reward Prediction Error and Beyond Dopamine neurons have been intensely studied for their roles in reinforcement learning. A dominant theory of how these neurons contribute to learning is through the encoding of a reward prediction error (RPE) signal. Recent advances in dopamine ... https://www.cell.com/current-biology/fulltext/S0960-9822(26)00467-7 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-05 11:12:48+08:00 · tech

Mellum2是一个120亿参数的模型,专为解决生产AI中的延迟、吞吐量和成本这三大最棘手的挑战而设计,架构与性能如下: 混合专家 (MoE) 设计: 模型共有 120 亿参数,但由于其采用 MoE 设计,每个 token 仅有 25 亿参数处于激活状态。此设计在降低计算成本的同时,可以对实时工作负载进行高吞吐量、低延迟推理。 专属侧重点:与很多现代模型不同,Mellum2 并非多模态模型, 它专门针对自然语言与代码数据进行训练。这种专门化可以确保模型在软件工程环境中表现出色,同时保持轻量和高速。 在 技术报告 中,详细介绍了模型在代码生成、科学、数学和推理基准测试中的表现。Mellum2 在与同规模模型的竞争中不落下风,同时将推理时间缩短至不到一半,这对生产级部署来说是一项决定性优势。 Mellum2 的主要使用场景: 路由和编排 AI 工作负载:使用 Mellum2 分析传入提示,帮助为每项任务选择合适的模型或工具。 构建低延迟 RAG 流水线:检索相关上下文、使用 Mellum2 进行总结,并即时生成回答。 为复杂工作流中的快速子智能体提供支持:将智能体流水线拆分为多个步骤,例如上下文收集、规划和验证。使用 Mellum2 执行快速、专门的任务,而不依赖于单个大模型。 实现私有、本地 AI 部署:在本地运行 Mellum2 或进行自托管,以确保代码和数据完全在您的掌控之中。 文章来源: JetBrains公众号 模型下载: Hugging Face 3 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-04 11:25:32+08:00 · tech

大家吼哇,Kotlin 2.4.0 千呼万唤始出来哇! 老规矩,本次更新内容可以在 JetBrains 官方的 What’s new in Kotlin 2.4.0 查阅, 我照例挑自己比较感兴趣的一些改动聊聊。 剧透 首先总结:这次转正的东西不少,新实验特性也挺有意思,尤其是 context parameters 稳定、集合字面量、标准库 UUID 稳定、以及 Kotlin/JS 导出体验继续改进。 注意!这次依旧是「我个人」的更新摘要,覆盖不了全部改动;如果你对某个方向特别感兴趣,记得继续深入官方文档喔。 文中示例如无特殊说明均来自或改写自官方日志。 语言特性 一如既往,先来看语言层面的更新。这次比较醒目的有两类:一类是之前几个实验特性终于转正了,另一类是又塞进来了一些新玩具。(嗯…一如既往。) 稳定特性 首先是几个稳定下来的特性: context parameters 属性上的 @all meta-target use-site annotation targets 的新默认规则 显式后备字段 context parameters 稳定这件事着实是特大喜事一件那!毕竟这东西从 context receivers 一路改到 context parameters , 中间变来变去也折腾了不少版本(也让我折腾了半天编译器插件),现在终于算是可以比较放心地在正式代码里试着用起来了。芜湖! 不过要注意, context parameters 的「显式 context arguments」和「callable references」还不在这次稳定范围里。也就是说,主干能力稳定了,但边边角角还在继续打磨。 @all 和 use-site annotation targets 的默认规则稳定也挺实用,尤其是你写一些跟 Java 框架互操作的代码时, 以前各种 @field: 、 @param: 、 @get: 多个重复的内容写起来还是挺烦的。 显式后备字段也稳定了,这个我在 2.3.0 的时候就提过: val city: StateFlow<String> field = MutableStateFlow("") fun updateCity(newCity: String) { city.value = newCity } 以前常见的 _city + city 两个属性组合,在一些场景下可以被简化掉了。好用,爱用。 显式 context arguments 书接上文。2.3.20 修改了 context parameters 的重载解析规则之后,如果两个重载只差 context 参数, 有些调用会变成歧义。现在 Kotlin 2.4.0 给出了一个新的实验性解法:显式传递 context argument。 比如官方给的例子大概是这样: class EmailSender class SmsSender context(emailSender: EmailSender) fun sendNotification() { println("Sent email notification") } context(smsSender: SmsSender) fun sendNotification() { println("Sent SMS notification") } context(defaultEmailSender: EmailSender, defaultSmsSender: SmsSender) fun notifyUser() { sendNotification(emailSender = defaultEmailSender) sendNotification(smsSender = defaultSmsSender) } 这样就可以在调用点明确告诉编译器:我要的就是这个 context 参数对应的重载。 我觉得这功能属于“你平时不一定用,但一旦遇到歧义就很救命”的东西。 尤其对 DSL 或者库作者来说,这至少比通过改函数名、改参数列表来绕开歧义要优雅不少。 语法上来讲,把这东西直接作为具名参数的一员也算符合 context parameters 中的这个 parameters 。 目前它还是 实验性的 ,需要添加编译器参数: kotlin { compilerOptions { freeCompilerArgs.add("-Xexplicit-context-arguments") } } 集合字面量 哦豁,集合字面量来了! 这下代码量又得降上个 30% 了。 现在可以用方括号 [] 来创建集合: fun main() { val shapes: MutableList<String> = ["triangle", "square", "circle"] println(shapes) // [triangle, square, circle] } 如果编译器没有足够的类型信息,它会默认推断为 List : fun main() { val fruit = ["apple", "banana", "cherry"] println(fruit) // [apple, banana, cherry] } 这东西乍一看很像“终于补上了别的语言早就有的语法糖”,但是!Kotlin 的设计里还塞了一个更有意思的点: 可以通过 operator fun of 给自定义类型提供字面量构造能力。 比如: class DoubleMatrix(vararg val rows: Row) { companion object { operator fun of(vararg rows: Row) = DoubleMatrix(*rows) } class Row(vararg val elements: Double) { companion object { operator fun of(vararg elements: Double) = Row(*elements) } } } 然后就可以这样写: fun main() { val identityMatrix: DoubleMatrix = [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0], ] } 这就有点意思了。对于矩阵、向量、DSL 配置、甚至一些查询条件构造来说,应该都能玩出花来。 能有多少花活儿就…任君想象了~ 不过它目前还是 实验性的 ,而且目前不能用来构造 Java 中定义的集合类型。 启用方式如下: kotlin { compilerOptions { freeCompilerArgs.add("-Xcollection-literals") } } 改进编译期常量 Kotlin 2.4.0 还对编译期常量做了一些实验性增强,包括: 支持无符号类型操作。 支持一些字符串标准库函数,比如 .lowercase() 、 .uppercase() 、 .trim() 。 支持计算枚举常量和 KCallable 的 .name 属性。 举个感觉上可能会更直观的例子: const val NAME = " Forte ".trim().uppercase() 当然,上面这个只是为了说明用途,具体哪些函数能在编译期求值,还是要以官方支持列表为准。 它们还引入了一个 IntrinsicConstEvaluation 注解,用来标记哪些函数可以被编译期求值。 有一说一,这些东西真到需要的时候是相当有用的,尤其是无符号类型的常量和字符串常量的函数。 这个特性目前也还是 实验性的 : kotlin { compilerOptions { freeCompilerArgs.add("-XIntrinsic-const-evaluation") } } 改进未使用返回值检查器 之前 2.3.0 里提过 -Xreturn-value-checker ,这次又往前推了一步: 新增了一个实验性的 returnsResultOf() contract。 它的主要作用是帮助检查器分清楚:一个高阶函数返回的结果,到底是不是来自传入的 lambda。 比如: import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract @OptIn(ExperimentalContracts::class) inline fun <T, R> T.customLet(block: (T) -> R): R { contract { returnsResultOf(block) } return block(this) } 这样检查器就可以更准确地判断下面这种情况: fun handleNullablePackageName(packageName: String?, builder: StringBuilder) { packageName?.customLet { builder.append(it) } // 这里返回了一个 String,但结果没被使用,检查器可以报告 warning packageName?.customLet { "kotlin.$it" } } 对于写 DSL 或者工具库的人来说,这个方向其实挺重要的。Kotlin 的表达式和作用域函数太好用了, 但也确实容易写出“以为自己返回了,实际上把结果丢了”的代码。 虽然这里面有一部分也算是使用者没有仔细了解 API 的锅,但是作为作者,多一些防备和提醒终归是好的。 启用参数如下: kotlin { compilerOptions { freeCompilerArgs.add("-Xallow-returns-result-of") } } @IntroducedAt 这个我觉得对库作者很有价值。 Kotlin 2.4.0 新增了实验性的 @IntroducedAt 注解,用来在给已发布 API 添加新的可选参数时,保留二进制兼容性。 过去你给一个函数加默认参数,老版本调用方可能就炸了。你要么手写隐藏的兼容 overload, 要么上 @JvmOverloads ,但它又可能生成一堆你不一定需要的重载。 现在可以这么写: @OptIn(ExperimentalVersionOverloading::class) fun Button( label: String = "", color: Color = DefaultColor, @IntroducedAt("1.1") borderColor: Color = DefaultBorderColor, @IntroducedAt("1.2") borderStyle: Style = DefaultBorderStyle, @IntroducedAt("1.2") borderWidth: Int = 1, onClick: () -> Unit ) { // Function body } 编译器会根据这些版本信息生成对应的隐藏 overload。 这对 Compose 风格 API 或者一些公共 DSL 来说应该蛮有用。 毕竟这种 API 往往会不断加参数,而且又不想每加一次参数就让用户老版本二进制出问题。 兼容性的老大难问题一下子简化了不少,妈妈再也不怕我为了检查 ABI 兼容性而掉光头发了! 标准库 标准库这次也挺有内容的,其中我比较关注的是 UUID 稳定、排序检查,以及 nullable map 的 fallback API。 UUID API 稳定 Kotlin 2.0.20 引入的 common UUID API 终于稳定啦! 之前陆陆续续加过 UUID 解析、格式转换、和 Java UUID 互转之类的能力。到了 2.4.0, 除了生成 v4 和 v7 UUID 的那几个函数仍然是实验性的以外,其他大部分 UUID API 都稳定了。 这意味着你终于可以在公共 API 里更放心地使用 kotlin.uuid.Uuid 了。 好耶,多平台项目里又少一个自己糊类型或者引第三方库的问题。 检查是否已排序 标准库新增了一组检查集合、数组、序列是否有序的扩展函数: .isSorted() .isSortedDescending() .isSortedWith(comparator) .isSortedBy(selector) .isSortedByDescending(selector) 例如: data class User(val name: String, val age: Int) fun main() { val numbers = listOf(1, 2, 3, 4) println(numbers.isSorted()) // true val users = listOf( User("Alice", 24), User("Bob", 31), User("Charlie", 29), ) println(users.isSortedBy(User::age)) // false } 一个很朴素,但是实用的 API。 无符号整数转 BigInteger Kotlin/JVM 现在给 UInt 和 ULong 加了 .toBigInteger() : fun main() { val unsignedLong = Long.MAX_VALUE.toULong() + 1uL val unsignedInt = UInt.MAX_VALUE println(unsignedLong.toBigInteger()) // 9223372036854775808 println(unsignedInt.toBigInteger()) // 4294967295 } Kotlin: 顺手的事儿。 nullable map 的 fallback API 2.4.0 给 value 可空的 Map 增加了几组实验性的 fallback 函数,用来区分: 这个 key 是不存在,还是存在但值就是 null 。 新增的函数主要有: .getOrElseIfNull(key, defaultValue) / .getOrPutIfNull(key, defaultValue) .getOrElseIfMissing(key, defaultValue) / .getOrPutIfMissing(key, defaultValue) 来看区别: @OptIn(ExperimentalStdlibApi::class) fun main() { val mapForNull = mutableMapOf<String, String?>("user" to null) val mapForMissing = mutableMapOf<String, String?>("user" to null) mapForNull.getOrPutIfNull("user") { "default_user" } println(mapForNull) // {user=default_user} mapForMissing.getOrPutIfMissing("user") { "default_user" } println(mapForMissing) // {user=null} } 这对缓存场景尤其有用。比如你缓存一个查询结果,而“查到了,但是结果为空”本身也是一个有效缓存, 那你就不希望下次又重新查一遍。 @OptIn(ExperimentalStdlibApi::class) fun getCachedResponseOrQuery(key: String): Response? = cache.getOrPutIfMissing(key) { service.query(key) } 以前这种语义经常要自己写 containsKey 判断,现在标准库终于给了更明确的 API。 NULL safe 语言一定要对 NULL 的处理精准而全面! Kotlin/JVM JVM 这边这次内容不算多,但是有两个点。 支持 Java 26 Kotlin 2.4.0 开始支持生成 Java 26 字节码。 我现在主要还是稳定在用 Java21/25,对于非 LTS 版本还是涉猎比较少。 metadata 中默认写入注解 Kotlin 2.2.0 的时候,Kotlin Metadata JVM library 支持读取 metadata 中的注解。 到了 2.4.0,这个支持默认开启了。 也就是说,编译器会把注解信息写入 Kotlin metadata,注解处理器和其他工具可以在 metadata 层面读取这些内容, 而不必依赖反射或者源代码。 这对框架、代码生成、静态分析工具来说应该很有用。 我猜未来很多 Kotlin 原生工具链都会逐渐更依赖 metadata,而不是硬往 Java 反射模型里塞。 Kotlin/Native Native 这次依旧是工程向、Apple 向、Swift 互操作向的更新。我对这块不算熟,所以主要挑几个我看得懂 (或者至少能假装看得懂) 的点。 CMS GC 默认启用 Kotlin/Native 的 concurrent mark and sweep garbage collector,也就是 CMS GC,现在默认启用了。 过去默认的 PMCS 在标记阶段需要暂停应用线程,而 CMS 可以让标记阶段和应用线程并发执行。 官方说这会显著改善 GC pause 和应用响应性,尤其对 Compose Multiplatform 这类 UI 应用有帮助。 如果遇到问题,也可以在 gradle.properties 里切回旧模式: kotlin.native.binary.gc=pmcs GC 也是一个需要长期演进的艰难课题哇。 Swift export 进入 Alpha Swift export 终于进入 Alpha 了,而且这次重点改善了并发支持。 现在 Kotlin 的 suspend 函数可以更自然地导出成 Swift 的 async : suspend fun hello(): String { delay(1000) return "Hello Swift! This is Kotlin." } Swift 侧: let msg = try await hello() 另外, kotlinx.coroutines.flow.Flow 也可以导出成 Swift 的 AsyncSequence 。 这点我觉得挺关键的,因为移动端跨平台里,异步流式数据几乎绕不开。 还记得上次对 .d.ts 的导出支持 suspend 吗?这次 swift 也享受到了。 Swift package import KMP 项目现在可以在 Gradle 配置里声明 Swift Package 作为 iOS app 的依赖: kotlin { swiftPMDependencies { swiftPackage( url = url("https://github.com/firebase/firebase-ios-sdk.git"), version = from("12.11.0"), products = listOf( product("FirebaseAI"), product("FirebaseAnalytics"), ) ) } } 如果你以前用 CocoaPods,官方也提供了迁移到 SwiftPM 的文档和工具支持。 这类更新就很明显了:KMP 在 iOS 生态里继续往“别那么别扭”的方向推进。 Apple 目标支持变化 Kotlin 2.4.0 提升了 Apple 目标的默认最低支持版本: iOS / tvOS 从 14.0 提升到 15.0 macOS 从 11.0 提升到 12.0 watchOS 从 7.0 提升到 8.0 如果你需要支持更低版本,可以通过编译器参数覆盖。 时代在前进,老设备在落泪。 我的 intel mac 还能战斗到什么时候? Kotlin/Wasm Wasm 这次我觉得有两个重点:增量编译默认启用,以及 WebAssembly Component Model 的实验性支持。 增量编译默认启用 Kotlin/Wasm 的增量编译从 2.1.0 开始引入,到 2.4.0 稳定并默认启用。 这意味着修改代码后,编译器只需要重编受影响的文件,构建速度会更友好一些。 如果遇到问题,可以关闭: kotlin.incremental.wasm=false K/Wasm 现在最大的问题之一就是开发体验还需要继续打磨,增量编译默认开肯定是好事。 支持 WebAssembly Component Model Kotlin/Wasm 现在实验性支持 WebAssembly Component Model。 简单来说,它定义了一套用标准接口和类型组合 Wasm 组件的方式,让 Wasm 不只是一个低层二进制格式, 而是更像一个可以跨语言复用和组合的组件系统。 这也意味着 Kotlin/Wasm 不只是“跑在浏览器里”,还可以更自然地探索 serverless、FaaS 之类的场景。 官方还给了一个 wasi:http 的示例项目。这个方向我挺期待,虽然目前对大多数业务项目来说还偏早。 有机会找个小项目体验一把。 Kotlin/JS Kotlin/JS 这次继续围绕 JavaScript / TypeScript 导出体验做改进。说实话,这几次更新下来, K/JS 的互操作正在一点点从“能用”往“像个正经 TS 生态公民”靠近。当然,能靠多近就要看 jb 有多努力了。 支持导出 value class 之前只有普通 Kotlin 类能导出到 JavaScript / TypeScript。 现在 Kotlin 2.4.0 支持导出 inline value class 了。 例如: @JsExport @JvmInline value class Email(val address: String) { init { require(address.contains("@")) { "Invalid email" } } } @JsExport class AuthService { suspend fun login(email: Email): String = TODO() } TS 侧会像普通类一样使用: import { AuthService, Email } from "..." const auth = new AuthService() console.log(await auth.login(new Email("[email protected]"))) value class 本来就是 Kotlin 里很适合做强类型包装的东西, 如果导出到 TS 时不能保留这种模型,就会很影响 API 设计。不赖! inline JS 支持 ES2015 Kotlin 2.4.0 的 js() 内联代码现在完整支持 ES2015 特性,比如: const / let class generator arrow function spread / rest operator template string 比如: fun spreadExample(): dynamic = js(""" const add = (a, b, c) => a + b + c; const nums = [1, 2, 3]; const sum = add(...nums); return { sum }; """) 这个对需要跟第三方 JS 库做细颗粒度互操作的人来说,还是挺舒服的。 毕竟 2026 年了,在内联 JS 里还不能好好写现代 JS 确实有点说不过去。 不过我本人在 js(“…”) 里写大段 JS 片段的情况还算比较少,所以之前也没怎么体会到问题所在。 导出 TypeScript 时保留型变 以前 Kotlin 泛型里的 in / out 信息导出到 TypeScript 时会丢掉。 现在它会被保留并映射到 TypeScript 的 variance annotations。 例如 Kotlin: interface Producer<out T> { fun produce(): T } interface Consumer<in T> { fun consume(item: T) } 生成的 .d.ts 会保留: export interface Producer<out T> { produce(): T; } export interface Consumer<in T> { consume(item: T): void; } 类型系统信息少丢一点,互操作就少一点坑。 改进接口导出 新的 @JsNoRuntime 注解可以让 Kotlin 接口导出成更普通的 TypeScript interface, 不再携带之前那些为了 Kotlin runtime 识别接口所需的 metadata。 例如: import kotlin.js.JsNoRuntime @JsNoRuntime expect interface DataProcessor { fun process(data: String): Int } 生成出来就是: export interface DataProcessor { process(data: string): void; } 当然代价也很明确:标记了 @JsNoRuntime 之后,就不能再对这个接口做 is / as 检查、 ::class 引用, 也不能作为 reified 类型参数传来传去。 这就是一个取舍:如果你想要更像 TypeScript 原生接口,那就别指望它还保留 Kotlin runtime 的那些能力。 另外,这次还放宽了 @JsExport 导出接口的限制,现在可以导出带嵌套类和命名伴生对象的接口了。 Gradle & Maven 构建工具这块简单看一下。什么,还有 Maven 的事儿? Gradle 方面,Kotlin 2.4.0 兼容 Gradle 7.6.3 到 9.5.0 ,最低支持的 Android Gradle Plugin 提升到了 8.5.2 。 另外,默认 module name 在各平台之间统一为 {group}:{project_name} ,减少跨平台命名不一致带来的冲突。 如果你想回到旧的 JVM module name,可以手动配置: kotlin { compilerOptions.moduleName(project.name) } Maven 方面,这次做了两个比较实用的改进: Kotlin Maven 插件可以自动对齐 Java compiler version 和 Kotlin JVM target。 支持 Maven Toolchains,用来统一控制 Kotlin 编译使用的 JDK。 虽然我个人还是选择 Gradle,但 Maven 用户看到这个应该会舒服不少。 编译器、插件和 Compose klib 编译时同模块 inline 行为更一致 Kotlin/Native、Kotlin/JS、Kotlin/Wasm 现在在生成 .klib 时,会默认对同模块内的 inline 函数进行 inline。 这一步是在向 JVM 的行为靠拢,让不同平台对 inline 的兼容性保证更一致。 如果遇到问题,可以用: -Xklib-ir-inliner=disabled 未来还计划继续推进跨模块 inline。 OS: 什么,原来之前不会 inline 的吗? kapt 可以排除 compile classpath 上的注解处理器 kapt 现在支持 includeCompileClasspath 配置,可以排除不必要的 annotation processor discovery。 Maven 里可以这样配: <properties> <kapt.include.compile.classpath>false</kapt.include.compile.classpath> </properties> Power-assert 新 runtime library Power-assert 这次引入了新的 runtime library。 新的 @PowerAssert 注解可以让断言函数更容易被编译器插件发现, CallExplanation 也能提供更详细的调用点信息。 如果你喜欢写测试,或者想给自己的断言库接入 Power-assert,这个方向值得关注。但是我用的不多,就不过多评价了。 Compose 编译器 Compose compiler 这次主要是让 internal declaration 的增量编译更一致。 不过副作用是:当 @Composable 函数使用来自其他文件的 internal 类型作为参数时,产物体积可能会变大。 官方说 R8 这类全程序优化工具可以消掉这部分额外开销。 此外,一些已经稳定或准备淘汰的 feature flag 也进入新的弃用阶段: StrongSkipping 、 IntrinsicRemember 相关 DSL 提升到 DeprecationLevel.ERROR ,计划 2.5.0 移除。 OptimizeNonSkippingGroups 、 PausableComposition 已弃用,计划 2.6.0 移除。 破坏性变更和弃用 这次有几个需要注意的兼容性点: Kotlin 2.4.0 不再支持 -language-version=1.9 ,也就是说 K1 编译器正式不再支持。(我的编译器插件终于不用再继续兼容旧编译器了 ) Kotlin Gradle Plugin 的 binary compatibility validation DSL 做了精简并弃用了一些旧配置。 Maven 插件里的 KotlinScriptMojo 脚本执行支持被移除了。 如果你的项目还卡在比较老的语言版本,或者构建脚本里有一堆祖传 Kotlin 配置,这次升级前最好扫一眼官方 compatibility guide。 其他 官方这次还更新了一堆文档,比如 KMP、SwiftPM 迁移、Compose Multiplatform、Ktor、KSP、Lincheck、Kotlin LSP 等内容。 如果你最近正好在折腾这些生态工具,不妨顺手去翻翻。 文档,多多益善! 尾声 这次 Kotlin 2.4.0 给我的感觉是:语言层面继续补语法糖和工具能力,多平台方向继续推进工程化和互操作体验。 context parameters 稳定和集合字面量我是已经期待了很久了,这次也是相当满足。 而那个用于兼容性的 @IntroducedAt 则是一个意外之喜,真是令我欢喜!这个要是能支持到 data class 上就更好了,抽空得狠狠体验一把了。 你呢?这次 2.4.0 里有没有哪个新玩意儿让你眼前一亮? 2 个帖子 - 2 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-02 15:14:23+08:00 · tech

如果你使用 JetBrains Toolbox 来更新、启动 IDEA 、 WebStorm 等工具,且同时使用了站内大佬的 ja-netfilter 激活配置,那么你应该会遇到: 偶尔打开 IDEA 等工具时会弹出激活失效,并且 https://jbls.ide-soft.com 无法再次激活,提示证书无效,但是另一个工具又没问题。 此时查看idea.vmoptions,ja-netfilter配置还在 那么问题在哪儿呢? 答案是 -javaagent: 开头的那个 - 可以看到diff已经给你答案了。通过 unicode 编码可以看到,这就不是一个 - ,所以 IDEA 就不会读取 ja-netfilter.jar ,这就是激活失败的真正元凶 那么如何解决呢?我不知道,就交给站内大佬研究研究吧(逃~ 3 个帖子 - 2 位参与者 阅读完整话题

IT之家 · 2026-06-02 13:42:36+08:00 · tech

IT之家 6 月 2 日消息,JetBrains 昨日(6 月 1 日)发布博文, 宣布开源 Mellum2 模型,这是面向软件工程系统的新机器学习模型。 官方表示相比原版 Mellum,它从代码补全模型升级为完整编码助手,并把上下文窗口从 8192 Token 扩到 131072 Token。开发者可在 Apache 2.0 许可证下部署基础版、指令版和思考版。 参数上,Mellum2 总规模为 12B,高于 Mellum 的 4B。该模型采用稀疏 Mixture-of-Experts(混合专家)框架,激活时参数量为 2.5B,在标准硬件上仍能保持较快计算。 能力方面,Mellum2 可生成和编辑代码、调用外部工具、执行多步骤 Agentic(智能体式)工作流、维持长对话。 JetBrains 将 Mellum2 定位在 AI 工作负载路由与编排、低延迟 RAG(检索增强生成)管线、复杂工作流中的快速 Sub-agent(子智能体),以及私有本地 AI 部署。 训练方面,团队称预训练阶段采用三阶段数据课程。数据混合逐步从多样化网页内容,转向精选代码和数学内容,从而让模型更贴近软件工程任务。 IT之家附上参考地址 Mellum2 Goes Open Source: A Fast Model for AI Workflows

cnBeta全文版 · 2026-06-02 13:05:33+08:00 · tech

JetBrains 近日宣布,将其面向软件工程系统的新一代机器学习模型 Mellum2 正式开源。这距离公司在 2025 年开源首个 Mellum 模型仅过去一年多时间,当时的 Mellum 是一款专注代码补全的小型模型,参数规模约为 40 亿。与之相比,Mellum2 的总参数量扩大到 120 亿, 但 JetBrains 强调,通过采用稀疏专家混合(Mixture-of-Experts,MoE)架构,每个 token 实际参与计算的仅为约 25 亿活跃参数,从而在标准硬件上依然能够保持较快推理速度。 与仅在编辑器中执行代码补全任务的“聚焦型” Mellum 不同,Mellum2 被定位为一款完整的智能编码助手。它既可以生成和编辑代码,也能调用外部工具,执行多步“Agentic”工作流,支持长对话,并具备显式推理能力。开发者可以在 Apache 2.0 许可下使用其基础版、指令调优版和“思考版”模型,在构建产品或内部工具时保持对数据的完全控制。 从规格上看,Mellum2 相比初代 Mellum 在多个关键指标上有明显变化:原始 Mellum 采用的是稠密参数设计,而 Mellum2 转向 MoE 架构;总参数量从 40 亿提升至 120 亿,但活跃参数从 40 亿降至 25 亿;上下文窗口从 8192 token 大幅提升到 131072 token,使其更适合处理长文档和复杂工程场景;两代模型均采用 Apache 2.0 开源许可证。 JetBrains 表示,Mellum2 特别适合用于路由与编排复杂的 AI 工作负载,构建低延迟的检索增强生成(RAG)管线,为大型系统中的子 Agent 提供快速推理支持,以及在本地或私有环境中部署 AI。为进一步提升模型在代码与数学等专业领域的表现,团队在预训练阶段采用了三阶段数据“课程”,逐步从多样的 Web 数据迁移到更精心筛选的代码和数学内容。 除 Mellum2 之外,JetBrains 还公布了一项产品线调整:公司将停止维护面向 Python 开发者的数据科学 IDE DataSpell。根据官方信息,DataSpell 已于 5 月 28 日正式“退役”,相关的数据科学功能将被整合进入 PyCharm 专业版。现有的 DataSpell 有效订阅会在 2026 年 9 月 1 日自动转换到 PyCharm Pro。 查看评论