关于 Compiler Explorer
Compiler Explorer 是一个交互式编译器探索网站,可以实时编译代码并查看生成的汇编结果。它支持30多种语言和多个编译器,适合需要对比编译输出的开发者。项目起源于用来观察 C++ 结构如何转换为汇编的小工具,现已成为公开网站。
主要功能
- 01实时编译并显示汇编输出
- 02支持30多种编程语言
- 03每种语言可选择多个编译器
- 04可配置的界面布局
- 05提供 RESTful API 进行编译和编译器列表查询
适用场景
- 01对比不同编译器生成的汇编代码
- 02学习 C++ 等语言结构的底层实现
- 03分享代码与编译结果的链接
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://godbolt.org/mcpclaude mcp add --transport http compiler-explorer-compiler-explorer https://godbolt.org/mcp{"mcpServers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}在 Cursor 中打开{"servers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}在 VS Code 中打开{"mcpServers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}{"mcpServers":{"compiler-explorer-compiler-explorer":{"serverUrl":"https://godbolt.org/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| stdin | string | 否 | 执行的标准输入(需要 execute=true) |
| source | string | 是 | 要编译的源代码 |
| execute | boolean | 否 | 运行程序,而不是返回汇编代码。`asm` 将变为空;运行时输出将写入顶层的 `stdout`/`stderr`;编译诊断信息将移至 `buildResult.stdout`/`stderr`。 |
| filters | object | 否 | 输出过滤器 |
| filters.trim | boolean | 否 | 去除空白(默认:false) |
| filters.intel | boolean | 否 | 使用 Intel 汇编语法(默认:true) |
| filters.labels | boolean | 否 | 过滤未使用的标签(默认:true) |
| filters.demangle | boolean | 否 | 反修饰符号名称(默认:true) |
| filters.directives | boolean | 否 | 过滤汇编器指令(默认:true) |
| filters.commentOnly | boolean | 否 | 过滤仅包含注释的行(默认:true) |
| filters.libraryCode | boolean | 否 | 过滤库代码(默认:false) |
| options | string | 否 | 编译器标志(例如:"-O2 -std=c++20 -Wall") |
| compiler | string | 否 | 来自 list_compilers 列表的编译器 ID(例如:"g161")。如果省略,则使用 list_languages 中该语言的 `defaultCompiler`。 |
| language | string | 是 | 语言 ID(例如:"c++"、"c"、"rust"、"python") |
| libraries | array | 否 | 要链接的库。 |
| maxAsmLines | integer | 否 | 限制汇编输出(默认 500 行)。 |
| maxStderrLines | integer | 否 | 分别限制编译和执行的每个标准错误流(默认 100 行)。 |
| maxStdoutLines | integer | 否 | 分别限制编译和执行的每个标准输出流(默认 100 行)。 |
详细介绍
Compiler Explorer
Compiler Explorer 是一个交互式编译器探索网站。编辑 C、C++、C#、F#、Rust、Go、D、Haskell、Swift、Pascal、 ispc、Python、Java 或其他 30 多种受支持的语言的代码,并实时查看编译后的代码。
报告 Bug · 请求添加编译器 · 功能请求 · 语言请求 · 请求添加库 · 报告漏洞
概述
每种语言都支持多种编译器,并提供许多不同的工具和可视化功能;界面布局也可配置(感谢 GoldenLayout)。
欢迎在 godbolt.org 试用,或运行自己的本地实例。关于该网站能帮助你实现什么、它为何有用以及如何使用的概述,可在此处查看,也可观看这场演讲。
Compiler Explorer 遵循行为准则,旨在营造开放、友好的环境。
Compiler Explorer 于 2012 年启动,旨在展示 C++ 结构如何转换为汇编代码。它最初只是一个 tmux 会话,其中一个窗格运行 vi,另一个窗格运行 watch gcc -S foo.cc -o -。
此后,它已发展为一个公共网站,每周提供超过 3,000,000 次编译。
你可以通过 Patreon、GitHub、Paypal 为此项目提供资金支持,也可以在 Compiler Explorer 商店购买酷炫周边。
使用 Compiler Explorer
常见问题
现在,仓库 Wiki 中设有常见问题板块。如果其中没有你的问题,请按照下文所述联系我们,我们会尽力帮助你。如果你发现常见问题中缺少重要内容,欢迎补充,也可以请我们进一步说明。
视频
以下视频展示了 Compiler Explorer 的一些功能:
- Compiler Explorer 2023:有哪些新功能?:CppNorth 2023 演讲。
- CppCon 2019 项目介绍
- 较早的两部分系列视频,更详细地介绍了一些较少见的功能。
- Compiler Explorer 所需的汇编知识:CppCon 2021 演讲,实用地介绍了汇编,重点讲解如何使用 Compiler Explorer。
- 播放列表:Compiler Explorer:收录了介绍 Compiler Explorer 的视频,涵盖使用方法、安装方式、用途等。
我们提供了一份路线图,让你稍微了解一下 Compiler Explorer 的未来计划。
开发
Compiler Explorer 使用 TypeScript 编写,运行于 Node.js 之上。
假设你已安装兼容版本的 node,在 Linux 上只需运行 make,即可启动 Explorer,并在本机的 10240 端口上运行:
http://localhost:10240/。如果无法运行,请联系我们,因为我们认为你应该能够快速、轻松地启动项目。Compiler Explorer 至少需要使用 node 版本(在 .node-version 中指定)(更新的版本也可以)。我们会在你的 PATH 中查找它,这既包括系统安装的版本,也包括集成到 shell 中的版本管理器(fnm、asdf、nodenv、volta 或正在使用的 nvm)。如果 PATH 中的 node 不存在或版本过旧,我们还会尝试直接通过 nvm/fnm/nodenv/asdf 查找 .node-version 中指定的版本。若要指定某个安装位置,请将 NODE_DIR 指向该位置(作为环境变量或 make 参数);之后我们会使用 $NODE_DIR/bin/node。
运行 make EXTRA_ARGS='--language LANG' 可只加载 LANG,其中 LANG 是 lib/languages.ts 中定义的语言 ID/别名之一。例如,若要只运行支持 C++ 的 Compiler Explorer,请运行 make EXTRA_ARGS='--language c++'。你可以提供多个 --language 参数,以限制为多种语言。Makefile 会自动安装运行所需的所有第三方库;服务器端和客户端组件通过 npm 安装。
进行开发时,我们建议使用 make dev,以启用一些实用功能,例如在文件更改时自动重新加载,以及缩短启动时间。
如果 make dev 在你的计算机上无法运行,也可以使用 npm run dev 启动。
修改 UI 时,我们建议遵循 UI 测试清单,确保所有组件都能正常工作。
某些语言需要额外的工具来进行反修饰,例如 rust、d 或 haskell。这些工具单独存放在工具仓库中。
Compiler Explorer 通过 etc/config 目录中的配置文件进行配置。值采用 key=value 格式。{type}.local.properties 文件(其中 {type} 可以是 c++ 等)的选项会覆盖 {type}.defaults.properties 文件中的所有设置。我们提供了 .gitignore 文件来忽略 *.local.* 文件,因此这些文件不会提交到 git 中;这样,你在执行 git pull 时也无需担心本地配置与更新版本冲突。更多信息请参阅添加编译器。
请查看 CONTRIBUTING.md,了解如何为 Compiler Explorer 做出贡献的详细信息;如需了解如何向网站添加编译器或语言等具体事项,请参阅 docs 文件夹。
运行本地实例
如果想让它使用自己的 GCC 或类似二进制文件,可以编辑 etc/config/LANG.defaults.properties,也可以新建一个名为 LANG.local.properties 的文件,并按需替换 LANG。加载属性时,*.local.properties 文件的优先级最高。
添加本地编译器的一种快速简便方法是使用 CE Properties Wizard,它可以自动检测并配置30 多种语言的编译器。 更多详情请参阅添加编译器。
如果想像 godbolt.org 一样支持多种编译器和语言,可以使用 infra 项目中的 bin/ce_install install compilers 命令安装全部或部分编译器。通过这种方式安装的编译器可以通过 etc/config/*.amazon.properties 中的配置加载。如果需要在完全离线的环境中部署,可能需要移除配置中从 www.godbolt.ms@443 获取的部分。
在企业环境中运行时,如果默认存储驱动程序不适合你的环境,可以将 URL 缩短服务替换为内部服务。为此,请在 lib/shortener/myservice.js 中添加一个新模块,并在配置中设置 urlShortenService 变量。此模块应导出一个函数,示例请参阅 tinyurl 模块。
RESTful API
这里提供了一个简单的 RESTful API,可用于编译为汇编代码并列出编译器。
可在此处查看 API 文档。
联系我们
我们运营着一个 Compiler Explorer Discord,可在其中讨论如何使用或开发 Compiler Explorer。我们也活跃于 cpplang Slack 频道 #compiler_explorer,并设有一个公开邮件列表。
Discord 上设有开发频道,此外还有一个开发邮件列表。
如需更多帮助,欢迎在 github 上提交问题,或直接给 Matt 发邮件。
官方域名
以下是 Compiler Explorer 的官方域名:
这些域名允许使用任意子域名,例如 https://foo.godbolt.org/。这很方便,因为每个子域名都有独立的本地状态。此外,像 https://rust.compiler-explorer.com/ 这样的语言子域名会在加载时预先选择相应语言。
致谢
Compiler Explorer 由 AUTHORS 文件中列出的优秀成员维护。
我们感谢 CONTRIBUTORS 文件中列出的贡献者,是他们帮助塑造了 Compiler Explorer。
我们还要特别感谢以下为 Compiler Explorer 做出贡献的人员:
许多优秀的赞助者,包括个人和公司,都曾为 Compiler Explorer 提供资金支持并帮助推广。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
