(转)3、编程语言演变

翻译转帖

原文链接 https://herbertograca.com/2017/07/10/programming-language-evolution/

这篇文章是软件架构编年史的一部分,一系列关于软件架构的文章。在它们中,我写了我在软件架构方面学到的东西,我如何看待它,以及我如何使用这些知识。如果您阅读本系列之前的文章,这篇文章的内容可能会更有意义。

编程语言本身并不是架构的人工制品,但如果我不写它,我会觉得《软件架构编年史》会漏掉一些东西。

因此,让我们快速回顾一下编程语言的历史及其演变,并检查我们可以从中学到什么。出于好奇,我在帖子中添加了一些日期,它们应该被视为粗略的估计,重要的是进化顺序和他们试图解决的问题。

1950 年代 - 非结构化编程

组装 ~1951

软件开发是一项非常晦涩的活动,仅在世界上少数几个地方进行。汇编是当时的热门语言,它使用非常低级的操作,如“添加”、“子”、“转到”和直接操作内存地址。构建一个简单的应用程序既缓慢又困难。要创建一个简单的 IF 语句,我们需要几行代码,而对于一个循环,它需要多几行…… 分组和重用代码片段的可能性是后来出现的,因此编码风格非常线性,代码重用是仅限于在文件内或文件之间复制粘贴代码。

1960 年代 - 结构化编程

Algol ~1958, Fortran

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

1970 年代 - 过程和函数式编程

帕斯卡 ~1970, C ~1972

Advertisements
REPORT THIS AD

程序和功能代码在 1970 年代开始活跃起来。这时候我们终于有了:

  • 程序:不返回数据的指令集;
  • 功能:返回数据的指令集;
  • 数据结构:记录,类似于关联数组;
  • 模块:可以导入到其他代码文件中的代码文件。

在 1968 年 Edsger W. Dijkstra 给计算机协会 (CACM) 通信协会的一封题为“被认为有害的转到声明”之后,在 1970 年代也创造了“意大利面代码”一词。

正是在 1970 年代后期,面向事件编程的第一个想法浮出水面,Trygve Reenskaug 撰写了关于 MVC(使用事件)的论文。

因此,通过这些改进,我们有了更好的可重用性,因为子程序(过程和函数)可以对不同的数据执行相同的逻辑。我们还可以通过将相关数据分组为复杂的数据结构来对领域概念进行建模。最后,我们给出了解耦和模块化的第一步,我们可以创建可在其他代码文件和事件中重用的代码,以将客户端代码与正在执行的逻辑解耦。

1980 年代 – 面向对象编程

Simula ~1965, Smalltalk-71 ~1971, C++ ~1980, Erlang ~1986, Perl ~1987,

Python ~1991, Ruby ~1993, Delphi, Java, Javascript, PHP ~1995

OOP 的理论和思想早在 1960 年代就开始了,并在 1960 年代首次实现:Simula。

然而,在 1980 年代,当前编程范式的使用变得普遍:面向对象编程,具有可见性级别、方法(消息)、对象、类以及后来的包。这与说增加封装模块化是一样的:

  • 可见性级别允许我们控制哪些代码可以访问一组特定的数据;
  • 允许我们定义/建模领域概念;
  • 对象允许我们拥有相同领域概念的不同实例;
  • 允许我们将代表域或功能概念的类组合在一起,并共同完成某些任务;
  • 方法,在功能上代表过程和函数,但在概念上应该被视为可以发布给特定类型对象的消息(或者更好的是,命令)。

1990 年代 – 面向主题和面向方面的编程

在 1990 年代,面向主题的编程和面向方面的编程出现了。

Advertisements
REPORT THIS AD

面向主题的程序设计根据“”对象的不同,要求对对象进行不同的表示。例如,当一个人看着一棵树时可能会看到木头,而一只鸟可能会看到大量的食物和住所。将此转换为编程,这意味着对象属性和行为可能会有所不同,具体取决于谁向对象发送消息(谁在对象上触发方法)。

面向方面编程试图通过在“编译”时注入额外的代码,将横切关注点与实际业务逻辑完全分离。一个方面是,例如,一种方法的名称。例如,一个横切关注点是日志记录。使用 AOP,我们可以简单地将系统配置为将执行日志记录的代码注入到所有符合特定模式的方法中,例如,“记录对名称以 'find' 开头的方法的所有调用”。(TYPO3是使用 AOP 的 CMS 示例)

超越面向对象

OOP成立后,最大的重点是调整自己为Web编程,发展现有语言,创建专门用于Web开发的新语言,开发框架,为当今海量的请求和数据调整工具和架构.

有一些发展编程语言的尝试,例如面向主题的编程(对象行为不同,取决于激发行为的主题)或面向方面的编程(编译时的代码注入),但本质上是编程语言范式没有太大变化,因为我们在大多数情况下仍然使用 OOP,尽管最近函数式语言似乎已经获得了一些采用(也许是炒作?)。

结论

我想说明的一点是,在软件开发历史的最初几十年中,编程语言的发展是为了提供可重用性,同时也为软件的变化做好准备(无论是改变功能、重构还是完全交换一段代码) ),它们向Modularity(低耦合)和Encapsulation(高内聚)方向发展。

正如我们将在我的下一篇文章中看到的,架构继续这种演变,尽管在更高的抽象层次上。

THE END
分享
二维码
< <上一篇
下一篇>>
---->