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,找到性能优化点。
相关推荐
蚂蚁在飞-7 分钟前
Golang基础知识—cond
开发语言·后端·golang
程序员爱钓鱼6 小时前
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
后端·golang
言之。7 小时前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
diving deep8 小时前
XML简要介绍
xml·java·后端
编程乐学(Arfan开发工程师)9 小时前
06、基础入门-SpringBoot-依赖管理特性
android·spring boot·后端
编程乐学(Arfan开发工程师)9 小时前
05、基础入门-SpringBoot-HelloWorld
java·spring boot·后端
橘子海全栈攻城狮10 小时前
【源码+文档+调试讲解】党员之家服务系统小程序1
java·开发语言·spring boot·后端·小程序·旅游
冼紫菜10 小时前
Java开发中使用 RabbitMQ 入门到进阶详解(含注解方式、JSON配置)
java·spring boot·后端·rabbitmq·springcloud
boring_11110 小时前
Apache Pulsar 消息、流、存储的融合
分布式·后端
源码方舟13 小时前
SpringBoot + Shiro + JWT 实现认证与授权完整方案实现
java·spring boot·后端