以下为一教科书上关于COMPILER的定义:
COMPILER - A compiler translates a computer program from one language into another, catching any errors in syntax along the way. Most commonly, you translate some high level language,
such as C++ or COBOL, into optimized machine language. This form of compilation puts your
programs into a form that your computer (specifically your microprocessor) can understand
without any translation, thus speeding them up greatly over programs that must be interpreted as they are run.
黑体字之前给出对COMPILER的定义。黑体字部分说明的是现实中COMPILER的实例。本人觉得实例不应该反过
来影响定义。
计算机业发展如此迅速,以至于我们理解的一些专业要概念会很快的发生内涵缩小化或者偏离现实的现象。在这里,黑体字部分说明的实例就是没有真正描述现在情况。我相信现在大多数人都接受了javac和clc是COMPILER的说法。不能因为一个东西没有生成 machine language就不是COMPILER了
。
以下则是那位O村村民贴出来的关于COMPILER的定义:
Computer software that translates (compiles) source code written in a high-level language (e.g., C++) into a set of machine-language instructions that can be understood by a digital
computer's CPU.
Compilers are very large programs, with error-checking and other abilities. Some compilers
translate high-level language into an intermediate assembly language, which is then translated
(assembled) into machine code by an assembly program or assembler. Other compilers generate
machine language directly.
同样在这里C++语言只是举例,不应该倒过来影响定义。另外就象后一段文字注明的,前面那一段的定义是要经修改才会正确一样,不能说一个软件因为没有生成计算机机器语言就不是COMPILER。
JAVA和.NET设计的初衷之一就是为了将可执行代码进行简单化和统一化。.NET目标代码和机器语言没有本质的区别。怎么可能说生成依赖于.NET的执行体的转换程序就不是编译器呢?
所以这里的结论只是落到关于语言本身的定义问题而已。
另外说A COMPILER会被理解成MOST COMMONLY的情况,想想也对。但实际情况是我们去面试的时候你和别人说话是站在如何适应对方公司的情况的立场而言的,我的理解是他总不可能让我写个能够编译COBOL语言(相信大家都知道从编译器的实现上来说COBOL语言比C语言要难得多,C++因为有OOP的概念又是另外一回事了)那样的东东。但我知道他们公司有自己在数据接口一层的中间语言,功能上类似SQL,但有变量、循环语句、逻辑判断语言、和模块调用功能,基本上我说那些话的都是针对他们的那个项目组说的。我们公司实际上针对那个语言就是有自己的COMPILER和解释执行模块。我前面说到的我说那个财务数据运算表达式的编译器,项目名字就是有COMPILER这个词在里面,没有人会觉得奇怪。
COMPILER - A compiler translates a computer program from one language into another, catching any errors in syntax along the way. Most commonly, you translate some high level language,
such as C++ or COBOL, into optimized machine language. This form of compilation puts your
programs into a form that your computer (specifically your microprocessor) can understand
without any translation, thus speeding them up greatly over programs that must be interpreted as they are run.
黑体字之前给出对COMPILER的定义。黑体字部分说明的是现实中COMPILER的实例。本人觉得实例不应该反过
来影响定义。
计算机业发展如此迅速,以至于我们理解的一些专业要概念会很快的发生内涵缩小化或者偏离现实的现象。在这里,黑体字部分说明的实例就是没有真正描述现在情况。我相信现在大多数人都接受了javac和clc是COMPILER的说法。不能因为一个东西没有生成 machine language就不是COMPILER了
。
以下则是那位O村村民贴出来的关于COMPILER的定义:
Computer software that translates (compiles) source code written in a high-level language (e.g., C++) into a set of machine-language instructions that can be understood by a digital
computer's CPU.
Compilers are very large programs, with error-checking and other abilities. Some compilers
translate high-level language into an intermediate assembly language, which is then translated
(assembled) into machine code by an assembly program or assembler. Other compilers generate
machine language directly.
同样在这里C++语言只是举例,不应该倒过来影响定义。另外就象后一段文字注明的,前面那一段的定义是要经修改才会正确一样,不能说一个软件因为没有生成计算机机器语言就不是COMPILER。
JAVA和.NET设计的初衷之一就是为了将可执行代码进行简单化和统一化。.NET目标代码和机器语言没有本质的区别。怎么可能说生成依赖于.NET的执行体的转换程序就不是编译器呢?
所以这里的结论只是落到关于语言本身的定义问题而已。
另外说A COMPILER会被理解成MOST COMMONLY的情况,想想也对。但实际情况是我们去面试的时候你和别人说话是站在如何适应对方公司的情况的立场而言的,我的理解是他总不可能让我写个能够编译COBOL语言(相信大家都知道从编译器的实现上来说COBOL语言比C语言要难得多,C++因为有OOP的概念又是另外一回事了)那样的东东。但我知道他们公司有自己在数据接口一层的中间语言,功能上类似SQL,但有变量、循环语句、逻辑判断语言、和模块调用功能,基本上我说那些话的都是针对他们的那个项目组说的。我们公司实际上针对那个语言就是有自己的COMPILER和解释执行模块。我前面说到的我说那个财务数据运算表达式的编译器,项目名字就是有COMPILER这个词在里面,没有人会觉得奇怪。