11

设计可理解的软件(实际上,设计任何东西)的关键属性之一是开发一组好的抽象。如今,这些抽象包括函数、类、接口、递归和高阶函数等。但还有什么?我们如何进一步抽象我们的设计,这样我就不需要考虑直接的直接目标了?现有技术尚未利用哪些新颖的抽象?

另请注意,我列表中的大多数项目(也许递归除外)也是用于代码重用的工具。代码重用不是这个问题的主题,也不是我认为好的抽象的必要方面。函数作为抽象很有用,因为它们将它们正在做的事情隐藏在一个描述性的名称后面,而不是因为我可以从几个不同的地方调用它们。

一个糟糕的想法:一个只调用一系列其他函数的驱动函数,不维护自己的任何状态,真的和函数一样吗?我们把它写成一个函数,把它称为一个函数,但也许它代表了一个不同的概念?这在某些语言中通过区分返回值的过程和不返回值的过程来反映。但也许有更好的方式来看待这种差异,一些不同的方式来抽象相对不相关的步骤序列?

所以重申一下,未来的编程语言如何更好地促进抽象?

4

8 回答 8

5

一个强大的抽象工具,Lisp 宏。为什么不回顾过去和现在?:)

于 2009-07-21T22:16:33.410 回答
3

我认为可能会取得成果的一些领域:

  • 故意编程,或类似的东西。Charles Simonyi 的公司Intentional Software一直保持沉默一段时间,但现在开始展示一些有希望的早期演示。

  • 函数式编程:函数式编程的想法越来越多地进入更主流的语言,如 Python、C#(Linq、lambdas 等)甚至 C++(C++ 0x 中的 lambdas)。F# 正在成为在 Visual Studio 中得到全面支持的一流 .NET 语言。多核开发的兴起是推动功能概念更广泛采用的另一个因素。

  • 领域特定语言(DSL):与意向编程背后的思想密切相关,微软似乎正在努力支持 DSL 作为 .NET 生态系统的一部分。

  • 更复杂的 IDE。Visual Studio 和 IntelliJ 等 IDE 中的重构工具已经有了一些积极的发展,但我认为这方面还有很大的进步空间。从愚蠢的文本源文件转向更像抽象语法树表示的东西可以更容易在更高的抽象级别上工作。同样,这与意图编程背后的许多想法有关。

于 2009-07-22T00:11:21.603 回答
3

他们可以使用自暴露语义来更好地允许对呈现为最终用户界面的环境/语言进行元编程。可变语言语义。

于 2009-07-21T22:26:43.110 回答
1

通过内置对愚蠢想法的检测,当这些想法被绊倒时,将开发人员锁定在 IDE 之外并拒绝让他们再次编码。

OOP 很好地促进了抽象。是开发人员提出了不完善的想法。

于 2009-07-21T22:15:54.677 回答
0

我将给出一个间接的答案。在我们可以开发更好的编程语言结构之前,我们必须首先了解抽象理论

哦,是的,在现代计算之前有一个实际的理论,它叫做范畴论

于 2011-12-26T00:35:18.567 回答
0

函数式编程、面向方面的编程、契约式设计以及通常使我们远离命令式编程的黑暗时代的一切。

另外,我希望非托管软件开发将不复存在。C++ 和其他低级的东西让我很难过。:-(

我喜欢我的 LINQ、我的 lambda 运算符、我的扩展方法和我的流畅接口。哦,我喜欢 PostSharp.NET。还有 F#,但我想很难不爱 F#。:-)

于 2010-07-09T14:08:59.243 回答
0

让我们看看,如果我们强制对每种数据类型进行抽象,然后提供将我们的抽象泛化到类型参数上的方法呢?等待!我刚刚重新发明了CLU。我能获得图灵奖吗?

任何对抽象在编程中的作用感兴趣的人都应该学习 CLU

于 2009-07-21T22:59:41.000 回答
0

艾菲尔电码证明。(警告:链接到 PDF!)

于 2009-07-21T23:26:24.580 回答