根据man gcc
,gcc 支持以下语言,您可以使用标志进行选择-x
:
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?
答案1
基本上,必须有一个语言前端和任何必要的支持库,获得适当的许可,具有足够的质量(代码,还有文档和测试),并且人们愿意维护它。决策者是海湾合作委员会指导委员会。
在不久的将来就有一些语言被添加和删除的例子。D 2011年成为候选人,2017年获批并且在 GCC 8 中可用。另一方面,Java 在沉寂很长时间后在 GCC 7 中被删除。
海湾合作委员会是分成多个组件;它支持的各种语言由前端实现,前端将程序转换为中间表示,吉普勒(与语言和机器无关)。因此,优化器可以跨语言共享。