根据man gcc
,gcc 支持以下语言,您可以通过-x
flag 进行选择:
c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
java
将语言放入 gcc 的标准是什么?显然,像 C 和 C++ 这样的语言将出现在 gcc 中,但我对 go 和 java 感到惊讶。
此外,gnu.org 上的 gcc 文档说:“GCC 的语言独立组件包括大多数优化器,以及为各种处理器生成机器代码的“后端”。我对编译器的了解充其量只是基本的,但这是否意味着 gcc 将每种语言解析和词法分析为某种通用格式,然后从那里生成某种二进制文件?如果是这种情况,是否会为这些语言中的任何一种编写与语言无关的 gcc 优化器,例如 C 和 go?
基本上,必须有一个语言前端和任何必要的支持库,获得适当许可,质量足够(代码,还有文档和测试),并且有人愿意维护它。决策者是GCC 指导委员会。
在不远的过去,有一些语言被添加和删除的例子。D 于 2011 年成为候选人,于 2017 年获得批准,并在 GCC 8 中可用。另一方面,Java 在经过很长时间后在 GCC 7 中被删除。
有一些项目可以添加Python和Rust,但我认为那里没有太多活动。
GCC被分成多个组件;它支持的各种语言由前端实现,前端将程序转换为中间表示形式,GIMPLE(独立于语言和机器)。因此,优化器是跨语言共享的。