计算机语言有什么分类?每种计算机语言都有什么应用领域?有其中一种语言基础对学其他的语言有什么帮助?

文章介绍了编程语言的三大主要类别——声明式、命令式和函数式,以及它们之间的区别和相互融合。命令式语言如C++、Java和脚本语言侧重于如何执行计算,而函数式语言如Haskell强调纯函数和数据结构操作。编程语言之间的界限并不绝对,现代语言常融合多种范式。文章建议选择某一类语言深入学习,以理解编程语言的核心原理。
摘要由CSDN通过智能技术生成

分类

根据《Programming Language Pragmatics》 1.2 节,编程语言的谱系(spectrum)大致如下:

5b3b382e86de4b758edbd083926016e0.jpg

 编程语言大体可分为声明式(declarative)与命令式(imperative)。至于这两种方式的区别,引用书中一段话:

In the declarative languages, the focus is on what the computer is to do, and in the imperative languages, the focus is on how the computer should do it.

命令式语言中包含了大多数目前最流行的开发语言,如 C 系(C/C++、Java、C# 等)与脚本语言(Python、JavaScript 等)。命令式语言的计算基于变量的修改,即通过 side effect 改变内存中的变量值从而影响后续的计算。

 

声明式语言中最重要的一种是函数式语言(functional language)。在函数式语言中,函数是最基本的元素;而一个程序可以看成一个函数,给定输入就能给出相应的输出。处理问题时,它们往往依赖于数据结构(比如 list)的反复拆解、构造与传递来进行计算。至于逻辑式语言(logical language)我不太熟悉,按下不表。

 

值得注意的是,这些语言之间的区分并不那么严格,比如 Python 和 JavaScript 中有函数式编程的特点(函数作为一等公民、闭包),而 Lisp 中也包含一定的命令式语言的元素(赋值)。实际上,在现代的语言当中我们可以明显感觉到几种范式的融合,Python 就是一个很好的例子。

 

实际上,这些范式(paradigm)的区别根本上来自于其所依赖的数学基础,即计算模型(computational model):图灵机(命令式语言)、lambda calculus(函数式语言)、predicate calculus(逻辑式语言)。比如图灵机中存储带的写入操作就对应着命令式语言中的赋值操作。具体不再展开。

 

应用

举几个例子:

 

平台相关。比如 Java -> Android,C -> Unix,C# -> Windows,Swift/Obejective-C -> iOS/OS X,JavaScript -> Web;

专业领域。Matlab、Fortran -> 科学计算,Lisp -> 人工智能(这是一个古老的说法了...),VHDL -> 电路设计;

不同的开发需求。C/C++ 运行速度快 -> 系统级编程,Java 有 JVM -> 跨平台软件开发,Python 方便 -> 对运行效率要求不高而对开发速度要求高;

等等。

 

语言间的相关性

其实各类语言只学一门(当然要学好),其他同类语言基本上都不在话下。比如学会了 C++(这个要求相当高),Java、C# 也就不难;学会了 Haskell,ML 系、Lisp 系也能够轻松理解。所以不妨挑选一类中最流行或最感兴趣的一门语言进行学习,也许就能达到事半功倍的效果。

 

最后,强烈推荐阅读《Programming Language Pragmatics》(中译版《程序设计语言——实践之路》),书中对编程语言的各个概念和要素进行了讨论并用实际的语言例子进行阐述,可以算是 PL 方面的入门读物。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值