AI自制编程语言-用 Trae 实现JavaScript编译器

去年的这个时候一直在探索如何用 AI 实现编程语言,当时 Agent 和工具链还不够齐全,所以尝试一段时间就断更了,有兴趣的可以再回忆这两篇用 Prompt 实现的词法解析器:

随着当前各种编程 AgentMCP 的层出不穷,大模型的正在加速进化,于是又开始探索,不过这次的目标是用 golang 实现 JavaScript 引擎(目标是完成 ES5.1 的全部功能)。

1. 回顾 JS 编译器的实现过程

如上是总结的 V8 大体的实现方式,编程语言的实现已经经历了几十年的发展,包括 V8,Lua等语言基本都采用类似实现步骤:

  • 词法分析
  • 语法分析
  • 语义解析和优化
  • 虚拟机
  • 通过 JIT 实现性能优化
  • ...

2. 如何选择工具链和知识库

2.1 AI 编码助手

AI 编码助手有很多,但是用的顺手的却不多,我个人经常使用如下:

  • Trae 海外版本,使用 Builer 模式
    • 优点:各种模型免费(不过有时候需要排队),对于 web 开发友好,调试器比较方便
    • 缺点:界面与 VSCode 差异大,代码提示不太友好,合并代码经常会出现 bug,工具链不齐全
  • Windsurf,使用 Cascade:
    • 优点:有些模型会现实免费,基于 VSCode 实现,使用习惯差异不大,界面清晰,代码提示和 bugfix 可以让 AI 自动执行
    • 缺点:提示有时候有点乱,如果思考时间过长,会经常超时,不能添加自定义模型
  • Cursor:
    • 优点:社区完善,自由选择模型,支持 MCP 市场,方便添加各种 rules
    • 缺点:太贵,功能太多导致新手了解有一定的门槛,多文件之前上下文切换不太流畅

2.2 知识库

要实现 JavaScript 编译器,首先开发者要了解编译器实现方案(参考上图),然后让 AI 了解实现方案(虽然 AI 本身已经有编译器的实现原理,但是开发者需要按照场景提示 AI 按照哪种方案实现),最好要有简单的样例给到 AI 编码助手,这里提供一些知识库的资料:

如果您实现的不是 JS 编译器,也可以作为知识库,让 AI 参考源码按照你想要的方式实现(比如:用 Rust 实现 JS ...)。

3. 解决思路

针对 simplejs 实现的项目总结如下:

  • 制定明确的项目规则,我们要实现 Javascript 引擎,从以往的经验上看,项目至少超过 3000 行,所以先要将功能拆解为规则(各种 Prompt),而不是直接输入[实现Javascript引擎]
  • 在提示词中明确指出技术栈、期望行为和约束条件,就像提供规范说明书,约束模型的边界
  • 让 AI 拆解功能,以小型、功能为单位划分文件来生产,测试和功能验证
  • 测试驱动开发:先可以根据你描述的功能,生成测试用例,验证 AI 是否遵循了你的功能要求,然后生产功能逻辑后,尽可能多的再生产测试用例,最后保证测试用例100% 通过
  • 控制质量:AI 输出的任何功能,要了解边界条件,并且提示 AI,输出的代码需要保持可读性,甚至可以让 AI 不断重构当前的功能,以保证按照最少代码实现
  • 控制上下文:如果上下文很多,我们不需要按照整个工程提问,而是按照某个文件,或者某个文件的某些行扩展
  • 有时候需要人工:报错比较明确,或者歧义的代码,建议开发者直接上手改代码修复
  • 必要时候切换模型:有些问题用 DeepSeek 可以快速回答,就不需要用 Claude-3.7,当某些模型不能解决当前问题时,建议手动切换不同模型尝试(模型的边界比较模糊,有些时候 Claude-3.7 不能解决,GPT-4o 却可以解决)
  • 如果有文档,可以单独建立 docs 目录,记录你想要的功能或者 API,甚至需要链接的知识库等
  • 调试代码多加日志:打印比较多的日志,基于日志的上下文让 AI 修复 bug,能更快的分析问题并解决问题,而不是依赖 AI 对整个功能分析

4. 总结(完成第一个版本)

代码已经开源(simplejs): github.com/linkxzhou/m...

通过 AI 实现代码详细如下:

  • 测试用例:2316
  • 功能代码:3556
  • 代码覆盖率:coverage: 74.9% of statements

后续需要完成的工作:

  • 测试完整的 JS 测试集:tc39github.com/tc39/test26...
  • 增加性能优化:
    • 解决尾递归问题
    • 编译预计算
    • 尝试通过 AI 实现少量的 JIT 功能
    • ...
  • 执行 Benchmark,运行压测,让 AI 分析 profile,找到性能优化点。
相关推荐
tonydf4 分钟前
0帧起手本地跑一下BitNet
后端·ai编程
zzmgc46 分钟前
常用JVM配置参数
后端
金融数据出海7 分钟前
使用PHP对接印度股票市场数据
后端
[email protected]9 分钟前
ASP.NET Core自动事务ActionFilter
后端·asp.net·.netcore
XiaoLeisj38 分钟前
【设计模式】深入解析代理模式(委托模式):代理模式思想、静态模式和动态模式定义与区别、静态代理模式代码实现
java·spring boot·后端·spring·设计模式·代理模式·委托模式
大鹏dapeng42 分钟前
使用gonectr操作gone项目,包括:创建项目、安装依赖、生成代码、编译和运行
后端·go·github
李少兄1 小时前
解决Spring Boot版本冲突导致的`NoSuchFieldError`
java·spring boot·后端
Piper蛋窝1 小时前
Go 1.17 相比 Go 1.16 有哪些值得注意的改动?
后端
掘了1 小时前
实习 / 春秋招|必知必会的 ACM 模式输入输出与构造
c++·后端·面试
pwzs1 小时前
常见的 Spring Boot 注解汇总
java·spring boot·后端·spring