编译器有什么简单的解释吗?

时间:2010-11-11 16:17:28

标签: compiler-construction terminology

在试图提供关于“C++ compiled app”的帖子的简单答案时,我很惊讶没有关于这个基本主题的任何问题或答案。即使在Meta上搜索也没有找到任何有用的信息,无论是explaining compilers还是beginning compiler questions

我们希望Stackoverflow成为查找编程答案的好地方。我们不应该为维基百科留下如此重要的东西。一个简单的比喻就是向一位木匠大师询问一个10便士的钉子是什么并且被刷掉了。当然这是一个简单的问题,但是一个木匠认为解释一些如此简单的东西在他/她之下只是在最好的情况下,礼貌地,或者如果不是那么混蛋。

至少,这个问题提供了一个收集Stackoverflow内部或外部与编译器相关的解释的链接的地方。

[我制作此CW,但看不到复选框,是否已将其移动或删除?]

本着这种精神,我提供了关于编译器的维基百科的链接。请编辑这篇文章,其中包含更多编译器说明的链接。

维基百科在compilers上的条目。

2 个答案:

答案 0 :(得分:5)

我即将提供答案,但维基百科文章的第一句与我打算输入的内容几乎相同:

  

编译器是一个计算机程序 [...] ,它将用编程语言 [...] 编写的源代码转换为另一种计算机语言 [ ...]

答案 1 :(得分:3)

简答

简单地总结一下编译器的作用是什么,并对Wikipedia's Compiler页面留下广泛的解释,我只想说一般来说编译器是一个转换输入源代码的计算机软件以给定的形式(通常针对人类以便于阅读)以压缩形式(通常针对执行机器)的输出程序。或者,所述软件可能经历几个阶段并在处理期间产生多个中间形式,并且可能需要执行多次传递并将多个输入源合并为一个或多个输出。

编译器因此只是作为(通常是正式的)人类语言的静态翻译器,成为(通常更正式和简约的)机器语言或指令集。

要记住的一些区别

这就是说,通常术语“编译”会被描述为完整软件生产周期的其他步骤的其他术语破坏,并且可能用于指代pre-processing之类的步骤(在处理之前准备输入和提前应用其他类型的转换,例如可能使用meta-programming个概念)或linkage(用于组合多个中间对象)。

典型示例可以是C程序之一,使用单个命令行编译但实际上将多个.c(源)和.h(头)文件处理为多个{{然后可以将这些文件链接到多个.o(程序集/库)文件以生成输出程序(.a.exe,...)或其他{} {1}}或.out.a(针对不同平台的动态或共享库程序集)。

所述步骤也可以通过执行多个命令行来执行,以解除发生的不同操作。

Multi-Language Compilation Process


这显然是针对IT世界的一个非常高级别的解释,但毫无疑问,您可以将“编译器”一词称为其他软件和机器,将任何类型的输入转换为某种可执行或可用的输出另一种。


图片由WikipediaCompiler

提供