Dart 4.0 要彻底移除 dart:mirrors,Augmentations 应该要来了

发布时间:2026/10/9 7:59:55

Dart 4.0 要彻底移除 dart:mirrors,Augmentations 应该要来了 按照目前计划Dart 3.14 会在 2026 年 11 月正式把它标成deprecated然后 Dart 4.0 再完全移除也就是下个版本开始这个 Flutter 用不上的但是一直活跃在 Dart 的历史支持dart:mirrors就要完全退出历史舞台了。之前的dart:mirrors其实就是反射的作用程序运行起来以后可以拿到自己的MirrorSystem查相应的 library、class、method、field也可以通过InstanceMirror.invoke()这类 API 按名字调用方法比如服务端框架启动时扫描所有带路由 annotation 的方法再自动把它们注册到 HTTP Router序列化、对象映射、测试发现也可以在运行时枚举程序结构不需要提前生成代码但是在 Dart 2.0 开始 Web 编译器就不再支持dart:mirrors了而且 Flutter 很早前也不支持这个能力不然也不会至今都没有 内置 Json 序列化的原生能力。其实理解 mirrors 为什么和目前的 Dart 设计冲突用一个 HTTP Router 就很直观比如服务器启动时扫描所有 class找到带Route(/users)的方法然后运行时按方法名调用它这样对开发者来说确实很省事因为增加一个 handler 只需要写方法和 annotation但是对 AOT 编译器来说未来究竟会通过字符串访问哪些成员就很难确定只要编译器证明不了某个方法永远不会被反射访问那它就不能放心删除这个方法还可能需要保留类名、成员名、annotation、参数等 metadata这样就直接削弱了 tree shakingDart 的 AOT、Web 和 Wasm 编译都希望在编译期尽量建立完整的可达关系甚至 FFI 都要 tree shaking 但是 runtime reflection 会把一部分「谁会被调用」的决定留到了程序运行以后不是说做不了毕竟也有其他语言做到了只是说这么做的成本比较高所以编译器为了保证语义只能更加保守。毕竟只要 AOT 上了这一点要做好还是挺麻烦的比如 Kotlin 离开了 JVM生态后也是Kotlin/JVMKotlin/Native运行环境JVM直接编译成本地二进制编译方式JVM bytecode运行时由 JVM/JIT 执行LLVM AOT 为主不需要 JVM完整kotlin-reflect支持不支持 JVM 那套完整能力KClass.members支持不支持枚举 class 全部 methods/properties支持很有限Java Reflection支持没有 JVM自然没有::class/KClass支持支持但信息少很多函数/属性引用支持支持Native binary shrinking/AOT不是 JVM 传统强项是核心设计之一KClass本身是 Common APINative 也有所以你可以写obj::class、取simpleName、qualifiedName、做类型判断但是像KClass.members、nestedClasses、sealedSubclasses、supertypes这些真正开始“遍历一个类结构”的能力官方 API 目前直接标的是 JVM only。不过这次删除dart:mirrors其实也是 Dart 把坚持多年的工程方向正式固定下来动态发现尽量放在编译期或者代码生成阶段运行时执行已经显式化的调用关系现在官方自己的build_runner文档甚至已经直接把 Dart build system 作为 reflection 和 macros 的替代方案。目前来看这个对 Flutter 来说基本无感甚至可能还会是好事因为这说明 Augmentations 要来了反正之前也都不给用但是对于 Tooling 或者 Plugin 的开发说不准就得适配一次了比如一些纯 Dart Server、CLI、测试框架和内部工具尤其是直接依赖import dart:mirrors的项目。Dart SDK 自己现在就在迁移package:test_reflective_loader之前它也靠dart:mirrors做自动发现reflectiveTest方法现在官方也在转 CFE 在编译阶段直接把这些测试方法降成普通 constructor tear-off / method tear-off目的是保留“新增 test 方法直接dart test”的体验同时彻底移除 runtime mirrors而且不要求用户跑 build_runner。不过如果 Augmentations 能力能全面发布的话应该可以改善目前 generated code 和原声明之间的关系因为很多项目用dart:mirrors其实也不是真的需要“运行时随便反射一切”大家可能只是为了解决一些更具体的问题比如“我写了一个类能不能自动根据这个类的声明再补出一批重复代码”这也 Augmentations 能补掉相当一部分 mirrors 使用场景的原因比如最典型的 JSON 序列化以前用 mirrors 可以在运行时拿到User的字段列表看到name、age然后动态读取而 Augmentations 的思路完全反过来比如开发者写JsonSerializable() class User { final String name; final int age; }然后构建阶段 generator/analyzer 已经能看到User的结构于是生成的代码可以直接“补进”这个 classaugment class User { MapString, Object? toJson() { name: name, age: age, }; }也就是不需要运行时已经没有“检查 User 有哪些字段”这一步了name、age、toJson()全部可以在编译时变成正常 Dart 代码AOT 编译器可以理清楚关系该 tree-shake 什么也可以正常判断。这也是 Augmentations 目前设计的核心能力一个 declaration 可以分散到多个位置augmentation 可以给已有 class 增加成员、给函数补 body、增加 top-level declaration、给 enum 增加值等等。所以 11 月新版本 Flutter 和 Dart 要来了然后明年 4 版本也要来了。
延伸阅读

更多相关文章

2026/10/9 7:59:55

现代c++第2.3章 友元函数

先澄清一个容易混淆的点 C 里没有「static class」这个语法。 你在 C# 里写的 static class MathHelper,或者 Java 里的 static class Inner,在 C 里都不存在对应的关键字。C 的 static 放在不同位置,含义完全不同:写法位置含义cl…

2026/10/9 7:54:55

Cloudflare Workers 互调扣费陷阱与 Service Bindings 避坑指南

Cloudflare Workers 跑久了,都会遇到一个很现实的问题:我自己账号下写了两个 Worker,A 需要调 B,那么 A 去请求 B 的 URL,这个“互相请求”到底扣不扣额度里的次数?这个问题我一开始也没当回事,…

2026/10/9 10:06:02

Cocos Creator 3.x 3D拼图开发:核心机制与性能优化

老板把需求丢给我的时候,我正盯着满屏的“羊了个羊”竞品分析发愁。他说得没错,2D拼图市场是真的卷——换皮、联名、剧情化、番外篇,你能想到的姿势同行都试过了。但他下一句话才是重点:“你去做个3D版本的吧。”这句话听着像脑洞…

2026/10/8 10:03:18

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/8 10:03:20

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 0:04:27

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略

毕业论文初稿完成后首次进行AIGC疑似度自查的摸底与分流策略当数万字的学位论文初稿经历开题、实验、问卷与多轮文献梳理最终成形时,绝大多数研究生都会面临一道全新的形式审查关卡:AIGC 疑似度排查。在高校毕业审核流程中,盲审前的文本检测通…

2026/10/9 0:04:27

食堂节能改造源头工厂,商用厨房设备焕新方案广受好评

商用厨房作为餐饮经营、单位供餐的核心后勤阵地,其设备配置、动线规划与运维体系直接决定后厨作业效率、运营成本与合规性。从基础的灶具、制冷存储设备,到油烟净化、水处理等配套系统,每一个环节的合理性都与食品安全、能耗管控、消防安全挂…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