iced 版本演进全解析:从 0.1.0-alpha 到 0.14.0 的 Changelog 深度解读
2026/9/10 16:08:06 网站建设 项目流程

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-travelhot均在debug之上叠加。

2.3 新 widget 家族:table、grid、sensor、float、pin

本版本一次性引入五个新控件,源码均可直接在 widget/src/ 下找到:

WidgetPR核心能力源码位置
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_editorLineEnding支持(#2759)、缩进/反缩进动作(#2901)、id方法(#2653)、Content::is_empty高效判空(#3117)。
  • togglertext_color样式(#2707)、Backgroundpadding_ratio(#3129)、禁用状态携带当前开关值(#2908)。
  • combo_boxpush/into_options(#2684)、menu_height(#2699)、text_shaping(#2714)。
  • mouse_area:双击事件(#2602)。
  • imagescale支持(#2755);qr_codetotal_size(#2606);progress_bar:垂直支持(#2748);PaneGridmin_size(#2911);stackpush_under(#3010);checkboxlabel方法(#2873);containerwarning样式(#2912);overlay::menushadow样式字段(#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,包含关联类型StateMessageThemeRendererExecutor,以及bootupdateviewtitlesubscriptiontheme等方法,并支持通过presets预设状态。
  • TaskAPI(#2463):取代旧的Command体系,update返回可组合、可中止的异步任务(可中止任务 #2496、abort_on_drop#2503),并实现Debug(#2955)。
  • DaemonAPI 与 Shell Runtime 统一(#2469):无界面守护进程与有界面应用共享同一套运行时,对应 src/daemon.rs。
  • 新 widgetrich_textmarkdown(#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_inputalign_x(#2535)。
  • 窗口与图像fetch_position命令(#2280)、resize_events订阅(#2505)、image/svg 旋转(#2334)与动态透明度(#2424)、image::Viewerfilter_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枚举连接updateview——这正是 0.13.x 之后「improved view ergonomics」(#2504)的落地成果。

3.2 0.13.1(2024-09-19):补丁与兼容

0.13.1 主要补齐text_input::IdFrom实现(#2582)、为ApplicationDaemon增加自定义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::RadiusFrom<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_exitwindow::close动作取代(#1606)。
  • 0.8.0(2023-02-18):通用像素单位(#1711)、Groupoverlay(#1655)、ContainerId支持(#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_flagscanvas::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 中的条目都能在当前仓库中找到对应实现,这里给出几条验证路径:

  1. Feature flags 对照表:0.14.0 的crispwgpu-barex11/waylandtime-travelhottesterlinux-theme-detection等特性,逐一对应 Cargo.toml 中的 feature 定义与注释,可直接作为「哪个功能开关对应哪段能力」的权威索引。
  2. 新控件源码tablegridsensorfloatpincombo_boxtext_editorthemermouse_areapane_grid等均在 widget/src/ 下同名单文件。
  3. 调试工具链comet与时间旅行位于 devtools/src/,无头测试与端到端测试位于 test/ 与 tester/。
  4. 示例验证styling示例(examples/styling/)内置二十余种主题快照(Catppuccin、Dracula、Nord、Tokyo Night 等),custom_shader(examples/custom_shader/)演示Shaderwidget,todos示例(examples/todos/)自带端到端快照与测试。
  5. 布局测试: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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询