今天的电脑难以置信的快,越来越快的时候。然而,这个速度是一些重要的约束。电脑本身理解的一个非常有限的一组指令,必须对要做什么。这组指令,告诉计算机做什么是被称为软件。计算机机械执行指令的硬件。
计算机的CPU不能说C++。非常有限的指令集,一个CPU来理解称为机器码,或机器语言,或一个指令集。这些指令是组织已经超出了本介绍的范围,但要注意两件事情有趣。首先,每个指令由多个二进制数字,每一种只能是0或1。这些二进制数常被称为比特(二进制数字的简称)。例如,MIPS指令集都是32位长的指令。其他结构(如x86,你可能使用)有可能是一个可变长度指令。
例如,这里是一个x86的机器语言指令:10110000 01100001
第二,每一组二进制数转换成由CPU的指令,告诉它做一个非常具体的工作,如比较这两个数,或者把这个号码在存储位置。不同类型的处理器通常有不同的指令集,所以指令,将运行在一个奔腾4将无法运行在Macintosh PowerPC计算机。当计算机被发明以来,程序员必须直接用机器语言编写程序,这是一个非常困难和耗费时间的事情。
因为机器语言是如此的困难程序,汇编语言的发明。在汇编语言中,每个指令由一个短名称标识(而不是一套位),和变量可以通过名称而不是数字识别。这使得他们读和写很容易。然而,该CPU不能直接了解汇编语言。相反,它必须通过使用汇编程序翻译成机器语言。汇编语言往往是非常快的,和组装是今天仍然使用时,速度是关键。然而,汇编语言的原因是如此之快是因为汇编语言是针对一个特定的CPU。汇编程序的编写一个CPU将不能运行在另一个CPU。此外,汇编语言仍然需要大量的指令去做一些简单的任务,而不是非常可读的。
这里是相同的指令,在汇编语言:MOV AL,061h
为了解决这些问题,高层次的编程语言的发展。C,C++,Pascal,艾达,Java,JavaScript,Perl,都是高水平的语言。用高级语言编写的程序必须被翻译成的CPU可以了解之前,他们可以执行。有两种主要的方法是:编译和解释。
编译器是一种程序,读取代码和产生一个独立的可执行,CPU可以直接理解。一旦你的代码已经变成了一个可执行文件,你不需要编译运行程序。虽然它可以直观地似乎像高级语言会比汇编语言的效率明显降低,现代的编译器做一个转换成快速执行高级语言出色的工作。有时,他们甚至比人类编码器可以在汇编语言更好的工作!
这里是一个编译过程的简化表示法:
任何语言可以被编译或解释,然而,传统的语言如Pascal编写,而“脚本”语言如Perl和JavaScript解释。有些语言,如Java,混合使用两个。
高层次的语言有几个理想的性能。第一,高级语言的阅读和写作很容易。
这里是相同的指令为以上的C / C + +:= 97;
第二,它们需要较少的指令为较低级的语言,执行相同的任务。在C + +你可以像一个= b * 2 + 5;在一个线。在汇编语言中,这将需要5或6个不同的指令。
第三,你不需要关注细节如加载到CPU寄存器变量。编译程序或解释程序将为您处理所有这些细节。
第四,他们被移植到不同的架构,一个主要的例外,我们将讨论在一瞬间。