主页

索引

模块索引

搜索页面

5代编程语言

https://img.zhaoweiguo.com/knowledge/images/architectures/evolutions/lang_regexp.jpeg

编程语言的发展历程。最初之所以提出第 4 代语言的概念,其目的就是希望非专业程序员也能做应用开发,不过就目前情况来看,这个目的并没有得到很好的实现。

编程范式:

命令式、声明式(包括了函数式、逻辑式等)、面向对象式、泛型式、并发式、切面式

命令式编程范式

备注

命令式编程范式,主要就是模拟电脑运算的过程。更进一步地来说,是直接模拟目前主流的冯・诺依曼机(Von Neumann Machine)的运算过程,是对冯・诺伊曼机运行机制的抽象。

冯・诺伊曼机的基本特点是,在程序计数器的集中控制下,按顺序依次从内存中获取指令和数据,然后进行执行,因此它是以控制驱动的控制流方式工作的:

1. 冯・诺依曼机(Von Neumann Machine)
2. 以数据驱动的数据流方式工作的数据流机
3. 以需求驱动的数据流方式工作的归约机

从编程范式的角度来看:

命令式编程的世界观是:程序是由若干行动指令组成的有序列表;
命令式编程的方法论是:用变量来存储数据,用语句来执行指令

采用命令式编程范式的程序,是由若干行动指令所组成的有序指令列表,
    也就是由一系列指明执行顺序的祈使句 ——“先做这,再做那” 所组成,属于行动导向,
    强调的是定义问题的解法 —— 即 “怎么做”,因而算法是显性的而目标是隐性的。

从纯粹性的角度来说,命令式编程范式的代表语言为 Fortran、Pascal、C 等。

声明式编程范式

  • 声明式编程的世界观是:程序是由若干目标任务组成的有序列表

  • 声明式编程的方法论是:用语法元素来描述任务,由解析引擎转化为指令并执行

备注

声明式编程范式,主要是模拟人脑思维的过程。声明式重目标、轻过程,专注问题的分析和表达,而不是算法实现。它不用指明执行顺序,属于目标导向,强调的是定义问题的描述 —— 即 “做什么”,因而目标是显性而算法是隐性的。

从编程范式的角度来看:

1. 声明式编程的世界观是:程序是由若干目标任务组成的有序列表;
2. 声明式编程的方法论是:用语法元素来描述任务,由解析引擎转化为指令并执行

第 4 代,面向问题的语言,基本上都属于声明式编程范式,而且往往也只支持声明式编程范式

声明式编程的代表语言为 SQL、SAS、SPSS、LaTeX、Regex(即正则表达式)等

声明式编程的代表语言大都是领域特定语言 DSL:

1. SQL 是专用于解决数据库操作问题的语言
2. SAS 和 SPSS 是专用于解决统计分析问题的语言
3. LaTeX 是专用于解决排版问题的语言
4. Mathematica 是专用于解决科学计算问题的语言
正则表达式(Regex,Regular expression),则是专用于解决文本查找匹配问题的专门语言

备注

声明式编程范式的主要特点就是,重在目标而非过程、重在描述而非实现,以声明式语句直接描述要解决的目标任务,专注于任务的分析和表达。声明式没有专注于处理逻辑和算法实现的过程,它具体的处理逻辑和算法实现是由语言解析引擎来负责的。

备注

通过声明式编程语言所编写的程序,到底是如何实现功能的呢?事实上,这是由语言解析引擎,也就是编译器或解释器,最终通过命令式编程来实现功能的。不过,这仅限于冯・诺依曼机中的编程语言,非冯・诺依曼机中的编程语言就不一定是这样了。声明式编程是建立在命令式编程的基础之上的。这也是声明式编程比命令式编程更为高级、更加简单、更省人工的原因。事实上,正如前面所讲过的,目前基于冯・诺依曼机的几乎所有编程语言都是以命令式编程为基础。

正则表达式的语法元素本质

备注

正则表达式的语法元素本质上就是程序逻辑和算法

1. 星号量词 “*” 代表的是不定次数循环结构,而前后多个星号量词的嵌套就是多层不定次数循环结构的嵌套
2. 或运算符,也就是竖线 “|” 这个元字符,就是高级语言的处理逻辑 “分支结构” 的体现
3. 用于分组的圆括号 “()”,就相当于高级语言的作用域。

正则表达式的基本语法结构与一般高级编程语言差不多:

主要就是
1. 顺序结构(也称为连接结构)
2. 分支结构(也称为选择结构)
3. 循环结构(也称为重复结构)三种
4. 其他都是这三种基本语法结构的组合,再加上一些语法糖

主页

索引

模块索引

搜索页面