Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

流变志

对版本史的指引,而不是把它复读一遍。完整 changelog 见 CHANGELOG.md;本章只挑那些会牵动已经写好的符文师的改动。

现行的形态

其他章节描述的那些形态,就是现在 crates.io 上发布的形态:DsRune trait 的七道方法、六个 DsNode 变体、三种 on 形态(B、C、回调)、附魔、壁龛、match arm、name: Option<syn::Ident> 这样的属性形态。照本文档写的代码,如今即可编过。

按接口面拆分的迁移笔记

下面每条都假定你手上是上一种形态、需要迁到现行形态。

on EventKind 处理器

更早的 parser 里有一种树级 DsOn 节点,跟 widget / if / iter / niche / match 同位。trait 里有对应的 inscribe_on 方法。

现在两者都没有。on 子句折进它附着的部件,作为 on_handlers: &[DsOn] 落到 inscribe_widget。没有 DsNode::On 变体,也没有 inscribe_on 方法。

如果你之前实现过 inscribe_on:删掉,把读 on-handlers 的逻辑搬到 inscribe_widget 内的 on_handlers slice。

DsOn::get_body()

之前直接返回 &syn::Block。现在返回 Option<&syn::Block>,因为 on EventKind(cb)(回调形态)不携带 body。

如果你之前无条件读 body,改成处理 None 分支,通常是把 get_args() 末尾的元素当作回调表达式来读。

DsAttr::name

之前是非可选 syn::Ident。现在是 Option<syn::Ident>,因为位置属性(text("hello"))不带名字。

如果你直接读 attr.name,改成 match Option。匹配友好的版本是 name_str() -> Option<String>

壁龛与 match 节点

@name { … }match expr { … } 现已是 trait 的一部分。如果你的 DsRune 实现写得早于它们,编译器会要求 inscribe_nicheinscribe_match,trait 没有默认实现。

已删除

下面这些不再属于这门语言。在范例代码里看到,说明那段代码出自更早的版本。

已删除替代
DsRune::inscribe_on 方法inscribe_widget 上的 on_handlers: &[DsOn]
DsNode::On 变体折进部件
DsTreeToTokens traitDsRune codegen 接口
ds_traverse 模块xrune::ds_rune::decipher::decipher
crate 名 xwrapup / xrune_derive / xrune_parser / xrune_macrosxrune-sigil / xrune-nexus / xrune-incant / xrune

源码出处