三种范式

哈Ha!

我提请您注意罗伯特·C·马丁(鲍勃叔叔)的文章“ 三个范式 ”的翻译。

图片

在过去的40年中,硬件技术使我们设备的计算能力提高了二十多个数量级。 现在,我们在手机上播放《愤怒的小鸟》,它具有上世纪70年代使用氟利昂冷却的超级计算机的处理能力。

但是在同一40年中,软件技术没有太大变化。 最后,我们仍然使用60年代使用的if,while循环和赋值运算符。 如果我从1960年开始聘用一名程序员,然后把他带到这里,以便他可以坐在我的笔记本电脑上编写代码,那么他要花24小时才能从震惊中恢复过来,但是他可以编写这段代码。 原则并没有太大改变。

在编写程序的过程中,发生了三件事。 我不是在谈论硬件,不是在谈论计算机速度,也不是在谈论我们拥有的令人难以置信的工具。 我的意思是代码本身。 代码中发生了三件事。 您可以称它们为范例。 他们都在40年前的十年中被“发现”。

* 1968年- 结构化程序设计Edsger Dijkstra撰写了他的文章:“关于Go To运算符的危险”,以及许多其他文件和文章建议放弃繁琐的Go To方法,而用if / then / else和while循环这样的工具代替它。

1966年- 面向对象的编程Ole-Johan DahlKristen Nyugor研究了Algol语言“发现”对象并创建了第一个面向对象的语言Simula-67。 尽管这一成就有很多前景,但它并未为我们的代码带来任何新功能。 另外,它删除了一个。 毕竟,随着多态性的到来,对函数指针的需求消失了,但实际上消失了。

* 1957年- 函数式编程约翰·麦卡锡(John McCarthy)创建了第一种功能语言Lisp。 Lisp是基于30年代Alonzo Church创建的lambda演算 。 尽管函数式编程有很多前景,但是所有函数式程序都有一个巨大的局限性。 他们不使用分配。

三个范式。 三个限制。 结构化编程为直接控制传递设定了规则。 面向对象的程序设计为控制的间接传递引入了规则。 函数式编程引入了分配限制。 所有这些范例都带走了一些东西。 他们都没有添加任何新功能。 他们每个人都有更高的要求,减少了机会。

我们可以创建另一个范式吗? 还有什么可以删除的吗?

40年来,一直没有新的范例,所以也许这是一个很好的信号,表明没有什么可以寻找的了。

我们应该使用所有这些范例,还是可以选择?

随着时间的流逝,我们决定实施它们。 通过取消Go To原则(如Dijkstra在他的文章中建议的那样),可以引入第一个结构化编程。 通过使用多态性(例如Java,C#,Ruby)用现代语言中的函数替换指针,已成功实现了OOP。 因此,至少对于这两个问题,答案是我们必须使用它们。 所有其他选项均被排除或至少受到严格限制。

但是函数编程呢? 我们应该使用没有赋值运算符的语言吗? 大概是! 我们已经在编写可以在多个内核上正常工作的代码,并且这些内核像兔子一样繁衍。 我的笔记本电脑有4核。 我的下一个很可能有8个。16.之后的16个。您将如何为4096个处理器编写可靠的代码,以争取访问总线的权利?
我们几乎无法获得两个并行线程来工作,更不用说2 ^ n个处理器了。

为什么函数式编程是解决此问题的重要组成部分? 因为此类程序不使用赋值,这意味着它们没有副作用,因此,不存在可升级性相关的问题-至少这是理论。

在以后的博客中,我们将更多地讨论函数式编程。 在上述三个范例中,令我印象深刻的是它们的日期。 他们很古老,几乎比我大。 自42年前我16岁起,就再也没有新的了。

Source: https://habr.com/ru/post/zh-CN475588/


All Articles