是一个交互式编译器探索网站。使用 C、C++、C#、F#、Rust、Go、D、Haskell、Swift、Pascal、ispc、Python、Java 或任何其他 30 多种支持的语言组件编辑代码,并查看代码在编译后的外观即时的。
Bug 报告 · 编译器请求 · 功能请求 · 语言请求 · 库请求 · 报告漏洞
每种语言都支持多个编译器,有许多不同的工具和可视化可供使用,并且 UI 布局是可配置的(感谢 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 商店购买炫酷的装备。
存储库 wiki 中现在有一个常见问题解答部分。如果您的问题不存在,请按照如下所述联系我们,以便我们为您提供帮助。如果您发现常见问题解答缺少某些要点,请随时为其做出贡献和/或要求我们进行澄清。
几个视频展示了编译器资源管理器的一些功能:
路线图可以让您对Compiler Explorer的未来计划有一些了解。
Compiler Explorer是在 Node.js 上用 TypeScript 编写的。
假设您安装了兼容版本的node
,在 Linux 上只需运行make
就应该让您启动并运行在本地计算机上的端口 10240 上运行的资源管理器:http://localhost:10240/。如果这不适合您,请联系我们,因为我们认为快速轻松地开始运行非常重要。目前, Compiler Explorer需要安装node
20,无论是在路径上还是在NODE_DIR
(环境变量或make
参数)处。
使用make EXTRA_ARGS='--language LANG'
运行将允许您专门加载LANG
,其中LANG
是lib/languages.ts
中定义的语言 ID/别名之一。例如,要仅运行支持 C++ 的编译器资源管理器,您可以运行make EXTRA_ARGS='--language c++'
。您可以提供多个--language
参数来限制为多种语言。 Makefile
会自动安装运行所需的所有第三方库;使用npm
安装服务器端和客户端组件。
对于开发,我们建议使用make dev
来启用一些有用的功能,例如文件更改时自动重新加载和缩短启动时间。
如果make dev
在您的计算机上不起作用,您还可以使用npm run dev
来运行。
有些语言需要额外的工具来分解它们,例如rust
、 d
或haskell
。此类工具单独保存在工具存储库中。
配置编译器资源管理器是通过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
文件在加载属性时具有最高优先级。
如果你想支持像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,可用于编译为 asm 并列出编译器。
您可以在此处找到 API 文档。
我们运行 Compiler Explorer Discord,这是一个讨论使用或开发 Compiler Explorer 的地方。我们还在 cpplang Slack 频道#compiler_explorer
上露面,并且我们有一个公共邮件列表。
Discord 上有一个开发频道,还有一个开发邮件列表。
请随时在 github 上提出问题或直接向 Matt 发送电子邮件以获得更多帮助。
以下是编译器资源管理器的官方域:
这些域允许任意子域,例如 https://foo.godbolt.org/,这很方便,因为每个子域都有独立的本地状态。此外,语言子域(例如 https://rust.compiler-explorer.com/)将使用已选择的语言加载。
Compiler Explorer由 AUTHORS 文件中列出的优秀人员维护。
我们要感谢 CONTRIBUTORS 文件中列出的贡献者,他们帮助塑造了Compiler Explorer 。
我们还要特别感谢这些人对Compiler Explorer 的贡献:
许多令人惊叹的赞助商,包括个人和公司,都帮助资助和推广 Compiler Explorer。