C++ 自学教程 第0.2章 编程语言概述
随着科技发展,现代电脑的运行速度没有最快只有最快。但是这个速度的提升也有一定的桎梏。事实上,电脑只能理解一些非常有限的指令,这些指令也必须非常精确。一个程序(或被称作应用或软件)就是一系列对电脑的指令。而硬件是执行这些指令的物理机械。
机器语言 (Machine Language)
一台电脑的CPU并不能直接理解C++,相反, CPU本身只能理解被称为机器代码(或机器语言)的指令。这些指令的具体编写超出了本教程的范围,但是有以下两点这里需要介绍。其一,这些指令由一系列二进制代码组成,也就是0或者1。这些二进制代码又被成为比特(bits)。
例如一个X86的机器语言指令可能是:10110000 01100001
其二,这样一组二进制代码会被CPU翻译成CPU可执行的指令。比方说比较两个数字的大小,或者把这个数储存在内存的某处。不同的CPU通常使用不同的指令。所以在电脑刚被发明的‘上古时代’,程序员先辈们编程时需要针对不同的CPU用不同的机器语言编程。现在来看实在简直是难于当天,并且非常费时。
集成语言 (Assembly Language)
因为直接使用机器语言编程十分困难,人们发明了集成语言。集成语言用一个简短的名称来代替指令,变量也用名字来指代而不是数字。这大大提高了程序的可读性并降低了编译难度。但是CPU不能直接处理集成语言。人们使用集成器(assembler)把集成语言翻译成CPU可理解的机器语言。集成语言编译的程序运行速度通常极快,以至于到现在都还在被使用(运行速度非常重要的情况下)。但是集成语言速度如此之快的原因是他们通常是为某个CPU独家定制,因此无法在别的CPU上使用。同时,集成语言需要大量指令来完成一项简单任务,也依旧离人类可读有一定距离。
比方说,上述的机器语言指令在集成语言中看起来是这样:mov al, 061h
高级语言 (High-level Languages)
为了解决上述问题,人们开发了高级语言:C, C++, Pascal, Java, Javascript, Perl 等等。这些高级语言使得程序员不再需要考虑运行程序具体会使用哪个电脑。但是他们必须经过编译或解释转变成CPU可理解的形式。
编译器(Compiler) 能够理解一段代码并将其转化为CPU能够理解的可执行文件。当你的代码被编译成了可执行文件后,运行程序将不再需要编译器。虽然高级语言听上去效率将会大大低于集成语言,但是现代编译器已经能高速完成编译。有时候甚至会比那些直接用集成语言编写的程序还要快!
下图给出了简化的翻译流程:
解释器 (Interpreter) 能够跳过翻译机器语言的阶段并直接执行一段代码。解释器通常灵活性更强,但是每次运行都需经历一次解释阶段而效率较低。这也就是说,每次运行程序时都需要解释器解释。
简化的解释流程如下:
所有高级语言都能被编译或解释。传统上讲,C,C++和Pascal通常先被编译,而Perl 跟Javascript使用解释器。其他语言,比如JAVA可能两个都会使用。
高级语言有以下几个优势。
首先,高级语言的可读性强,编写简便。
比如上述的机器语言指令用C/C++来写会是:a = 97;
其次,高级语言需要较少的指令就能执行某一任务。比如用C++,一行代码就可以完成 a = b * 2 + 5; 而集成语言可能要5,6个指令才能完成。
第三,程序员不需要考虑读取变量需要具体使用内存的哪个部分。编译器或解释器会帮助处理。
第四,通常拥有较高的便携性。除却考虑到不同平台使用平台特有的函数库。在本教程中,我们会标注这些特殊情况。
这种便携性在不同平台间可能是不成立的,比如说Windows系统自带的一些函数。这类特点函数可能能简化某些特定问题,但可能无法被其他平台兼容。本教程会标注出这类特殊情况,便于读者理解。
说明: 这系列笔记是基于网上一个英文教程[LearnCPP][1]。
第一次做这类教程的翻译,没什么经验。如果有关于格式或者表达形式的意见,欢迎大家提出哦~ 阅读愉快