Chr*_*nte 5 abstraction programming-languages language-design high-level
我知道这是非常抽象的,但我相信它非常集中.
今天有很多高级语言:C#,Java,VB,Python等,它们都是为了抽象出低级复杂性并提供更加用户友好的编程体验而创建的.高级语言可以减少并且大部分时间完全删除执行低级特定于进程的操作(例如指针操作和内存管理)的必要性.许多还删除了平台细节(如文件操作,用户界面生成等)
我的两个问题是:
在语言中包含非常高级的抽象的问题之一是,有时它们不足以满足您想要完成的所有任务,因此您最终还需要较低级别的抽象。使用同一语言的高级抽象和低级抽象的问题在于,如果您可以通过低级抽象来探测高级抽象,则高级抽象很容易泄漏。
例如,Java 甚至不是一种高级语言,但它的设计首先是为了安全(在抽象不会泄漏的意义上)。因此,有些事情在 Java 中是不可能做到的。例如,您无法在 Java 中编写 Java 的垃圾收集器,或者使用指针转换多态性滚动您自己的对象系统,或者编写操作系统(至少不是传统的操作系统)。
相比之下,D 提供高级和低级设施。例如,D 的垃圾收集器是用 D 编写的。这听起来不错,而且在大多数情况下确实如此。但是,当您开始在单个代码库中混合抽象级别时,抽象可能会泄漏,特别是当您使用强制转换或联合来击败类型系统时。因此,为了成功地用 D 进行编程,您可能偶尔需要了解一些低级细节来处理泄漏的抽象,即使您不需要它们来完成手头的任务。