案例研究:一个自由的模型写出一个C++树哈舍. 参考甲骨文发现"三虫".

2026年8月19日3 次浏览来源:Dev.to阅读原文

结论一:一个自由模式在一次通过中起草了一个正在工作的 C++17 目录 hasher.

这份草案已经编好,运行,仍然是错误的。

针对标准系统工具的差分测试在工具触及出出产缓存之前发现了三个真正的bug.

一代是便宜的部分。

核查是可交付的。

需要一棵目录树的确定性散列 用于一个小型构建管道的缓存大小写无效:如果任何文件内容,名称,或符号链接目标更改,缓存密钥必须更改.

如果没有变化,关键必须保持相同的机器和检查。

手写工具可能是200行代码.

欢喜道是方便.

风险存在于命令、连锁和元数据泄露到散列中。

我把任务变成了实验 MonkeyCode的免费模型访问和免费服务器选项意味着模型运行在远程服务器上,而我则在笔记本电脑上不断验证.

披露: 这篇文章是作为MonkeyCode的产品推广的一部分而编写的.

计划:让模型写出第一个版本,然后用参考甲骨文证明或反驳.

合同目标不是“汇编工具”。

目标是使每一投入的参考执行相匹配的工具。

我写了三句合同: 同一棵树 任何机器上都一样 不同的内容,名称,或同名链接目标~不同散列.

文件元数据(mtime,inode)不得影响散列.

执行步骤1:迅速。

我给了模型合同,C++17标准, 和一个约束: 一个没有依赖性的文件 除了标准库。

步骤2:草案。

该模型在单个回复中返回了1个文件.

它在第一次尝试中编译。

这是大多数工作流程停止的确切时刻。

这个没有。

第3步:参考预言.

而非逐行审查密码线, 管道使一棵树正常化, 进入一个分类的记录流, 然后把流。

这是缓慢的。

这一点也毫不含糊。

这正是神谕应该是什么。

第四步 固定发电机 一个小脚本创建了随机树:嵌入式目录,空文件,不同目录中的重复名称,指向树内外的同义链接,以及内容相同的文件.

我创造了1000棵树。

结果: 三虫 第一次差分跑在1000棵树中的214棵上失败了.

失败分为三个根源。 # Symptom Root 导致 Fix 1 同一树, 另一种机器顺序上不同的散列是未指明的 Collection 路径, 排序, 然后 hash 2 重新定向的同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同名同 该工具在一台机器上具有决定性,在其它任何地方都是错误的。

修补是小的:三修后,工具与所有1000棵树的参考相匹配.

我运行了第二批500棵树 拥有更深的筑巢和更长的路径。

无相相相相.

时间:模型的草稿在一分钟内取出.

三个修补花了大约一个小时,包括了用绳子.

吊带还夹住两个虫子 在我的固定发电机。

神谕不在乎是谁写错了密码 经验教训汇编和运行是最低的栏目。

该型号瞬间通过,并三次违反实际合同.

参考文献将审查转化为衡量。

我没有通过阅读来发现虫子。

绳子指向 准确的失败输入, diff告诉我 哪一部分 合同破裂。

从核查中分离出一代使大门难以跳过。

模型远程运行;神谕在当地运行.

从"模型说它有用"到"它被合并",没有路径.

虫子们不是异地人 那是我在合同里写的三句 模型读得不够仔细 我也不会第一次通过 限制 不复制此工作流程 b

分享