D2 v0.6.1 版本深度解析:Globs 懒求值重写与网格连线等关键能力升级

发布时间:2026/9/12 0:19:19

D2 v0.6.1 版本深度解析:Globs 懒求值重写与网格连线等关键能力升级 D2 v0.6.1 版本深度解析Globs 懒求值重写与网格连线等关键能力升级【免费下载链接】d2D2 is a modern diagram scripting language that turns text to diagrams.项目地址: https://gitcode.com/GitHub_Trending/d2/d2D2 是一款用文本描述即得图的现代图表脚本语言。v0.6.1 是 0.6 系列中承上启下的一个版本其核心工作是globs通配符批量样式规则机制的彻底重写——从只对声明位置之上的对象生效一次改为全图懒求值、与声明位置无关同时为网格grid图引入了顶层单元格之间的连线能力并落地了 UTF-16 文件自动识别、Markdown/箭头font-color等一批实用改进。读完本文你将掌握 globs 新语义的用法与边界、网格连线的编写方法以及 0.6.1 带来的全部特性、改进与 Bug 修复清单并可直接对照源码验证每一项行为。版本定位0.6 系列almost finalized的里程碑根据官方 changelogci/release/changelogs/v0.6.1.mdglobs 功能在该版本经历了一次重大重写官方用词是 almost finalized几乎定稿。同时官方明确预告0.6 系列还会再发布一个版本为 globs 增加 filters过滤器能力。因此 v0.6.1 可以理解为 globs 从可用走向稳定的关键一跃。Globs 重写从只向上生效一次到全图懒求值旧行为Before位置敏感必须放在最底部在 v0.6.1 之前globs 只会在声明位置之上的所有 shapes 和 connections 上求值一次。也就是说如果你想把图中所有对象都染成红色必须把 glob 规则放到文件最后一行否则它看不到后面声明的对象x y *.style.fill: red这种设计要求作者必须把全局样式规则集中放在文件末尾一旦新增对象忘了追加到 glob 之后样式就会失效心智负担较重。新行为Now声明位置无关全图生效v0.6.1 起同样的效果可以这样写glob 放在文件顶部同样作用于之后声明的所有对象*.style.fill: red x y无论 glob 声明在对象之前还是之后它都会作用于全图。这一变化的底层实现是globs 的懒求值lazily-evaluated对应 changelog Improvements 中的 [Globs are lazily-evaluated]。源码视角懒求值如何实现从源码结构看globs 的匹配与求值逻辑集中在 d2ir/pattern.gomultiGlob/_doubleGlob/_tripleGlob处理**递归 glob与***跨 board 递归 glob等模式的字段收集逻辑matchPattern实现具体的通配符匹配算法——*匹配任意可为空字符串匹配不区分大小写并优先匹配最早出现的位置以给后续通配符留出最大的后缀搜索空间递归 glob 遍历时会跳过classes、vars等定义类字段见skipDoubleGlobSubtree避免 glob 在定义生效前就改动其内容。而声明位置无关的行为由 d2ir/lazy_glob_scheduler_test.go 中的测试用例直接印证TestLazyGlobsCanBeginAfterOrdinaryFields*.style.fill: red夹在before与after之间两者最终都拿到style.fill redTestLazyGlobsCanBeginInsideNestedScopeglob 声明在嵌套作用域container: { ... }内部时只作用于该作用域内的before/after不会逃逸到外层或兄弟节点outside、sibling均不受影响可见 glob 的作用域边界是受控的TestLazyGlobsIntroducedByImportPreserveClasses通过...defs导入的 glob 同样参与懒求值且不会破坏被导入文件中的classes定义。也就是说v0.6.1 的 globs 具备三个新特性位置无关、作用域受控、可经 import 引入。如果你在升级后发现旧文件末尾的 glob 可以上移到更合理的位置或想利用 import 注入全局样式现在都是安全可行的。网格图顶层单元格之间支持简单连线v0.6.1 的另一个重磅能力是grid网格图可以在顶层单元格之间建立简单连接。这让网格图从纯排版容器进化为可表达流程关系的图表。实测用例simple_grid_edges.d2仓库在 e2etests/testdata/files/simple_grid_edges.d2 提供了一个完整的端到端用例展示了网格连线与 globs、classes 的协同用法。其核心骨架如下grid-rows: 4 grid-columns: 5 horizontal-gap: 20 vertical-gap: 5 *.class: [text; blue] 0,0: { label: npm i -g\nforge/cli style: { fill: #30304c ... } } ... 0,0 - 2,0 - 2,1 - 2,2 - 2,3 - 2,4: { class: arrow } 2,1 - 0,1: { class: arrow style.stroke: #cecece } 2,4 - 0,4: Yes { class: arrow style.font-size: 10 } 2,4 - 4,4: No { class: arrow style.font-size: 10 }要点单元格用行,列坐标寻址如0,0、2,1连线语法与普通 D2 一致来源 - 目标来源/目标直接写单元格坐标即可支持链式连线0,0 - 2,0 - 2,1 - ...、带标签的连线2,4 - 0,4: Yes以及按连线覆盖样式style.stroke、style.font-size文件顶部还使用*.class: [text; blue]这种 glob class 组合配合文件末尾classes:块定义arrow、note、empty等类验证了 0.6.1 两大利好新 globs 网格连线可以无缝协同。从源码结构看网格单元与最近单元格的解析逻辑位于 d2graph/grid_diagram.go如ClosestGridCell用于在嵌套结构中回溯最近的网格单元说明连线最终会被解析到对应的网格单元格对象上。注意 changelog 的描述是simple connections between top-level cells即顶层单元格之间的连接嵌套更深的结构不在本次范围内。新特性Featuresv0.6.1 共落地两项新特性UTF-16 文件自动检测与支持。此前 D2 源码文件只按 UTF-8 处理v0.6.1 起解析器d2parser/parse.go会自动识别 UTF-16 编码含 BOM无需手动转码。仓库中的 d2parser/utf16_gen.go 即用于生成 UTF-16 测试输入使用 LittleEndian BOM 编码器并在 d2parser/parse_test.go 中验证解析正确性。Windows 上使用记事本等工具保存的 UTF-16 文件现在可以直接编译。网格图顶层单元格之间支持简单连接见上一节对应 E2E 用例 e2etests/testdata/files/simple_grid_edges.d2。改进Improvementsv0.6.1 包含五项体验与能力改进改进项说明Globs 懒求值globs 不再依赖声明位置且作用域受控、可被 import 引入实现集中在 d2ir/pattern.goLaTeX 支持 MathJax 的 ASM 扩展LaTeX 块渲染能力增强相关实现可参考 d2svgimport/mathjax_text.gofont-color支持 Markdown之前font-color只作用于纯文本标签现在 Markdown 标签的文字颜色也可以被统一控制相关场景见 d2scenebuild/markdown.gofont-color支持箭头arrowheads箭头尖端的颜色现在可随font-color一并调整与标签颜色保持一致CLI 失败信息包含输入路径当 CLI 执行失败时错误信息会附带具体的输入文件路径便于在多文件或 CI 场景下快速定位问题相关入口见 d2cli/main.goBug 修复清单Bugfixesv0.6.1 修复了一批影响面较广的问题按功能域归类如下格式化d2 fmtd2 fmt现在会格式化所有作为参数传入的文件而不是只格式化第一个尚未格式化的文件贡献者 maxbrunet。如果你在 CI 中批量执行d2 fmt file1.d2 file2.d2 ...此版本起每个文件都会得到一致的格式化处理相关实现见 d2cli/fmt.go。修复变量替换variable substitution出现在字符串中间时d2 fmt格式化不正确的问题。Markdown 渲染修复混合元素块例如同时包含em和strong的文本中最后一个元素被裁剪的问题相关渲染链路见 d2scenebuild/markdown.go。编译器与解析对非 blockstring 的空标签如x: 之外的裸空值写法新增编译器错误提示避免静默吞掉非法输入。修复空嵌套网格empty nested grid导致的崩溃问题。修复某些 shape ID 无法与 dagre 布局器配合工作的问题影响使用 dagre 布局的用户见 d2plugin/plugin_dagre.go。布局与渲染修复某些情况下多个 constantnear对象相互重叠的问题near定位相关逻辑见 d2layouts/d2near/layout.go。修复 code shape代码块形状渲染时缺少 font-size 调整的问题。升级与使用建议Globs 语义变化v0.6.1 改变了 globs 的求值语义旧文件末尾的全局 glob 依然可用但你可以放心地把它们移动到文件顶部或更符合阅读顺序的位置同时注意嵌套作用域内的 glob 不会逃逸出当前作用域。预留的下一步官方明确 0.6 系列还会有一个版本为 globs 增加 filters过滤器能力这意味着当前版本是无过滤 globs的最终形态样式批量应用已可放心使用。网格连线的适用范围目前仅支持顶层单元格之间的简单连接更复杂的跨层连接需等待后续版本。v0.6.1 以 globs 重写和网格连线为核心配合 UTF-16 支持、Markdown/箭头配色与一批格式化、渲染修复是 0.6 系列向稳定形态收敛的关键版本。以上所有行为均可在 ci/release/changelogs/v0.6.1.md 及文中引用的源码、测试与 E2E 用例中得到验证。【免费下载链接】d2D2 is a modern diagram scripting language that turns text to diagrams.项目地址: https://gitcode.com/GitHub_Trending/d2/d2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/12 0:19:19

