Programming languages 未来的编程语言如何更好地促进抽象?
设计可理解的软件(事实上,设计任何东西)的关键特性之一是开发一套良好的抽象集。如今,这些抽象包括函数、类、接口、递归和高阶函数等。但是还有什么呢?我们如何进一步抽象我们的设计,这样我就不需要考虑任何事情,除了我的直接目标?现有技术尚未利用哪些新颖的抽象 还要注意,我的列表中的大多数项(可能递归除外)也是用于代码重用的工具。代码重用不是这个问题的主题,也不是我认为良好抽象的必要方面。函数作为抽象很有用,因为它们隐藏在描述性名称后面,而不是因为我可以从几个不同的地方调用它们 一个结构不良的想法:驱动函数只调用一系列其他函数,而不维护自己的任何状态,这真的与函数相同吗?我们把它写成函数,把它叫做函数,但也许它代表了一个不同的概念?某些语言通过区分返回值的过程和不返回值的过程来反映这一点。但也许有更好的方式来看待这种差异,用不同的方式来抽象相对不相关的步骤序列Programming languages 未来的编程语言如何更好地促进抽象?,programming-languages,abstraction,Programming Languages,Abstraction,设计可理解的软件(事实上,设计任何东西)的关键特性之一是开发一套良好的抽象集。如今,这些抽象包括函数、类、接口、递归和高阶函数等。但是还有什么呢?我们如何进一步抽象我们的设计,这样我就不需要考虑任何事情,除了我的直接目标?现有技术尚未利用哪些新颖的抽象 还要注意,我的列表中的大多数项(可能递归除外)也是用于代码重用的工具。代码重用不是这个问题的主题,也不是我认为良好抽象的必要方面。函数作为抽象很有用,因为它们隐藏在描述性名称后面,而不是因为我可以从几个不同的地方调用它们 一个结构不良的想法:驱动
因此,重申一下,未来的编程语言如何更好地促进抽象?内置了对愚蠢想法的检测,这些想法一旦被绊倒,就会将开发人员锁定在IDE之外,并拒绝让他们再次编码
OOP很好地促进了抽象。是开发人员提出了格式不好的想法。一个强大的提取工具。为什么不回顾过去和现在呢?:) 他们可以使用自暴露语义更好地允许作为最终用户界面呈现的环境/语言的元编程。可变语言语义。让我们看看,如果我们对每种数据类型强制进行抽象,然后提供通过类型参数概括抽象的方法,怎么样?等待我刚刚重新发明了。我能获得图灵奖吗
任何对抽象在编程中的作用感兴趣的人都应该学习CLU。(警告:链接到PDF!)一些我认为可能有成效的领域:
- ,或类似的东西。查尔斯·西蒙尼(Charles Simonyi)的公司保持沉默已有一段时间,但现在开始展示一些有希望的早期演示
- (DSL):与有意编程背后的理念密切相关,微软似乎正在努力支持DSL作为.NET生态系统的一部分
- 更复杂的IDE。IDE中的重构工具如VisualStudio和IntelliJ已经有了一些积极的发展,但我认为在这方面还有很大的进步空间。从哑文本源文件转移到更像抽象语法树表示的东西可以使在更高的抽象级别上工作更容易。同样,这与有意编程背后的许多想法有关
我喜欢我的LINQ,我的lambda操作符,我的扩展方法和我流畅的界面。哦,我喜欢PostSharp.NET.和F#,但我想很难不喜欢F#:-)我会给出一个间接的回答。在我们开发更好的编程语言结构之前,我们必须首先理解抽象理论
哦,是的,有一种比现代计算更早的实际理论,叫做范畴理论。好吧,那么Lisp宏在哪些方面可以更好地促进抽象呢?:)使用宏基本上等同于创建一种新的语言,因此我认为这个问题仍然是相关的。如果你可以编写微型语言(不复杂)来描述特定类型的问题,那么你就有了一个强大的抽象形式。当然,抽象是好的,但另一方面,它可能很难控制:-DOkay,讽刺,但我越来越倾向于使用限制性更强的编译器。我也同意,如果你真的理解OOP,那就足够了,但是有很多人不理解它。一种实施良好OO设计的语言可以解决很多问题,这就好比说现在的编程语言没有改进的余地。这是BS,依我看。见上面尼克D的回答:-)(是的(但你能)(改变(环境中的一切))?暴露更多似乎与增强抽象性的目标背道而驰。这取决于暴露对开发过程的影响。如果你可以改变Java的所有语法和语义…你仍然可以用Java编程…或者打破障碍。选择,而不是强迫暴露或增加复杂性。问一个非常有趣的问题+1被忽略的“类型系统”:类型是一种抽象,也是一种重要的类型,但+原因与@Turing Complete所说的相同。“非托管软件开发将不再存在”-当微软开始将Singularity作为商业项目出售,Linux被移植到Python时,你可能已经有了