iced 版本演进全解析:从 0.1.0-alpha 到 0.14.0 的 Changelog 深度解读
【免费下载链接】icedA cross-platform GUI library for Rust, inspired by Elm项目地址: https://gitcode.com/GitHub_Trending/ic/iced
本篇技术指南以 iced 仓库的 CHANGELOG.md 为骨架,系统梳理这个 Rust 跨平台 GUI 库从 2019 年首个 alpha 版本到 0.14.0 的完整演进脉络。你将看到渲染架构如何从单一 wgpu 后端走向「GPU + 软件渲染双引擎」,widget API 如何从有状态走向无状态与函数式,以及响应式渲染、热重载、时间旅行调试等前沿能力是如何一步步落地的。文中所有结论均与当前仓库源码、配置和测试一一对应,适合正在使用或计划评估 iced 的开发者作为版本选型与 API 迁移的参考手册。
一、Changelog 的格式约定与仓库位置
iced 的变更记录遵循 Keep a Changelog 规范与 语义化版本(Semantic Versioning)约定,文件位于仓库根目录 CHANGELOG.md。每个版本按Added/Changed/Fixed/Removed四个维度组织,并在末尾以Many thanks to...鸣谢贡献者。
值得注意的一个工程实践:0.10.0 版本引入了「工作流自动验证 CHANGELOG 始终与最新代码同步」的机制(#1970),这意味着本文件的每条记录都经过了 CI 校验,可以被视为可靠的 API 变更事实来源。另外,0.13.1 在Cargo.toml中补充了rust-version元数据(#2579),当前工作区声明的 MSRV 为 Rust 1.92(见 Cargo.toml)。
从版本节奏看,iced 的演进呈现出清晰的阶段特征:0.1.0 ~ 0.4.x 为架构奠基期,确立了订阅、Canvas、PaneGrid 等基础;0.5.0 ~ 0.9.0 为 API 现代化期,完成了无状态 widget 与一等主题的重构;0.10.0 ~ 0.12.x 为渲染与多窗口期,落地软件渲染与多窗口支持;0.13.0 ~ 0.14.0 为开发者体验期,推出 Program/Task 新 API、调试工具链与响应式渲染。
二、0.14.0(2025-12-07):响应式渲染与调试工具大爆发
0.14.0 是目前已发布版本中变更密度最高的一个,横跨渲染管线、调试工具、新控件、窗口设置与依赖升级五大方向。
2.1 渲染架构:响应式渲染与像素级质量
- 响应式渲染(Reactive rendering,#2662):渲染不再无条件全量刷新,而是由 widget 主动请求重绘,配合 #3084 的「同步 Task 执行与 RedrawRequested 一致性」保证帧调度稳定。
crispfeature(#2969):默认开启四边形像素吸附(pixel snapping),让边缘更锐利。在 Cargo.toml 中其定义为crisp = ["iced_core/crisp"],注释明确提示「默认启用像素吸附以获得清晰边缘(可能引起抖动)」——这是一个以质量换稳定性的可开关项。wgpu-barefeature(#2828):提供禁用 wgpu 默认后端的最小渲染配置,见 Cargo.toml 的wgpu-bare = ["iced_renderer/wgpu-bare", "iced_widget/wgpu"]。- 基础层合并(#3033):
graphics::layer::Stack开始做简单的图层合并,减少绘制提交次数。 - 并发图片解码与上传(#3092):图片管线支持并发解码与上传。
x11/wayland独立 feature(#2869):Linux 下窗口系统后端可单独裁剪,见 Cargo.toml。
在渲染细节上,本版本还修复了大量像素级问题:四边形顶点独立像素网格吸附(#2768)、iced_wgpu基元像素吸附一致性(#2962)、container::Style不尊重crispfeature(#3112)、OpenGL 后端纹理格式选择(#3016)以及 wgpu surface 丢失后的重配置(#3067)。
2.2 调试与测试工具链:comet、时间旅行与端到端测试
0.14.0 最大的亮点之一是把「调试」提升为一等公民:
comet调试器与devtools基础(#2879):仓库中对应 devtools/src/comet.rs,提供展示指标(#2881)与自定义性能指标(#2891)。- 时间旅行调试(Time travel debugging,#2910):对应 devtools/src/time_machine.rs,可在运行时回放消息历史。Cargo.toml 中通过
time-travelfeature 开启(["debug", "iced_devtools/time-travel"],标注为 very experimental)。 - 热重载(Hot reloading,#3000):由
hotfeature(["debug", "iced_debug/hot"])开启,对应 debug/src/lib.rs。 - 无头模式测试(#2698):
iced_wgpu支持无头渲染(#2857 提供并发基础)。 - 一等端到端测试(#3059):仓库中对应 test/(
iced_test,含 simulator.rs、emulator.rs)与 tester/(录制/回放测试,按 F12 触发)。
调试特性在 Cargo.toml 中统一收敛:debug开启原生调试指标并按 F12 呼出,time-travel与hot均在debug之上叠加。
2.3 新 widget 家族:table、grid、sensor、float、pin
本版本一次性引入五个新控件,源码均可直接在 widget/src/ 下找到:
| Widget | PR | 核心能力 | 源码位置 |
|---|---|---|---|
table | #3018 | 数据表格 | widget/src/table.rs |
grid | #2885 | 网格布局(另有grid!宏,#2904) | widget/src/grid.rs |
sensor | #2751 | 感知式监听控件(支持泛型 key,#2944) | widget/src/sensor.rs |
float | #2916 | 浮动元素(另含浮动图片 #2903) | widget/src/float.rs |
pin | #2673 | 固定定位元素 | widget/src/pin.rs |
同时既有控件得到大量增强:
column:新增wrap方法(#2884),并支持自定义换行行的垂直间距(#2852);row/column加入基元剔除(primitive culling,#2611)。scrollable:智能滚动条(#2922)、auto_scroll(#2973)、hidden方法(#2775)、滚动条禁用Status(#2585)、支持用Background而非Color设置样式(#3127)。tooltip:新增delay支持(#2960)。markdown:增量解析(#2776)、可定制渲染与图片支持(#2786)、引用块(#3005)、任务列表(#3022),并将Url解析替换为StringURI(#2992)。text_editor:LineEnding支持(#2759)、缩进/反缩进动作(#2901)、id方法(#2653)、Content::is_empty高效判空(#3117)。toggler:text_color样式(#2707)、Background与padding_ratio(#3129)、禁用状态携带当前开关值(#2908)。combo_box:push/into_options(#2684)、menu_height(#2699)、text_shaping(#2714)。mouse_area:双击事件(#2602)。image:scale支持(#2755);qr_code:total_size(#2606);progress_bar:垂直支持(#2748);PaneGrid:min_size(#2911);stack:push_under(#3010);checkbox:label方法(#2873);container:warning样式(#2912);overlay::menu:shadow样式字段(#3049)。
2.4 输入法、键盘与窗口能力
- 输入法支持(Input method,#2777):
input_method模块被公开(#2897),IME 预编辑窗口支持可变文字大小(#2790)与光标大小感知(#2918);window::Event新增Rescaled变体(#3001)。 - 键盘:
keyboard::Event::KeyPressed新增repeat字段(#2991);KeyReleased事件新增physical_key(#2608);macOS 专属快捷键⌘+Backspace/⌘+Delete(#2862)与Control修饰键(#2801);keyboard::Modifiers新增NONE常量(#3037);键盘订阅统一为单个listen订阅(#3135)。 - 窗口:
window::Settings新增maximized/fullscreen(#2627)、transparent(#2728)、closeable/minimizable(#2735)、vsync(#2837)字段;新增窗口任务:控制尺寸与 resize 增量(#2633)、拖拽调整大小(#2642)、monitor_size(#2754)、allow_automatic_tabbing(#2933);Windows 新增CornerPreference(#3128)。 - 系统主题反应(#3051):通过
linux-theme-detectionfeature(见 Cargo.toml)监听系统主题切换。
2.5 动画与时间
AnimationAPI(#2757):为应用层提供声明式动画能力,并支持 Wasm 目标(#2764),对应 core/src/animation.rs。time::repeat订阅(#2747):补充time::every之外的周期触发方式。
2.6 文本、主题与颜色
text::Shaping新增Auto策略(#3048),combo_box等控件可显式指定文本整形方式。Justified文本对齐(#2836);text::Renderertrait 加入fill_raw方法(#2958)。- 主题调色板基于 Oklch 色彩空间重构(#3028),
theme::Palette新增warning颜色(#2607)。 Color:实现FromStr/Display(#2937),from_rgb8/from_rgba8改为 const(#2749)。Padding:新增horizontal/vertical方法(#2655);Size新增ratio(#2861)与除法运算(#2767)。
2.7 架构与依赖升级
- Rust 2024 edition(#2809):全仓库升级到新 edition。
- wgpu 连升五级:22 → 23 → 24 → 26 → 27(#2510、#2663、#2832、#3019、#3097),当前工作区已进一步锁定 wgpu 29(见 Cargo.toml)。
- cosmic-text 0.13 → 0.14 → 0.15(#2834、#2880、#3098),当前为 0.19;
resvg升级到 0.45,image升级到 0.25。 widget::update改为按引用接收Event(#2781);Widget方法改为可变(mutable,#3038);Task::perform的约束从Fn放宽为FnOnce(#2827)。- 布局逻辑优先
Shrink而非Fill(#3045);Layout::children返回ExactSizeIterator(#2915)。 - 依赖清理:移除
once_cell(#2626)、winapi(#2760)、palette(#2839),用directories替换不再维护的directories-next(#2761),wasm-timer替换为wasmtimer(#2780)。
三、0.13.x:新一代应用 API 的诞生
3.1 0.13.0(2024-09-18):Program、Task 与 Daemon
0.13.0 是 API 层面的分水岭版本:
ProgramAPI(#2331):以 trait 形式定义程序结构,对应 program/src/lib.rs 中的Programtrait,包含关联类型State、Message、Theme、Renderer、Executor,以及boot、update、view、title、subscription、theme等方法,并支持通过presets预设状态。TaskAPI(#2463):取代旧的Command体系,update返回可组合、可中止的异步任务(可中止任务 #2496、abort_on_drop#2503),并实现Debug(#2955)。DaemonAPI 与 Shell Runtime 统一(#2469):无界面守护进程与有界面应用共享同一套运行时,对应 src/daemon.rs。- 新 widget:
rich_text与markdown(#2508,rich_text后续支持背景 #2516、下划线 #2526、删除线 #2528、链接 #2512)、stack(#2405)、hover(#2408)、row::Wrapping(#2539)。 - 主题体系成熟:函数式 widget 样式(#2312)、闭包式样式(#2326)、基于 class 的主题(#2350)、类型驱动的渲染器回退(#2351)、
auto-detect-themefeature(#2343)、Ferra 主题(#2329)。 - 文本与输入:
text::Wrapping支持(#2279)、text宏(#2338)、text_editor自定义按键绑定(#2522)、text_input的align_x(#2535)。 - 窗口与图像:
fetch_position命令(#2280)、resize_events订阅(#2505)、image/svg 旋转(#2334)与动态透明度(#2424)、image::Viewer的filter_method(#2324)与content_fit(#2330)。 - 运行时:
ICED_PRESENT_MODE环境变量选择wgpu::PresentMode(#2428)、window::Position::SpecificWith(#2435)、scroll 事务(#2401)、scrollable 内嵌滚动条(#2269)。
当前仓库的主入口 src/lib.rs 展示了这套新 API 的最终形态:iced::run(update, view)一行即可启动应用,配合Message枚举连接update与view——这正是 0.13.x 之后「improved view ergonomics」(#2504)的落地成果。
3.2 0.13.1(2024-09-19):补丁与兼容
0.13.1 主要补齐text_input::Id的From实现(#2582)、为Application与Daemon增加自定义Executor支持(#2580)、补充rust-version元数据(#2579),并修复触控板反向滚动(#2583)与text_editor文字颜色问题(#2586)。
四、0.12.x:多窗口、TextEditor 与主题大扩充
4.1 0.12.0(2024-02-15)
0.12.0 的核心是「多窗口」与「多行文本」:
- 多窗口支持(#1964):
window::Id贯穿事件订阅(#2456),配套run_with_handle(#2200)、fetch_maximized/fetch_minimized(#2189)、show_system_menu(#2243)、Windowsskip_taskbar(#2211)等命令。当前版本已演进为更强大的window::run(见 src/window.rs)。 TextEditorwidget(#2123):多行文本编辑器,源码在 widget/src/text_editor.rs,支持剪切(#2215)、Ctrl+A 全选(#2321)、自定义样式(#2159)。Shaderwidget(#2085):自定义着色器渲染,配套Transform基元(#2120),可在 examples/custom_shader/ 看到实际用法。- 阴影(#1882)与Oklab 色彩空间渐变(#2055)。
Themerwidget(#2209):运行时切换主题的演示控件,位于 widget/src/themer.rs。- Canvas 矢量文本(#2204)、
Frame::scale_nonuniform(#2070)、rounded_rectangle(#2491)。 - 主题大扩充:Dracula、Nord、Solarized、Gruvbox(#2170),以及 Catppuccin、Tokyo Night、Kanagawa、Moonfly、Nightfly、Oxocarbon(#2233)——这些主题在 examples/styling/ 中均有对应快照。
- 渲染后端切换:wgpu 默认启用 WebGPU 而非 WebGL(#2068);
Command支持Stream(#2150);主剪贴板支持(#2240)。
4.2 0.12.1(2024-02-22)
0.12.1 是补丁版本:为Column/Row增加extend/from_vec(#2264)、keyboard::Modifiers实现排序与哈希(#2270)、border::Radius的From<u16>/From<i32>(#2274),并修复 WebAssembly 平台问题(#2271)与 OpenGL 后端黑图(#2259)。
五、0.10.0(2023-07-28):渲染架构重构与软件渲染
0.10.0 是一次「渲染引擎」级别的重构:
- 文本整形、字体回退与
iced_wgpu大修(#1697):引入text::Shaping策略选择(#1822)、可配置LineHeight(#1828)、亚像素字形定位(#1921)。 - 软件渲染器与运行时渲染器回退(#1748):
tiny-skia软件渲染器正式落地,其增量渲染能力见 tiny_skia/;iced_wgpu提供运行时回退机制。 iced_tiny_skia增量渲染(#1811):只重绘损坏区域。ComboBoxwidget(#1954):下拉组合框,源码在 widget/src/combo_box.rs。PaneGrid拖拽拆分(#1856、#1865)与类型安全的Scrollable方向(#1878)。- 离屏渲染与截图(#1845)、背景渐变(#1846)、嵌套 overlay(#1719)、光标可用性(#1904)。
web-colorsfeature(#1888):启用 "sRGB linear" 混合以复现 Web 端色彩管理,对应 Cargo.toml。- Linux 端
application_id平台设置(#1963)。
六、0.5.0 ~ 0.9.0:无状态 widget 与一等主题
6.1 0.5.0(2022-11-10):API 现代化里程碑
0.5.0 是文档中明确标注四个「加粗标题」特性的大版本:
- 无状态 widget 稳定化(#1393):旧的有状态 widget API 被完全替换,配合
row!、column!等宏简化 view 逻辑。 - 一等主题(#1362):
Theme成为库的一等概念,重构全部样式基元。 - Widget 操作(#1399):可在 widget 树上遍历、查询与更新状态。
Lazywidget(#1400):仅在数据变化时惰性调用 view 逻辑,见 widget/src/lazy.rs。- 另有
Canvas线性渐变(#1448)、Canvas触摸支持(#1305)、iced_glow渲染 Image/Svg(#1485)。
6.2 0.6.0 ~ 0.9.0:增量增强
- 0.6.0(2022-12-07):
Primitive::Quad支持非均匀圆角(#1506)、查询当前聚焦 widget 的操作(#1526)、Svg样式支持(#1578)、单色三角形合并为一次 draw call(#1538)。 - 0.7.0(2023-01-14):widget 驱动动画(#1647)、
Scrollable多向滚动(#1550)、VerticalSlider(#1596)、chrome-trace性能分析(#1565)、请求用户注意/获取焦点/切换装饰的窗口动作(#1584、#1585、#1588);Application::should_exit被window::close动作取代(#1606)。 - 0.8.0(2023-02-18):通用像素单位(#1711)、
Groupoverlay(#1655)、Container的Id支持(#1695)、自定义Checkbox图标(#1707)、窗口置顶动作(#1587)。 - 0.9.0(2023-04-13):
MouseAreawidget(#1594,源码在 widget/src/mouse_area.rs)、subscription::channel(#1786)、Scrollable可配置宽度(#1749)、禁用态TextInput(#1744)、平台特定窗口设置(#1730)。
七、0.1.0 ~ 0.4.x:从 alpha 到奠基
7.1 0.1.0(2020-04-02):第一代能力全集
首个正式版本即确立了 iced 的核心 DNA:
- 事件订阅(#122):声明式监听外部异步事件,对应现在的 futures/src/subscription.rs。
- 自定义样式(#146):基于 trait 的样式定制。
Canvaswidget(#193):受 Web Canvas API 启发、由lyon驱动的 2D 绘图控件,见 widget/src/canvas.rs。PaneGridwidget(#224):可拆分、可拖拽的面板布局,见 widget/src/pane_grid.rs。Svgwidget(#111)、ProgressBarwidget(#141)。- 可配置 futures executor(#164):支持 tokio、async-std、wasm-bindgen-futures 或自定义 executor——这一设计延续至今,见 Cargo.toml 的
thread-pool/tokio/smolfeatures。 TextInput文本选择(#202)与iced_wgpu纹理图集(#154)。
7.2 0.1.1(2020-04-15)与 0.2.0(2020-11-26)
0.1.1 增加了Settings::with_flags、canvas::Path便捷绘图方法、Ctrl+Del支持等。0.2.0 则引入:
Canvas交互性(#325):trait 化鼠标/键盘交互。iced_graphics子 crate(#354):后端无关的图形抽象,供构建新渲染器使用。- OpenGL 渲染器(#354):基于
iced_graphics+glow+glutin,成为 wgpu 渲染器的替代。 - Overlay 支持(#444)与基于它的
PickListwidget(#444)、QRCodewidget(#622)。 - 更快的事件循环(#597):利用 Elm 架构的数据依赖与借用检查器,在迭代间保持 widget 树存活、避免无谓重建。
- 事件捕获(#614):运行时可判断 widget 是否已处理事件。
7.3 0.3.0(2021-03-31)与 0.4.x
- 0.3.0:触摸支持(#57、#650)、
image::Viewer(#319,源码在 widget/src/image/viewer.rs)、Tooltip(#465)、smol运行时(#699)、WGPU_BACKEND环境变量(#789)、Focused/Unfocused窗口事件(#701)。 - 0.4.0(2022-05-02):无状态 widget 初版(#1284,不再需要
button::State)、Componenttrait(#1131)、Responsivewidget(#1193)、实验性 WebGL 支持(#1096)、树莓派与旧设备兼容(#1160,支持 OpenGL 3.0+/ES 2.0+,并提供 aarch64/armv7 Docker 交叉编译镜像)、简化的 Renderer API(#1110,从每 widget 一个 trait 收敛为 3 个共享 trait)。 - 0.4.1 / 0.4.2:仅修复 README 版本号与
Padding类型导出问题。
7.4 0.1.0-beta 与 0.1.0-alpha
- 0.1.0-beta(2019-11-25):旧的
iced更名为iced_native,当前iced转为「开箱即用」的跨平台 GUI 库。 - 0.1.0-alpha(2019-09-05):首个 alpha 发布。
八、用源码验证 Changelog:feature、示例与测试
CHANGELOG 中的条目都能在当前仓库中找到对应实现,这里给出几条验证路径:
- Feature flags 对照表:0.14.0 的
crisp、wgpu-bare、x11/wayland、time-travel、hot、tester、linux-theme-detection等特性,逐一对应 Cargo.toml 中的 feature 定义与注释,可直接作为「哪个功能开关对应哪段能力」的权威索引。 - 新控件源码:
table、grid、sensor、float、pin、combo_box、text_editor、themer、mouse_area、pane_grid等均在 widget/src/ 下同名单文件。 - 调试工具链:
comet与时间旅行位于 devtools/src/,无头测试与端到端测试位于 test/ 与 tester/。 - 示例验证:
styling示例(examples/styling/)内置二十余种主题快照(Catppuccin、Dracula、Nord、Tokyo Night 等),custom_shader(examples/custom_shader/)演示Shaderwidget,todos示例(examples/todos/)自带端到端快照与测试。 - 布局测试:tests/layout.rs 持续守护 0.14.0 中
Shrink优先、换行row间距等布局语义。
九、结语:从 Changelog 看 iced 的演进规律
纵观 CHANGELOG.md 的 21 个版本节点,iced 的演进有两条清晰主线:一是渲染与文本基础能力的持续深挖——从单 wgpu 后端到 tiny-skia 软件渲染与运行时回退,再到响应式渲染、crisp 像素吸附和 Oklch 色彩空间,每一步都围绕「跨平台一致的高质量输出」;二是开发者体验的系统性升级——无状态 widget、一等主题、Program/Task API、comet 调试器、时间旅行与端到端测试,把「复杂 GUI 应用的可维护性」落到实处。
对于开发者而言,这份 Changelog 本身就是一份高质量迁移指南:升级到 0.14.0 时需关注Widget::update按引用收事件、布局中Shrink优先级调整、Rust 2024 edition 等破坏性变更;评估新项目时,则可直接参考 Cargo.toml 的 feature 矩阵按需裁剪渲染后端与平台支持,并结合 examples/ 下的真实用例快速上手。
【免费下载链接】icedA cross-platform GUI library for Rust, inspired by Elm项目地址: https://gitcode.com/GitHub_Trending/ic/iced
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考