mcpField
C
Compiler Explorer

Compiler Explorer

远程服务
godbolt.org开发工具19.2k1 天前更新

关于 Compiler Explorer

Compiler Explorer 是一个交互式编译器探索网站,可以实时编译代码并查看生成的汇编结果。它支持30多种语言和多个编译器,适合需要对比编译输出的开发者。项目起源于用来观察 C++ 结构如何转换为汇编的小工具,现已成为公开网站。

主要功能

  1. 01实时编译并显示汇编输出
  2. 02支持30多种编程语言
  3. 03每种语言可选择多个编译器
  4. 04可配置的界面布局
  5. 05提供 RESTful API 进行编译和编译器列表查询

适用场景

  1. 01对比不同编译器生成的汇编代码
  2. 02学习 C++ 等语言结构的底层实现
  3. 03分享代码与编译结果的链接

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://godbolt.org/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

7
参数类型必填说明
stdinstring否执行的标准输入(需要 execute=true)
sourcestring是要编译的源代码
executeboolean否运行程序,而不是返回汇编代码。`asm` 将变为空;运行时输出将写入顶层的 `stdout`/`stderr`;编译诊断信息将移至 `buildResult.stdout`/`stderr`。
filtersobject否输出过滤器
filters.trimboolean否去除空白(默认:false)
filters.intelboolean否使用 Intel 汇编语法(默认:true)
filters.labelsboolean否过滤未使用的标签(默认:true)
filters.demangleboolean否反修饰符号名称(默认:true)
filters.directivesboolean否过滤汇编器指令(默认:true)
filters.commentOnlyboolean否过滤仅包含注释的行(默认:true)
filters.libraryCodeboolean否过滤库代码(默认:false)
optionsstring否编译器标志(例如:"-O2 -std=c++20 -Wall")
compilerstring否来自 list_compilers 列表的编译器 ID(例如:"g161")。如果省略,则使用 list_languages 中该语言的 `defaultCompiler`。
languagestring是语言 ID(例如:"c++"、"c"、"rust"、"python")
librariesarray否要链接的库。
maxAsmLinesinteger否限制汇编输出(默认 500 行)。
maxStderrLinesinteger否分别限制编译和执行的每个标准错误流(默认 100 行)。
maxStdoutLinesinteger否分别限制编译和执行的每个标准输出流(默认 100 行)。

详细介绍

Build Status codecov

logo

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 的未来计划。

开发

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 提供资金支持并帮助推广。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。