做网站_接活自己建一个电商网站
2026/6/1 8:57:36 网站建设 项目流程
做网站_接活,自己建一个电商网站,ui设计好就业吗,优秀个人网站欣赏【CSDN 编者按】当“大模型能不能写代码”逐渐变成一个有些过时的问题#xff0c;新的焦点正在转向#xff1a;AI 是否已经具备参与大型工程的能力#xff1f;本文记录了一次极具挑战性的真实实践——一名几乎没有 Rust 经验的工程师#xff0c;在 Claude Code 的协助下新的焦点正在转向AI 是否已经具备参与大型工程的能力本文记录了一次极具挑战性的真实实践——一名几乎没有 Rust 经验的工程师在 Claude Code 的协助下用一个月时间完成了约 10 万行 JavaScript 代码向 Rust 的迁移。过程中既有令人惊叹的自动化效率也暴露出 AI 在工程抽象、系统性修改和“偷懒倾向”上的真实短板。原文链接https://blog.vjeux.com/2026/analysis/porting-100k-lines-from-typescript-to-rust-using-claude-code-in-a-month.html作者 | vjeux 翻译 | 郑丽媛出品 | CSDNIDCSDNnews我之前读到一篇文章标题大意是“我们的策略是结合 AI 和算法重写微软最大规模的代码库从 C 到 Rust)。我们的北极星目标是1 名工程师1 个月100 万行代码。”这句话一下子勾起了我的好奇心这事儿真的有那么容易吗正好我心里一直有个搁置已久的想法——做一个有竞争力的宝可梦对战 AI。我看了大量 WolfeyVGC 的视频也一直关注 NeurIPS 上的 PokéAgent 挑战。好在社区里已经有一个非常成熟的开源项目 Pokemon Showdown几乎完整实现了宝可梦对战的所有规则。但问题也很明显它是用 JavaScript 写的在训练循环中跑得非常慢。于是我的一个“业余项目”就这么诞生了能不能直接用 Claude把整个 Pokemon Showdown 从 JavaScript 迁移到 Rust先解决一个现实问题如何让Claude“放开手脚”让 AI 在你本地机器上执行任意代码本身就是一件危险的事所以 Claude Code 默认被关在各种“沙箱”里——但很不巧在这个项目里我偏偏需要 AI 拥有足够的操作权限。下面就讲讲我是如何开始了一场“逃离沙箱”的工程实践。1搞定 git push远程提交代码Claude 的运行沙箱会限制一些操作比如 ssh 访问。而要往 GitHub 提交代码ssh 权限是必不可少的——毕竟我还想在摸鱼的时候用手机随时查看 AI 的工作进度呢我发现了一个关键点我能在自己的终端里执行 git 命令但 Claude 没法在它的沙箱终端里操作。于是我让 Claude 写了一个 Node.js 脚本这个脚本会在本地端口启动一个 HTTP 服务器专门接收 URL 传过来的 git 命令并执行。只要我在终端里一直开着这个服务再让 Claude 在 Claude.md 里写清楚“怎么调这个接口”它就能间接完成 GitHub 推送。2解决 rustc 编译绕开杀毒软件我电脑上的杀毒软件有个 “毛病”遇到未知二进制文件运行时必须手动确认才能继续。而代码每次编译都会生成新的二进制文件我总不能一直守在电脑前点确认吧对此我的解决方案是搭建一个本地 Docker 容器所有代码的编译和运行都在容器里完成。这样一来就不会触发杀毒软件的拦截机制了。同样我让 Claude 把 Docker 的操作指令写进Claude.md问题直接迎刃而解。下一个难题来了怎么让 Claude Code 长时间自动运行全程不需要人工干预3让 Claude 连续跑几个小时不要老问“可以吗”Claude 非常“有礼貌”几乎做每件事都会问你一句 “Are you sure?”。我试过修改允许执行的命令列表但在我的环境里这个方法行不通。最后我想到了一个土办法写一个 AppleScript 脚本让它每隔几秒就在终端里自动按一次回车键。这样一来Claude 每次弹出的权限请求都会被自动 “同意”。到目前为止它还没想着要黑掉我的电脑……#!/bin/bashosascript -e \tell application System Events repeat delay 5 key code 36 end repeatend tell4防止 Claude 中途“摸鱼”的总结Claude 运行一段时间后总会停下来做总结我试过各种提示词让它别这么干甚至“威胁”它都没用。我还试过用“Ralph Wiggum 循环”的方法结果失败了——而且遇到这个问题的人不止我一个。最终奏效的方案是把我想让 Claude 执行的任务指令复制到剪贴板然后修改上面的自动回车脚本让它在按回车键之后再自动执行cmdv粘贴操作。这样一来如果 Claude 弹出问题回车键会自动确认如果它没弹出问题剪贴板里的指令就会被自动输入确保任务能持续推进。5如果程序自动更新那就抢占焦点电脑上的一些程序比如软件更新器会突然弹出窗口抢走终端的焦点。旦出现这种情况cmdv和回车键的指令就不会再发送到终端整个自动化流程就会卡住。为此我翻出了当年玩《我的世界》时用过的 MurGaa 自动点击器设置成每隔几秒就模拟一次鼠标左键点击。我把终端窗口和鼠标光标都放在屏幕边缘这样当中间弹出更新窗口时自动点击就能重新让终端获得焦点。除此之外这个自动点击器还能防止电脑休眠这样即使我晚上睡觉任务也能持续运行。6避不开的各种小 Bug长时间运行自动化任务稳定性是重中之重。整体来看这次迁移过程还算顺利但有几个特定的 Bug 会在夜间运行时出现导致程序中断。我已经反馈了这些问题希望官方能尽快找到根源并修复——毕竟遇到这些问题的人不止我一个这套自动化方案虽然不算最优解但至少能正常工作希望未来这类工具的流程能更顺畅一些开始宝可梦代码迁移1一开始的“One Shot”尝试失败得很彻底项目刚开始的时候我天真地给了 Claude 一个大 Prompt“请你把整个代码库从 JavaScript 逐行迁移到 Rust。”一开始效果看起来惊艳极了它生成了几千行能直接编译通过的 Rust 代码。但好景不长我很快发现这些代码只是“表面工程”——Claude 为了省事耍了很多小聪明。比如它在两个不同的文件里为“宝可梦招式”定义了两种完全不同的数据结构虽然单独编译这两个文件都能通过但整合到一起就彻底没法用了。而且它对函数的迁移非常敷衍只要是稍微复杂一点的逻辑都不会真正迁移而是用“简化版”代码糊弄过去。当时我还没意识到问题的严重性一心想着让自动化循环跑起来迁移更多的代码。结果就是整个代码库里到处都是错误的抽象设计而且 Claude 还会不断添加硬编码逻辑去“修复”那些本不该出现的问题——照这个趋势下去项目迟早要烂尾。2正确方法先给 Claude “画好路”吃了亏之后我才明白必须给 Claude 制定明确的规则才能让迁移工作走上正轨。冷静下来思考后我确定了核心目标JavaScript 代码库里的每一个文件、每一个方法都必须在 Rust 代码库里有一一对应的实现。于是我让 Claude 写了一个脚本这个脚本会遍历 JavaScript 代码库的所有文件和方法然后在 Rust 代码对应的位置添加包含 JavaScript 源代码的注释。这个脚本的作用至关重要因为就算我反复强调要复制源代码Claude 还是会把 JavaScript 代码翻译得 “面目全非”。有了这个确定性的脚本就能大大提高迁移结果的准确性。3拆分代码解决上下文窗口限制问题新的挑战很快出现原始的 JavaScript 文件动辄几千行加上源代码注释之后Rust 文件的行数直接突破 1 万行。这直接触发了 Claude 的上下文窗口限制它甚至会直接拒绝打开这些超大文件。无奈之下Claude 只能把文件拆分成小块来处理但这样做的精准度会大打折扣。更糟的是上下文的膨胀会导致 Claude 频繁进行内容压缩进一步影响迁移质量。为了彻底解决这个问题我决定在 Rust 代码库里把每一个方法都拆分成单独的文件。这个改动立竿见影迁移的效果得到了质的提升。其实从效率最大化的角度出发我应该把 JavaScript 代码库也做同样的拆分但我担心这样会意外改变原代码的逻辑所以最终放弃了这个想法。4迁移与清理的循环迭代整个迁移过程就是在“批量迁移”和“代码清理”两个阶段之间反复循环。我会先给 Claude 分配一个大任务让自动化循环跑一整天然后我再花时间清理那些 Claude 跑偏的地方。在代码清理阶段我还是会用 Claude但会给它更具体的指令。比如我发现如果不加约束Claude 会把宝可梦招式、特性、道具的逻辑硬编码到代码的各个角落。于是我会先手动找出这些硬编码的部分再让 Claude 把它们迁移到正确的位置。这就是工程师经验派上用场的地方了——我多年的软件开发经验能帮我快速定位问题所在以及解决问题的方向。好在我不需要自己动手清理代码只要指令给得明确Claude 就能把这些活儿干得漂漂亮亮。代码整合与测试1先完成全量构建再进行测试在很长的一段时间里我只确保生成的 Rust 代码能编译通过却从来没有把所有模块整合到一起验证它们是否真的能正常工作。Claude 其实更倾向于传统的软件开发策略先实现所有模块的简单版本然后再逐步迭代完善。但这个思路并不适合我们的场景——毕竟 Pokemon Showdown 这个项目已经迭代了 10 年我们没必要再重走一遍前人的弯路而且这种方式也很难保证最终的逻辑和原项目一致。对我们来说更高效的策略是先完成全量代码的迁移等到所有模块都就位之后再进行一次性整合。这个策略是我从之前参与的 Skip 编译器项目中学到的——那个项目花了好几年时间单独构建了所有的基础模块一直都没有实际可用的成果但在最后一个月里当所有模块整合到一起时整个编译器突然就正常工作了当时给我的震撼至今记忆犹新。2端到端测试验证一致性当大部分代码都完成一对一迁移后我终于开始了整合工作。幸运的是JavaScript 和 Rust 两个版本的代码都可以独立运行和调试而且它们的输入输出格式非常简单、标准化输入是宝可梦的列表包含招式、道具、性格、个体值 / 努力值等配置输出是每一步对战的行动指令招式选择和宝可梦切换。只要给定相同的随机数种子两个版本的代码就应该产生完全相同的对战过程。我让 Claude 生成了对应的测试框架然后就开始逐个解决测试中发现的问题——让人惊喜的是Claude 不仅能定位所有 Bug还能自己动手修复它们。在三周的时间里Claude 平均每 20 分钟就能修复一个 Bug靠自己解决了几百个 Bug。整个过程我完全没有干预只要给它足够的时间它就能搞定遇到的所有问题。3优化测试流程提升调试效率项目初期整个测试流程的效率低得让人头疼。每次 Claude 进行上下文压缩后就像“失忆”了一样会重复造轮子生成大量没用的 Markdown 文档和测试脚本。有时候它还会偷懒只生成一堆测试用例却根本不保证这些用例和 JavaScript 版本的逻辑一致。于是我开始观察 Claude 擅长做什么然后把这些流程固化下来。比如它会在随机数生成器PRNG相关的代码里添加大量调试逻辑记录每一步的操作和详细的调试元数据。我就顺着这个思路让 Claude 写一个统一的测试脚本专门用来打印单步对战的调试信息和堆栈跟踪。然后把这个脚本的使用方法写到 Claude.md 文件里。这样一来每次调试都能直接上手效率大大提升。4漫长但有效的攻坚阶段我利用原项目的随机数生成器通过设置不同的种子值来生成可复现的对战场景。我还会逐步增加对战测试的数量循序渐进地推进。我先是搞定了前 100 场对战的问题然后是 1000 场、1 万场、10 万场现在我已经快要解决前 240 万场对战的所有问题了虽然不知道还有多少潜在问题但可以肯定的是随着测试批量的增大新出现的问题会越来越小也越来越容易解决。5迁移过程中遇到的两类典型问题整个迁移过程中Claude 修复的问题可以分为两大类。第一类是我早就预料到的由 Rust 和 JavaScript 语言特性差异导致的问题Rust 的借用检查器限制Rust 的借用检查器不允许一个可变变量同时被多个上下文引用。而在我们的代码里“宝可梦”和“对战”这两个对象会互相引用。为了解决这个问题我用了很多变通方案比如数据拷贝、用索引代替对象引用、通过回调函数传递可变对象等。JavaScript 的动态类型 vs Rust 的静态类型JavaScript 代码大量使用动态类型特性一个函数的返回值可能是字符串、undefined、null、数字甚至是“宝可梦”对象而且每种类型都会有不同的处理逻辑。一开始Rust 版本用OptionT来处理这些情况但后来改成了用自定义结构体来封装所有可能的类型变体。可选参数的差异Rust 不支持可选参数所以调用函数时必须显式传入每一个参数。而第二类问题就完全是 Claude 自己“作”出来的了。Claude Code 就像一个聪明但爱偷懒的学生——只要它觉得能蒙混过关就会想尽办法逃避那些复杂的工作逃避复杂的基础设施改造如果一个 bug 的修复需要修改多个文件涉及到 “重大基础设施调整”Claude 就会直接躺平除非你给它极其明确的指令。大多数时候它会用各种投机取巧的 hack 方法只保证当前测试用例能通过。喜欢生成“简化版”实现对于一些复杂的方法与其在 Claude 生成的错误代码上修修补补不如直接删掉重写让它从头开始迁移反而更快。擅自修改原始代码逻辑明明 JavaScript 的注释才是迁移的唯一依据但 Claude 有时候会觉得自己的方案更“好”就擅自篡改原始逻辑。挑肥拣瘦、逃避困难任务如果给 Claude 一个任务列表它会先挑简单的做把难的任务全都放到最后。如果不加以约束这个习惯会导致大量时间被浪费在无意义的调试上而且上下文压缩会让它彻底忘记那些没完成的困难任务。关键提示词分享在整个项目中我自己一行代码都没写。工作模式基本就是“白天协作”“夜间批量任务”白天和 Claude 交互式地解决问题晚上就给它分配批量任务让它通宵运行。这里主要分享一下我用的夜间批量任务提示词。1代码迁移阶段提示词1. 打开BATTLE_TODO.md文件获取battle*.rs文件中所有待实现的方法列表。2. 逐个检查每一个方法确保它们都是对JavaScript文件的直接翻译。如果存在同名方法对应的JavaScript源代码会写在注释里。3. 如果某个 Rust 方法没有对应的 JavaScript 注释请先确认这个方法是否应该存在。我们的目标是尽可能严格地和 JavaScript 版本保持一致避免因翻译偏差引入 Bug。如果发现实现逻辑不匹配请进行必要的重构确保两者完全一致。4. 这是一个复杂的项目你需要按顺序处理每一个方法绝对不能因为某个方法难度大或者需要搭建新的基础设施就跳过它。我们会循环执行这个提示词所以你可以放心花时间搭建正确的基础设施确保和 JavaScript 版本一对一匹配。不许放弃5. 每完成一个单元的工作更新 BATTLE_TODO.md 文件并执行 git commit 提交代码。2TODO 清理阶段提示词Claude 在逐个迁移方法时经常会生成“简化版”代码或者留下大量TODO注释等着以后再完善。我发现把任务指令直接以TODO注释的形式写在代码里比放在上下文里更有效——这样就不用担心 Claude 会忘记这些任务。那个主 Markdown 文件后来也失效了因为它变得太大根本没法用而且 Claude 还会在代码库里到处生成新的 Markdown 文件。后来我改用grep命令让 Claude 从代码库里自动检索所有 TODO 注释这样它就能明确知道还有哪些任务没完成。1. 我们要修复代码库里pokemon-showdown-rs/目录下的所有TODO注释。2. 这些TODO有成百上千个请你认真地逐个处理**即使任务很难也不许跳过**。我会反复执行这个提示词所以你不用担心在单个任务上花太多时间。3. 代码迁移必须严格保持一对一的逻辑一致。如果需要的基础设施不存在请你自己实现**不许凭空发明任何逻辑**。4. 每完成一个TODO的修复确保代码能正常编译然后执行git commit和git push提交代码。有个小插曲有一次原始 JavaScript 代码库里的某个注释里就包含 TODOClaude 把这个 TODO 改成了别的内容改完之后逻辑是通顺的。但问题是它把这个操作当成了“正确示范”之后遇到所有的 TODO 都照葫芦画瓢导致大量逻辑出错——好在我通过 git revert 回滚了这些错误的提交才没造成太大的麻烦。3Bug 修复阶段提示词我把所有的调试指令都写进了 Claude.md 文件还写了一个批量运行测试的脚本测试结果会输出到一个 txt 文件里。这样一来Claude 就能自己读取测试报告然后逐个修复问题完全不需要人工介入。1. 我们要修复对战测试中出现的所有逻辑不一致问题。请查看500-seeds-results.txt文件逐个解决里面记录的问题。2. 修复的唯一准则是确保JavaScript和Rust版本的差异**只能是由语言特性不同导致的而不能是逻辑上的差异**。两行代码的执行结果必须完全一致。3. 如果你修复了某个具体问题请思考这是不是一个共性问题。花时间排查代码库里是否存在类似的错误然后进行全局的基础设施级别的修复而不是只修这一个案例。4. 每完成一个修复确保代码能正常编译然后执行git commit和git push提交代码。把这个测试结果 txt 文件提交到 GitHub 上也很有用——我可以随时随地查看项目进展最终成果真的跑起来了说实话项目开始的时候我心里完全没底。毕竟类似的代码迁移项目往往会因为工作量过于庞大而半途而废——但这次不一样我们最终得到了一个完整的宝可梦对战系统 Rust 实现而且它的运行结果和 JavaScript 原版几乎完全一致。整个项目耗时 4 周提交了 5000 次代码最终生成的 Rust 代码库大约有 10 万行。但也有点小遗憾目前还做不到 100% 的逻辑一致——在前 240 万场对战测试中还有 80 场存在差异误差率约为 0.003%。我还需要让测试继续运行更长时间来解决这些小问题。不过现在可以来场性能对比了——Rust 版本真的更快吗毕竟我把代码迁移到 Rust 的核心目的就是为了提升运行速度。所以当大部分对战测试都能稳定通过之后我觉得是时候做一个公平的性能对比了。我让 Claude 给两个版本的代码都做了并行化优化测试结果让我松了一口气Rust 版本的速度确实远超 JavaScript 版本看来我这一个月的时间没有白费我还让 Claude 尝试进一步优化 Rust 代码的性能它给出的优化方案看起来很合理毕竟我之前从来没写过一行 Rust 代码。之后它花了一整天的时间实现了其中的大部分优化——但尴尬的是这些优化最终不仅没有提升运行速度反而让性能变得更差了。现在回头看这件事其实真的很疯狂我一个从来没写过 Rust 代码的人靠着 Claude Code 全天候运行一个月提交了 5000 次代码居然在两周的实际参与时间里完成了 10 万行代码从 JavaScript 到 Rust 的迁移基于大语言模型的代码助手已经成为工程师手中的超强工具——没有 Claude Code 的话我根本不可能完成这个项目。但同时也要明确它只是一个工具要想产出高质量的成果还是需要工程师的专业知识以及持续的监督和引导。推荐阅读编程门槛被压到799美元“那个拿着Mac MiniClaude的「门外汉」抢走了程序员3个月的活”马斯克甩出王炸X平台推荐算法重磅开源6小时斩获1.6k Star放话没有对手这样做硬核程序员爆肝6个月从零手搓486主板画原理图、焊芯片全搞定Linux、DOOM、Win3.1都跑起来了未来没有前后端只有 AI Agent 工程师。这场十倍速的变革已至你的下一步在哪4 月 24-25 日由 CSDN 与奇点智能研究院联合主办「2026 奇点智能技术大会」将在上海隆重召开大会聚焦 Agent 系统、世界模型、AI 原生研发等 12 大前沿专题为你绘制通往未来的认知地图。成为时代的见证者更要成为时代的先行者。奇点智能技术大会上海站我们不见不散

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询