概述
☞ 前言
计算机是现代社会通用的工具之一。
它们能够执行快速的计算,便捷的信息交换,
它们简化了许多日常任务,
自动化地执行许多可能会很乏味或无趣的工作。
然而,计算机并不像我们一样“智能”。他们必须被明确地告知他们应该做什么,
他们的语言和我们说的任何语言都不一样。
计算机只能识别机器代码,因此,我们和计算机之间存在语言障碍。
到目前为止,计算机还不能知道它们自己应该做什么,它依赖于我们创建的程序,
也就是计算机能够理解和执行的指令集。
☞ 程序和编程语言
为了更好地与计算机沟通,人类开发了多种编程语言,使沟通过程更容易。
根据项目类型的不同,在选择语言时需要考虑很多因素。以下是一些值得注意的地方:
-
☞ 编译语言、解释语言和即时编译语言
编译语言通过编译器把程序翻译成目标机器的本地语言。
这通常会产生非常快的代码,特别是当编译器在优化方面非常有效时.
但是生成的代码可能不能很好地跨操作系统移植,并且编译过程可能需要一段时间。
解释型语言由一个叫做解释器的程序读取程序并执行。
虽然解释语言和解释器通常具有良好的可移植性,
并且不需要很长的编译时间,但它们一般比同等的编译型程序慢得多。
即时编译语言是在需要运行程序时才快速编译的语言
(通常只进行很少的优化),它提供了性能和可移植性之间的平衡。
-
☞ 高级语言和低级语言
即语言本质上有多大程度反映了底层系统。
换句话说,编程语言的等级是指该语言与计算机母语的相似程度。级别越高,相似度越低。
低级语言通常非常类似于机器代码,因此更适合需要真实访问硬件的,
如设备驱动程序或非常高性能的程序。
一般来说,低级语言表示机器代码本身和汇编语言,虽然许多语言提供了低级元素。
然而,由于低级语言受到它所访问的硬件的细微差别的影响,
用低级语言编写的程序通常很难移植到其他平台上。
高级语言更侧重于人类大脑容易理解的概念,如对象或数学函数。
高级语言通常比低级语言更容易理解,而且用高级语言开发程序所花的时间通常比
用低级语言开发程序所花的时间更少。
然而,作为一种权衡,这通常需要牺牲部分性能。
不过,在一种语言中混合高级和低级功能并非不可能。
-
☞ 类型
类型是指语言中不同类型的变量必须遵循的规则。有些语言(包括大多数汇编语言)没有类型,
因此本节不适用于它们。然而,由于大多数语言(包括c++)都有类型,因此该信息非常重要。
-
强类型和弱类型
强类型限制了不同类型的变量如何在没有转换语句的情况下相互转换。
理想的强类型系统应该禁止对没有任何意义的类型进行隐式“强制类型转换”,
比如将整数转换为结果对象。一个弱类型会试图让结果对象具有意义。
-
显式和隐式类型
即编译器/解释器如何确定变量的类型。
许多语言要求显式地定义变量类型,因此依赖于显式类型。
然而,有些程序会根据使用变量的上下文推断变量的类型,从而使用隐式类型。
-
静态或动态类型
如果一种语言是静态类型的,那么编译器/解释器在程序运行/编译之前进行一次类型检查。
如果语言是动态类型检查的,则在运行时检查类型。
-
安全或不安全类型
这个概念是指语言对可能导致未定义行为或错误的类型化变量进行操作的禁止程度。
安全语言将做更多工作以确保此类操作或转换不会发生,
而不安全语言将在这方面让用户承担更多责任。
这些类型特征不一定是相互排斥的,有些语言具有多种特征。
-
☞ 支持范式
编程范式是一种编程语言支持的编程方式或一些方法。以下是一些常见范例的总结:
-
声明式
声明式语言更多地关注于指定一种语言应该完成什么,而不是通过什么方法来完成它。
这样的范式可以避免由于必须自己编写代码而产生的不希望出现的副作用。
-
函数式
函数式编程是声明式编程的一个子集,它试图用数学方程和函数来表示问题。
它特意避免了命令式语言中常见的状态和变量的概念。
-
泛型
泛型编程的重点是根据实际使用算法时指定的类型编写骨架算法,
从而为希望避免严格的强类型规则的程序员提供一些宽容。
如果执行得当,它可以成为一个非常强大的范例
-
命令式
命令式编程允许程序员给计算机提供有序的指令列表,而不必显式地说明任务。
它可以被认为和声明式编程正好相反。
-
结构化
结构化编程旨在为一种语言提供某种形式的值得注意的结构,
例如对语句执行顺序的直观控制(如果X,则执行Y,否则执行Z,当Y是Z时执行X)。
这些语言通常不赞成“跳转”,例如在C和C++中GOTO语句提供的那些跳转。
-
过程式
有时它被认为是命令式编程的同义词,过程式编程语言也可以指命令式结构化编程语言,
它支持过程和子例程(在C或c++中也称为函数)的概念.
-
面向对象
面向对象编程(有时缩写为OOP)是结构化编程的一个子集,它用“objects”的术语来表达程序,
这意味着对现实世界中的对象建模。这样的范式允许以显著的方式重用代码,并且易于理解。
-
☞ 标准化
一种语言有正式的标准吗?这对于确保为一种编译器/解释器编写的程序能够与
另一种编译器/解释器兼容非常重要。有些语言是由ANSI标准化的,
有些是由国际标准化组织(ISO)标准化的,还有一些语言有一个非正式但事实上的标准,
没有任何标准组织维护。
☞ C++语言的特点
了解了必要的理论,那么就可以解释c++作为一种编程语言应该提供什么了。
-
C++是一种开放的iso标准语言
有一段时间,c++没有官方标准,而是由一个事实上的标准来维护,
然而自1998年以来,c++是由ISO的一个委员会标准化的。
他们的网页可以在这里访问。
-
C++是一种编译语言
c++直接编译成机器的本地代码,如果经过优化,它可能是世界上最快的语言之一。
-
C++是一种强类型的不安全语言
c++是一种期望程序员知道自己在做什么的语言,但其结果是程序员拥有大量的控制权。
-
C++支持显示类型和推断类型
在最新的c++标准中,c++同时支持显示类型和推断类型,允许灵活性和在需要时避免冗长的方法。
-
C++支持静态和动态类型检查
c++允许在编译时或运行时检查类型转换,这又提供了另一种程度的灵活性。
然而,大多数c++类型检查是静态的。
-
C++提供了许多范式选择
c++提供了对过程式、泛型和面向对象编程范式的显著支持,同时也提供了许多其他范式。
-
C++是便携式的
作为一种开放的世界上使用最频繁的语言之一,c++拥有广泛的编译器,
运行在许多支持它的不同平台上。专门使用c++标准库的代码可以在许多平台上运行,
几乎没有任何变化。
-
C++是向上与C兼容的
c++是一种直接建立在C语言基础上的语言,几乎与所有C代码兼容。
c++可以使用C库,而不需要修改库的代码。
-
C++拥有非常多的库支持
在流行的项目管理网站SourceForge上搜索“library”,会得到3000多个c++库的结果。
搜索结果的链接可以在这里找到。
作者:
Albatross