为什么C++被称为“通常”编译语言?

7
C++标签维基中,指出:

C++是一种...(通常)编译的...编程语言...

然而,维基百科cplusplus.com声称C ++是一种编译语言,而没有提到任何例外。

请问您能否告诉我们C ++通常为何是编译语言,但并非总是如此?什么情况下可以认为C ++是非编译语言?


维基百科:

C ++是一种编译语言,可在许多平台上实现。

cplusplus.com:

...是一种编译语言。 C++直接编译成机器本地代码,允许

这可能表明存在C ++的非编译形式。那么是什么让维基文章声称它“通常”是编译语言呢?


2
我认为已经有一些C++的子集解释器了。可以看看ChCling - Basile Starynkevitch
4
ROOT框架有一个c++解释器 - 463035818_is_not_a_number
1
我猜测LLVM和clang的流行程度。虽然那也是一个编译器。 - Alex
1
阅读:https://dev59.com/bXVD5IYBdhLWcg3wJIIK。这里有一个名为Cling的解释器(https://github.com/vgvassilev/cling)。 - Arnav Borborah
4
注意:cplusplus.com通常是一个充满错误的参考网站。建议使用cppreference.com。 - Jesper Juhl
2
最后,编译器和解释器之间的区别非常模糊。SBCL看起来像解释器,但实际上它会将每个REPL交互编译成机器码。 - Basile Starynkevitch
4个回答

10

因为按照C++标准所定义的"C++"仅仅是一种编程语言,只能在一个抽象的机器上操作。实现可以自由地进行任何操作来模拟该抽象机器的行为。

因此,无论是否实际制作了C++解释器,声称C++总是被编译是没有根据的假设。


7

没有技术上的障碍阻止你编写一个 C++ 解释器,我相信过去已经有一些这样的解释器被编写出来。

C 也是一种(通常)编译型语言,但我自己在20年前编写了一个(慢速、递归下降)C89解释器。 C++只是同样问题的(更难)版本。


1
事实上,甚至在九十年代初期就有一款商业产品叫做Rational Instant C。 - Christophe

2
有一些针对 C++ 子集的解释器(相关问题),但绝大多数 C++ 工作都是使用编译器完成的。使用解释器非常罕见,以至于没有一个 C++ 文献或庞大的 C++ 库或程序会限制自己只使用可以在解释器上使用的 C++ 子集,除非这些文献、库或程序专门是为这些解释器而设计的。

实际上,在 C++ 中,即时编译更常见。

不管值不值得一提,我最近读到的相关新闻(来自Hacker News)是关于一个 C++17 REPL


1
在大多数情况下,C++ 是编译型语言,但是例如 cling 是一种 C++ 解释器。我没有尝试过它,但它似乎是一个相当完整的 C++ 实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接