编程语言AI Agent编译器CLI人工智能【免费下载链接】bamlThe programming language for agents项目地址https://gitcode.com/gh_mirrors/ba/baml点击查看免费下载本指南围绕 BAML 语言仓库中的compute::collatz 100k基准工作负载讲解其源码含义、在 speedtest 框架中的加载与执行机制以及如何用它对比 BAML 与 Python、TypeScript/Node 的纯计算性能。读完本文你将掌握该负载的 Collatz 序列步数算法、工作负载 Markdown 的解析规范以及从打包、校验到计时与比对的完整基准流程。工作负载本体compute::collatz 100kcompute::collatz 100k是 BAML 仓库内建性能基准speedtestcompute分类下的一个纯 CPU 计算工作负载完整定义位于 baml_language/tools/speedtest/workloads/compute/collatz-100k.md。它的任务是对 1 到 99999 之间的每个整数i计算 Collatz 序列的步数并累加最终输出总和。Collatz 猜想3n1 问题规定偶数n变为n/2奇数n变为3n1最终都会到达 1本负载统计的是从n到达 1 所需的变换次数。该负载刻意选择了大量「小而热」的循环、取模、分支与整数除法指令主要考察以下性能特征while 循环 条件分支while x ! 1与if x % 2 0的频繁分支预测与跳转开销取模与除法x % 2、x / 2等整数运算的吞吐函数调用开销主循环对collatz_steps的近 10 万次调用外层 for 循环100k 规模的长循环迭代器开销。三段等价实现BAML、Python、TypeScript该负载文件在## BAML、## Python、## Typescript三个代码块中提供了语义等价的实现这是 speedtest 进行跨语言对比的基础——三种语言必须计算同一数学问题、输出同一结果。BAML 实现来自 collatz-100k.mdfunction collatz_steps(n: int) - int { let steps 0; let x n; while x ! 1 { if x % 2 0 { x x / 2; } else { x 3 * x 1; }; steps 1; }; return steps; } function main() - int { let s 0; for (let i 1; i 100000; i 1) { s collatz_steps(i); }; return s; }注意 BAML 的语法细节while与if语句体以{ ... }包裹、块以;结尾let声明局部变量函数返回类型用- int标注。collatz_steps内x是可变局部变量不断在x / 2与3 * x 1之间切换直到收敛到 1。Python 实现collatz-100k.mddef collatz_steps(n): steps 0 x n while x ! 1: if x % 2 0: x x // 2 else: x 3 * x 1 steps 1 return steps s 0 for i in range(1, 100000): s collatz_steps(i) print(s)注意 Python 版本使用//整除对应 BAML 的/对int的整除语义最终通过print(s)输出结果。TypeScript 实现collatz-100k.mdfunction collatz(n){let s0,xn;while(x!1){xx%20?x/2:3*x1;s}return s} let s0;for(let i1;i100000;i)scollatz(i);console.log(s)压缩写法用三元表达式替代 if/elseconsole.log(s)输出结果。三个实现最终打印的是同一整数全部i的 Collatz 步数总和speedtest 正是依靠「输出一致」来交叉校验实现正确性。同分类对照speedtest 的 compute 负载家族collatz-100k.md位于workloads/compute/目录与之并列的还有大量同类纯计算负载共同覆盖循环、递归、排序、数组、类与泛型等计算形态例如compute/fib-iterative-100k.md迭代式斐波那契外层 10 万次、每次内层 50 步重点考察循环嵌套与多变量更新compute/fib32-recursive.md递归式斐波那契 fib(32)考察栈式函数递归调用开销compute/bubble-sort-5k.md5000 元素冒泡排序考察数组读写与双层循环compute/mixed-ops-5k.md单循环内混合整数运算、字符串拼接、数组 push 与类实例创建考察混合指令流compute/nested-loops-500x500.md、compute/if-else-dispatch-1m.md 等分别针对嵌套循环与分支派发。除compute外workloads 目录还按 classes、concurrency、interfaces、string 分类组织涵盖方法调用、并行求值、多态分派、字符串拆分等场景collatz-100k是其中「纯整数运算 条件分支」的代表。工作负载如何被加载Markdown 解析规范speedtest 不会手写每个负载的测试代码而是直接从这些 Markdown 文件解析出可执行源码。核心解析器位于 baml_language/tools/speedtest/src/speedtest/loader.pyparse_workload_md(path)的实现要点如下标题解析以^#\s(.)正则匹配首行标题如compute::collatz 100k得到负载的完整名称同时用path.parent.name记录其分类目录名compute代码块提取用正则^##\s([\w-])\s*\n\w*\n(.*?)MULTILINE | DOTALL逐段提取所有## 小节下的代码块小节名统一小写后作为键存入sections字典因此## BAML、## Python、## Typescript分别对应baml、python、typescript三个键可选 eval-setup 模板若存在## eval-setup小节先在专用 namespace 中exec执行它以定义模板变量随后用自定义_DDTemplatedelimiter 为$$避免与单$冲突对 BAML/Python/TypeScript 源码做safe_substitute支持$$var式参数化collatz-100k 未使用该特性完整性校验baml、python、js三段源码任一缺失即返回Noneload_workloads()会跳过解析失败的.md并向 stderr 打印WARN: skipping ... (parse failed)。解析完成后每个负载得到形如{name: compute::collatz 100k, category: compute, baml: ..., python: ..., js: ...}的字典按文件名排序进入负载列表。这套解析逻辑还被复用到了 Rust 侧的基准体系仓库根部的 baml_language/tools/speedtest/export_baml.py 会把每个负载的展开后BAML 源码导出为 JSON 数组{name, category, baml}供crates/baml_tests中的 CodSpeed 基准直接复用避免重复实现.md解析与$$模板逻辑——这也是 collatz-100k 这类工作负载「一份定义、多处复用」的关键机制。如何运行与计时runner 主循环speedtest 是仓库内独立打包的 Python 工具见 pyproject.toml提供speedtest命令入口CLI 由 baml_language/tools/speedtest/src/speedtest/cli.py 定义核心运行逻辑在 baml_language/tools/speedtest/src/speedtest/runner.py 的cmd_run中。对每个负载含 collatz-100k执行以下流程第一步打包 BAML 负载。将解析出的 BAML 源码写入临时.baml文件调用baml-cli pack main --file baml -o packed打包为独立二进制pack_baml见 runner.py。baml-cli默认取target/release/baml-cli可用--baml指定路径--build会先执行cargo build --release -p baml_pack_host -p baml_cli。第二步交叉校验输出。分别运行打包后的 BAML 二进制、python3 -S、node、bun可用--only-baml跳过解释器比较各实现最后一行 stdout任何不一致都会在结果表中标记(!)提示 mismatchrunner.py。collatz-100k 三段实现输出的 Collatz 步数总和必须完全一致。第三步自适应采样计时。time_command_adaptive采用 criterion 风格的策略runner.py先跑 3 次热身丢弃用于预热 OS 缓存与 CPU用热身中位数估算单次耗时计算填满--measurement-time默认 5 秒所需样本数把样本数钳制在[min_samples5, max_samples100]之间正式采集样本返回以中位数、标准差与全部样本构成的结果。也可用--runs N切换为固定 N 次采样time_command_fixed。第四步汇总、保存与对比。结果以 Markdown 表格输出列包含baml / python3 / baml÷py / node / baml÷node / bun / baml÷bun等由检测到的解释器决定比值列x由 fmt.py 的fmt_ratio计算≥10x 显示 1 位小数否则 2 位。随后数据保存到~/.speedtest/下的 run 记录并同步更新baselines/branch/latest--tag NAME可像 git tag 一样给本次基准打标签便于后续speedtest compare branchA branchB做基线对比。常见操作筛选、对比与剖析基于 cli.py 的入口定义围绕 collatz-100k 的典型用法如下命令基于仓库当前工具实现描述实际运行前需先cargo build --release --bin baml-cli或使用--build# 只跑 collatz 负载--filter 可重复、子串匹配 speedtest run --build --filter collatz # 只看 BAML 自身的性能跳过 python/node/bun speedtest run --filter collatz --only-baml # 固定跑 20 次而非自适应计时 speedtest run --filter collatz --runs 20 # 对比两个基线默认 base vs new隐藏低于 5% 的变化 speedtest compare --threshold 5 # 列出全部负载名 / 已保存的基线 speedtest list speedtest baselines此外--profile可对 BAML 侧采集 CPU profile它要求 PATH 中存在samply并使用--profile-baml指定的 profiling 模式二进制默认由 release 路径推导出target/profiling/baml-cli通过samply record --save-only为每个负载生成 JSON profile 文件并随结果保存runner.py。当需要定位 collatz 循环内部如取模、分支的耗时热点时这是最有用的手段。解读 collatz-100k 结果时的注意事项计时口径表格中的时间为进程级 wall-clock 中位数time.perf_counter包裹整个子进程执行±N%是相对标准差baml/py列数值大于 1 表示 BAML 更快、小于 1 表示更慢显著性判断compare子命令与 fmt.py 的sig_marker使用 ±2σ 组合噪声带判断差异是否显著低于噪声带的波动不应视为真实性能变化适用边界collatz-100k 只代表「密集整数运算 分支 函数调用」这一单一工作负载不能外推为 BAML 在字符串、并发、I/O 等场景的整体性能结论——如需全面画像应结合workloads/下 string、concurrency、interfaces 等分类的负载综合评估。小结compute::collatz 100k以 10 万次 Collatz 步数求和这一经典计算题覆盖了循环、取模、除法与分支等纯计算热点通过 collatz-100k.md 的「BAML / Python / TypeScript 三语言等价实现」规范配合 loader.py 的 Markdown 解析与 runner.py 的打包—校验—自适应采样—保存流程它既是一份可直接运行的性能基准也是理解 BAML 语言「可执行、可验证、可对比」设计思路的入门样本。相关代码均可从 speedtest 工具目录baml_language/tools/speedtest出发继续深入阅读。赞分享编程语言AI Agent编译器CLI人工智能【免费下载链接】bamlThe programming language for agents项目地址https://gitcode.com/gh_mirrors/ba/baml点击查看免费下载相关推荐Windows防撤回终极指南如何永久保留微信QQ撤回的消息Windows防撤回终极指南如何永久保留微信QQ撤回的消息 你是否曾经遇到过这样的情况同事在群里发了一条重要的通知然后迅速撤回朋友分享了一个有趣的链接编程语言AI Agent编译器CLI人工智能BAML 对象实例基准解读 compute::class instances 100k 负载与 speedtest 工具链BAML 对象实例基准解读 compute::class instances 100k 负载与 speedtest 工具链 导读 compute::class编程语言AI Agent编译器CLI人工智能BAML 接口默认方法性能剖析以 speedtest interfaces::default method 100k 工作负载为例BAML 接口默认方法性能剖析以 speedtest interfaces::default method 100k 工作负载为例 本文以 BAML 仓库b编程语言AI Agent编译器CLI人工智能上一篇家庭网络加速终极秘籍SmartDNS让你的网速提升5倍的完整指南下一篇spotDL音乐下载工具终极指南从Spotify到本地的完整解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
