zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

软件架构(二)编程语言的历史

2023-02-18 16:36:32 时间

一、编程语言发展史-分类篇

要了解架构的历史,作为架构落地的载体,编程语言的历史有必要先了解下。要注意的是,编程语言并不是一种架构的产出物。架构是设计,编程语言是实现落地的工具。从整体大的发展史来看,可以归纳为3种语言史:机器语言、汇编语言、高级语言。如下图所示:

1.1 机器语言

计算机用0和1来表示电路元件的低电平和高电平,这种语言就是机器语言。由于直接和硬件的电路元件物理逻辑耦合,这种编程代码只能在特定的机器上执行。但由于天生的0/1,快速解释特性,运行效率很快。机器语言,也就是第一代编程语言。

1.2 汇编语言

  即第二代计算机语言,用一些容易理解和记忆的缩写单词来代替一些特定的指令。汇编语言(Assembly Language)亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

  汇编语言仍是面向机器的语言,很难从其代码上理解程序设计意图,设计出来的程序不易被移植,故不像其他大多数的高级计算机语言一样被广泛应用。它通常被用在底层,通常是与硬件交互的场合,尤其在嵌入式领域还是占有一席之地

1.3 高级语言

  在编程语言经历了机器语言,汇编语言等更新之后,为了提高程序的复用性和易用性。高度封装一些底层的实现逻辑,高级语言应运而生。典型的代表就是Python、C、Java。根据其生效方式可分为编译型(使用编译器一次编译,单系统多次运行,速度快)、解释型(运行时使用解释器编译,可跨平台,速度慢)。其中解释型的有:Python、Ruby、PHP、JavaScript;  编译型的有:C、C++、Delphi、Golang。Java比较特殊,是先编译,后需要JVM在系统上解释运行。

 

二、编程语言发展史-风格篇

编程语言也有自己的风格、设计模式。这一节我们从风格发展史来看编程语言。如下图所示:

2.1 非结构化编程

汇编 ~1951

软件开发曾经是一项高深莫测的活动,只发生在世界上很少的地方。那时汇编是最热门的语言,它使用非常底层的“add”“sub”“goto”操作并直接操纵内存地址。创建一个简单的应用程序都很困难,也要花费很长的时间。它需要好几行代码才能实现条件语句,而实现循环就需要更多代码行了...划分和重用代码段的能力是它之后的事情了,所以它的编码风格就是一路到底,代码重用仅限于在单个文件中或多个文件之间复制粘贴代码。

2.2 结构化编程

Algol ~1958

结构化编程出现,引入了代码块、控制结构(if/then/else、case、for、while、do、…)和子例程。然后,我们可以创建更有趣的代码流,更重要的是,我们可以对代码指令进行分组并重用它,尽管有一些限制,比如子例程总是作用于相同的全局变量。可复用性想法第一次落地了。

 

三种风格/范式:

1.POP(Procedure Oriented Programming)面向过程编程: Pascal ~1970, C ~1972

过程式、函数式编程,诞生于20世纪70年代。这时我们终于拥有了:

  • 过程:一组不返回数据的指令;
  • 函数:一组返回数据的指令;
  • 数据结构:记录,和关联数组类似;
  • 模块:可以在其它代码文件中导入的代码文件。

伴随着这些改进,我们有了更好的重用性,因为子例程(过程或函数)可以对不同的数据执行同样的逻辑。我们还可以通过将关联的数据划分在一起编程复杂的数据接口来对领域概念建模。最后,我们迈出了解耦和模块化的第一步,我们可以创建在其他代码文件中重用的代码,还可以创建事件来分离调用方代码和执行逻辑。

2.OOP(Object Oriented Programming)面向对象编程: Simula ~1965, Smalltalk-71 ~1971, C++ ~1980, Erlang ~1986, Perl ~1987,Python ~1991, Ruby ~1993, Delphi, Java, Javascript, PHP ~1995

OOP的思想和理论早在20世纪60年代就开始萌芽了而且在那个年代第一次被Simula 实现了。然而,现在这种编程范式的使用方法却是在20世纪80年代形成的:拥有可见性级别、方法(消息)、对象、类以及包的面向对象编程。核心就是encapsulation封装modularity模块化

  • 可见性级别 控制一组特定的数据能被哪些代码访问;
  • 定义/建模领域概念;
  • 对象 创建出同样领域概念的不同实例;
  • 将类划分到一组表示领域概念或功能概念,来共同完成某个任务;
  • 方法 从功能性角度来看代表了过程和函数;

3.AOP(Aspect Oriented Programming)面向切面编程: 面向主观编程和面向切面编程在 20 世纪 90 年代横空出世。典型的Python、Java、Php都有相应实现。

面向主观编程:现在不太常见了,这里不展开讲。

面向切面编程:试图通过在“编译”期注入额外的代码来将横切面的关注点从真正的业务逻辑中分离出来

 

21世纪web语言爆发

早期其实是没有纯前端语言的,是和后端语言一体化的。慢慢MVC模式风靡后,渐渐进化出了纯前端语言。进入21世纪,前端语言也如雨后春笋般增长起来,典型的有AJax、jQuery、AngularJS、ReactJS、VueJS、HTML5等。

 

 

==============参考============

https://herbertograca.com/2017/07/10/programming-language-evolution/