北京本土SEO/GEO优化公司推荐:服务商避坑参考

北京企业进入服务商深度筛选阶段,核心不是匹配一个看起来便宜的方案,而是找到懂行业、能提供完整流程、能够验证效果的本土SEO/GEO优化服务商。企业选型既要看技术能力,也要核验在地资源、垂直案例、合同保障、收费边界和长期交付方式。 北京…

2026/9/12 0:19:19

北京本土SEO/GEO优化公司哪家好:靠谱服务商选型指南

北京企业进入服务商深度筛选阶段,核心不是匹配一个看起来便宜的方案,而是找到懂行业、能提供完整流程、能够验证效果的本土SEO/GEO优化服务商。企业选型既要看技术能力,也要核验在地资源、垂直案例、合同保障、收费边界和长期交付方式。 北京…

2026/9/12 1:19:24

ML-Papers-of-the-Week 的 3 种用法

ML-Papers-of-the-Week 的 3 种用法 【免费下载链接】AI-Papers-of-the-Week 🔥Highlighting the top ML papers every week. 项目地址: https://gitcode.com/GitHub_Trending/ml/AI-Papers-of-the-Week 周五晚上实验跑完,想看看这周同行发了什么…

2026/9/12 1:19:24

模拟加法器设计实战:从运放虚短虚断到PCB布线调试全解析

