设计可理解的软件(实际上,设计任何东西)的关键属性之一是开发良好的抽象集。目前,这些抽象包括函数,类,接口,递归和高阶函数等。但还有什么呢?我们怎样才能进一步抽象出我们的设计,这样我就不需要考虑任何,而是我直接,直接的目标?现有技术尚未利用哪些新颖的抽象?
另请注意,我列表中的大多数项目(可能是递归的例外)也是用于代码重用的工具。代码重用不这个问题的主题,并不是我认为良好抽象的必要方面。函数作为抽象很有用,因为它们隐藏了描述性名称背后的内容,而不是因为我可以从几个不同的地方调用它们。
一个构造不良的想法:一个驱动程序函数只调用一系列其他函数,而不维护它自己的任何状态,真的和函数一样吗?我们把它写成一个函数,并将其称为函数,但它可能代表了一个不同的概念?这通过在返回值和过程而不返回值的过程之间进行区分来反映在某些语言中。但也许有更好的方法来查看这种差异,以某种不同的方式来抽象相对不相关的步骤序列?
重申一下,未来的编程语言如何才能更好地促进抽象?
答案 0 :(得分:5)
强大的抽象工具Lisp macros。为什么不回顾过去和现在呢? :)
答案 1 :(得分:3)
他们可以使用自我暴露语义来更好地允许作为最终用户界面呈现的环境/语言的元编程。可变语言语义。
答案 2 :(得分:3)
我认为有些领域可能会富有成效:
Intentional Programming,或类似的东西。 Charles Simonyi的公司Intentional Software一直保持相当安静,但现在开始显示一些有希望的早期示威。
Functional Programming:来自函数式编程的想法越来越多地进入更主流的语言,如Python,C#(Linq,lambdas等)甚至C ++(C ++ 0x中的lambdas)。 F#正在成为一流的.NET语言,并在Visual Studio中得到全面支持。多核开发的兴起是推动功能概念更广泛采用的另一个因素。
Domain Specific Languages(DSL):与Intentional Programming背后的想法密切相关,微软似乎正在努力支持DSL作为.NET生态系统的一部分。
更复杂的IDE。在Visual Studio和IntelliJ等IDE中,重构工具已经有了一些积极的发展,但我认为这个领域还有很大的发展空间。从愚蠢的文本源文件转向更像抽象语法树表示的东西可以使在更高抽象级别上工作变得更容易。同样,这与Intentional Programming背后的许多想法相关联。
答案 3 :(得分:1)
通过内置检测愚蠢的想法,当被绊倒时,将开发人员锁定在IDE之外,并拒绝让他们再次编码。
OOP很好地促进了抽象。它的开发人员提出了糟糕的想法。
答案 4 :(得分:0)
让我们看看,如果我们为每种数据类型强制执行抽象,然后提供在类型参数上推广抽象的方法呢?等待!我刚刚彻底改造了CLU。我获得图灵奖吗?
任何对抽象在编程中的作用感兴趣的人都应学习CLU 。
答案 5 :(得分:0)
Eiffel code proofs。 (警告:链接到PDF!)
答案 6 :(得分:0)
功能编程,面向方面的编程,契约式设计,以及一般让我们远离命令式编程的黑暗时代的一切。
另外,我希望非托管软件开发将不复存在。 C ++和其他低级别的东西让我很伤心。 : - (
我喜欢我的LINQ,我的lambda运算符,我的扩展方法和流畅的界面。哦,我喜欢PostSharp.NET。和F#,但我想很难不爱F#。 : - )
答案 7 :(得分:0)
我会给出一个间接答案。在我们开发编程语言的更好结构之前,我们必须首先理解抽象理论。
哦,是的,有一个早于现代计算的实际理论,它被称为范畴理论。