找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2974

积分

0

好友

424

主题
发表于 13 小时前 | 查看: 0| 回复: 0

mmdr:纯 Rust 实现的超快速 Mermaid 图表渲染器

核心特点

mmdr 是一个纯 Rust 实现的 Mermaid 图表渲染工具,其性能相比官方的 mermaid-cli 快了 500-1000倍,并且完全无需浏览器依赖。

性能对比

图表类型 mmdr mermaid-cli 加速比
流程图 2.75ms 2,636ms 958倍
类图 3.19ms 2,381ms 746倍
状态图 2.45ms 2,647ms 1,080倍
时序图 2.47ms 2,444ms 990倍

为什么这么快?

  • mermaid-cli: 每次渲染都需要启动 Chromium 浏览器,这带来了 2-3 秒的固定启动开销。
  • mmdr: 采用纯 Rust 原生解析和渲染,直接输出 SVG/PNG,不依赖浏览器、Node.js 或 Puppeteer。

实际应用场景对比

  • 50 个图表的 CI/CD 流程:使用 mermaid-cli 渲染需要约 2 分钟,而 mmdr 可以在 1 秒内完成。
  • 实时编辑器预览:mermaid-cli 会导致明显卡顿,而 mmdr 能够实现即时响应。

安装方式

cargo install --path .            # 源码安装
brew install mmdr                # macOS/Linux
scoop install mmdr               # Windows
yay -S mmdr-bin                  # Arch Linux

快速使用

echo 'flowchart LR; A-->B-->C' | mmdr -e svg
mmdr -i diagram.mmd -o output.svg -e svg
mmdr -i README.md -o ./diagrams/ -e svg

支持的功能

  • 图表类型: 流程图、类图、状态图、时序图。
  • 节点形状: 矩形、圆角、菱形、六边形、圆柱等 12 种以上。
  • 边样式: 实线、虚线、粗线、带标签、多种箭头装饰。
  • 高级特性: 子图、嵌套、样式定制、主题配置。

技术实现

其内部是一个纯 Rust 实现的处理管道:解析 → 中间表示 → 布局(使用 dagre 算法)→ 渲染 SVG → 转换 PNG。

项目地址:https://github.com/1jehuang/mermaid-rs-renderer


Succinctly:基于简洁数据结构的快速 jq/yq 替代工具

一位开发者发布了用 Rust 编写的 Succinctly 项目,这是一个使用简洁数据结构(通过 rank/select 半索引技术)实现 jq 和 yq 功能的库和 CLI 工具。

主要特性

已实现功能:

  • 支持大多数 jq 和 yq 查询模式(reduce、limit、recurse、regex、路径函数等)。
  • JSON 解析速度约 880 MiB/s,YAML 解析速度约 250-400 MiB/s。
  • 支持基于位置的导航功能,可用于 IDE 集成。

尚未实现:

  • input/inputs(从标准输入流式处理多个 JSON 值)。
  • 超过内存大小的文件流式处理。
  • 部分高级 YAML 边缘情况。

性能对比

与 jq 对比(AMD Ryzen 9 7950X 平台):

  • 速度提升 1.7-1.8倍
  • 内存使用仅为 jq 的 7-30%(处理 100MB 文件仅用 104MB,而 jq 需要约 1GB)。

与 yq 对比(Apple M1 Max 平台):

  • 速度提升 7-10倍
  • 内存使用仅为 yq 的 9-16%(处理 100MB 文件仅用 573MB,而 yq 需要约 6GB)。

技术亮点

  • 硬件优化:针对 x86_64 平台使用 AVX2 SIMD、POPCNT、BMI2 指令集;针对 ARM 平台使用 NEON 指令集。
  • 简洁数据结构:通过在原始文本上创建轻量级索引,而非构建完整的 DOM 树,实现了 O(1) 复杂度的节点导航,从而将内存占用降低了 6-10 倍。
  • 支持 no_std 环境。

该项目已在 GitHub 和 Crates.io 上开源,开发者欢迎来自社区的反馈和 Bug 报告。

相关讨论:https://old.reddit.com/r/rust/comments/1qleizg/succinctly_a_fast_jqyq_alternative_built_on/


jbundle:用 Rust 打包 JVM 应用的命令行工具

项目背景

一位开发者用 Rust 开发了一个名为 jbundle 的工具,旨在解决 Java 生态系统中一个常见的痛点:如何在目标机器上分发 JVM 应用,而无需预先安装 Java 运行时

解决的问题

  • 传统的解决方案是使用 GraalVM native-image 进行 AOT 编译,但这存在诸多问题:
    • 反射配置非常复杂。
    • 经常遇到第三方库的兼容性问题。
    • 编译时间可能超过 10 分钟。
  • 因此,大多数开发者最终只能分发 JAR 文件,并附带一句“请安装 Java 21”的说明,用户体验不佳。

解决方案

jbundle 采用了截然不同的思路:

  • 它将 JAR 文件和一个通过 jlink 创建的精简版 JVM 运行时,打包成单个自解压的可执行文件
  • 无需进行 AOT 编译,无需配置反射,保持了 100% 的 JVM 兼容性。
  • 最终生成一个大小在 30-50 MB 的独立二进制文件。

为什么选择 Rust?

  • 速度快:整个打包过程仅需几秒钟。
  • 无运行时依赖:生成的是单个静态链接的二进制文件。
  • 跨平台:支持 Linux x64/ARM64、macOS x64/ARM64。

技术亮点

  • 采用多层二进制格式,并带有内容哈希缓存机制。
  • 提供类似 rustc 风格的结构化错误诊断信息。
  • 内部使用了 flate2 进行压缩、reqwest 下载 JDK、clap 处理命令行参数。
  • 整个项目大约 2500 行 Rust 代码。

项目状态

这个项目展示了 Rust 在构建高效、可靠的开发者工具方面的强大能力。更多类似的实用工具和开源项目讨论,欢迎访问云栈社区的开发者广场板块。

相关讨论:https://old.reddit.com/r/rust/comments/1qm43ge/jbundle_a_rust_cli_to_package_jvm_apps_into/




上一篇:Clawdbot部署指南:使用腾讯云Lighthouse快速搭建专属AI智能体
下一篇:C++拷贝构造与赋值运算符核心区别解析:从内存安全到面试要点
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-28 18:12 , Processed in 0.420220 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表