很多搞硬件的老哥第一次碰运放加法器,脑子里冒出来的想法基本都是同一个:整两个反相放大器,把输出端并一块儿不就行了?我当年也这么干过,结果输出直接瘫掉,波形面目全非。后来才明白,模拟加法器…

2026/9/12 1:19:24

Guava之事件总线

package bright.redisson;import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe;public class EventBusTest {static class Listener {Subscribepublic void listen(String eventData) {System.out.println("接收到事件数据&#xf…

2026/9/12 1:19:24

27. 数据产品- BI - AI 应用2- AI 模型部署与企业落地

文章目录 前言一、AI概念与当前应用现状二、企业AI落地三大部署方式详解1. ️ 云厂商AI SaaS/API模式2. 本地部署开源大模型3. 混合架构(本地数据 云端AI推理) 三、三种架构全面对比分析四、企业AI落地方案该如何选择五、总结与思考 前言 系列文章完整串…

2026/9/12 1:19:24

Python+Django构建文旅数据可视化决策平台

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

2026/9/12 1:14:24

MATLAB在分布式发电配电网仿真中的应用实践

1. 项目背景与核心价值 分布式发电系统接入配电网是当前电力系统转型的重要方向。作为一名长期从事电力系统仿真的工程师,我发现在实际项目中,新能源并网对传统配电网的影响评估往往存在两大痛点:一是缺乏系统性的量化分析工具,二…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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