编程语言简述

编程语言简述

翻译自:http://www.cplusplus.com/info/description/

翻译日期:2020年11月12日

译者:嵇志国

前言

计算机是我们所能使用的最多才多艺的工具。它们能够执行惊人的计算功能,能够不管信息的物理位置就轻易完成信息交换,能够简化许多日常工作,能够让我们自动化许多琐碎而繁杂的流程。但是,计算机并不是像我们人一样“聪明”。必须明确无误地告诉计算机应该做什么,而且计算机的母语和我们人类所说的任何语言大不一样。因而,在人类和计算机之间存在巨大的语言鸿沟。当人们希望计算机做什么事情时讲的是自己的语言,而计算机只根据自己的母语表示的指令——机器码来做事。至今为止,计算机还不能自己想出来应该做什么,它们遵照我们所创建的“程序”行事,这些程序就是计算机能够理解和执行的一套指令。

程序和编程语言概述

为了更好地与计算机沟通,确切地告诉计算机我们想做什么,我们开发出了许多编程语言,让这一沟通过程变得更容易。

根据项目类型不同,选择语言时有多种因素需要考虑,值得注意的因素如下:

  • 编译型语言、解释型语言、还是即时编译型语言

编译型语言是通过编译器翻译成目标机器的母语——机器码,编译器本身也是一个程序。这会产生非常快的代码,特别是经过编译器有效优化后,代码更快。但是,这样产生的代码不能跨操作系统移植,并且编译过程也会花费一定时间。

解释型语言是通过解释器读取并执行,解释器本身也是一个程序。虽然像解释器一样容易移植并且没有漫长的编译时间,但是解释程序通常比编译程序慢很多。

最后,即时编译型语言(或称JIT-compiled)是在程序需要运行时进行快速编译(通常稍微优化一下),在性能与可移植性之间取得平衡。

  • 高级语言、还是低级语言

在这里,语言的级别是指语言在多大程度上反应底层系统。换句话说,编程语言的级别是指其与计算机的母语——机器码有多相近。级别越高,越不相近。

低级语言通常很接近机器码,因而更适合编写驱动程序或高性能程序,这些程序直接访问硬件。虽然许多语言提供低级别元素,但一般来说,这一术语特指机器码本身和汇编语言。因为低级语言遵守其访问硬件的细枝末节,所以低级语言编写的程序通常难以移植到其他平台。实际使用中,低级语言从不解释执行,因为这与其目标相悖。

高级语言更关注人类容易理解的概念,比如对象或数学函数。高级语言通常比低级语言容易理解,比低级语言花费更少的时间来编程。作为取舍,人们通常需要牺牲对结果程序所做操作的某种程度的控制。然而,我们可以将高级语言和低级语言混合使用。

  • 类型系统

类型系统是指语言中不同类型的变量应该遵循的规则。某些语言(包括大部分汇编语言)没有类型概念,因此本节对它们不适用。然而,大部分语言(包括C++)有类型概念,这里的信息很重要。

○类型的强度:强类型或弱类型

强类型系统对不同类型变量的转换加以严格限制,没有类型转换语句的话不允许类型转换。理想的强类型系统会禁止无意义的隐式“转换”,例如整型转换成“Fruit”对象。弱类型系统会自动寻找让转换成功的方法。

○类型的表达:清单或推断

类型的表达是指编译器/解释器如何判断变量的类型。许多语言要求明确定义变量类型,因而依赖于一份类型清单(例如语言保留的类型关键字或自定义类型清单)。而另一些语言根据其使用的上下文推断变量的类型,属于推断类型。

​​​​​​​○类型的检查:静态或动态

如果编程语言是静态类型检查,那么编译器/解释器在程序运行或编译前执行类型检查。如果编程语言是动态类型检查,则类型检查发生在程序运行时。

​​​​​​​​类型安全:安全或不安全

类型安全是指编程语言在多大程度上禁止类型化变量的操作,这些操作可能导致未定义的行为或错误。类型安全语言会多做一些工作确保这类操作或转换不会发生,而类型不安全语言将安全责任推给了用户。

这些类型特性并不互相排斥,一些语言混合支持安全类型和不安全类型。

  • 支持的范式

编程范式是指编程语言支持的方法学或者编程方式。这里总结常见范式:

​​​​​​​​○声明式

声明式语言更多聚焦于语言要完成的目标,而不是语言为达成目标所采用的方法。这种范式可避免必须自己编写代码所带来的不希望的副作用。

​​​​​​​​○函数式

函数式编程是声明式编程的子集,倾向于采用数学函数或方程来表达问题。它特意避免了在命令式语言中常见的状态和可变变量的概念。

​​​​​​​​○泛型式

泛型编程关注于编写类型参数化算法骨架,在算法实际使用时再指定具体类型。因而,给程序员一些自由,以避免强类型约束规则。如果实现得好,这会是一种强大的范式。

​​​​​​​​○命令式

命令式语言让程序员给计算机一串指令清单,无需明确表示任务。这种范式可以看作与声明式编程正好相反。

​​​​​​​​○结构式

结构化编程语言旨在提供一些值得注意的结构形式,例如,直观地控制语句执行的顺序(if X then do Y otherwise do Z, do X while Y is Z)。这些语言通常废除了“jumps”,比如C和C++中提供的goto语句它们不提供。

​​​​​​​​○过程式

过程式有时候作为命令式编程的同义词,但过程式编程语言也可以是命令式结构化编程语言,支持过程和例程概念(等同于C和C++中的函数)。

​​​​​​​​○面向对象

面向对象编程(有时缩写OOP)是结构化编程的子集,它采用“对象”来表达程序,这意味着采用对象来建模现实世界。这种范式以可观的方式重用代码,并且容易让人理解。

  • 标准化

编程语言有正式标准吗?这对于确保在一种编译器/解释器下工作的程序,在其他编译器/解释器下同样也能工作非常重要。某些编程语言由ANSI(美国国家标准协会)标准化,另一些语言由ISO(国际标准化组织)标准化,还有一些语言是非正式但是事实上的标准,没有任何标准化组织来维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值