我知道这很抽象,但是我认为它非常专注。

今天有很多高级语言: C#, 爪哇, VB, Python, 等等,所有这些都是为了抽象低级复杂性,并提供了更具用户友好的编程体验。高级语言可以减少,并且在大多数情况下完全消除了执行低级操作(例如指针操作和内存管理)的必要性。许多人还删除了平台详细信息(例如文件操作,用户界面生成等)

我的两个问题是:

  1. 还可以/应该抽象什么?当今的高级语言中是否还有更多的低级语义会进一步抽象?
  2. 通用,高级语言在什么时候变成 非常高级, ,又名 目标导向?
有帮助吗?

解决方案

在一种语言中包含非常高级别的抽象的问题之一是,有时它们不足以完成您想要完成的所有事情,因此您最终也需要较低级别的抽象。具有相同语言的高级别抽象的问题在于,如果您可以通过低级别的抽象来探测高级抽象,则很容易泄漏。

例如,Java甚至不是高级语言,而是设计为安全(从抽象不会泄漏的意义上),首先是最重要的。因此,有些事情在Java中是不可能做的。例如,您不能在Java中编写Java的垃圾收集器,也不能使用指针铸造多态性或编写操作系统(至少不是传统的)。

相比之下,D提供高水平和低水平的设施。例如,D's垃圾收集器是用D编写的。这听起来不错,并且在大多数情况下。但是,当您开始在单个代码库中混合抽象级别时,抽象会泄漏,尤其是当您使用铸件或工会打败类型系统时。因此,要在D中成功编程,您可能有时需要意识到一些低级细节以处理泄漏的抽象,即使您不需要它们即可完成任务。

其他提示

  1. 还可以/应该抽象什么?这总是取决于您的目标。这里没有明确的行,但我认为这取决于您需要多少控制?抽象和可能性之间通常会有相当大的权衡。
  2. 通用,高级语言何时以目标为导向?一旦您可以告诉语言/编程环境您想要什么,而不是该怎么做。

实际上,这条线当然是完全任意的。

TCL有一个官方建议(TCL改进建议(提示)131 这几乎可以永远解决问题。它所需要的只是一个志愿者来完成这项工作。甚至还有一个骨骼实现,只剩下一些细节。

某些特定域的语言可能非常“高级”。一个很好的例子是 通知 (用于编写文本冒险)编程语言与普通英语没有太大不同。这是一个摘录 示例项目:

The fireplace is scenery in the Entrance Hall. The description is "Unlit, vacant
[if Search is happening]. It is almost as though you are not expected[end if]."
The sound of the fireplace is "whistling wind". Understand "fire" or "whistling" 
or "wind" as the fireplace. Instead of burning the fireplace: say "There is no 
fuel prepared for a fire."

这是实际的源代码。 :)

我认为一种假设的未来语言将使您能够编写验证者而不是实现。然后,编译器分析了该验证者,并(尝试)编写与您的规格匹配的实现。 (显然,编译器有时必须失败或倒退,因为它不是停止求解器。)

从本质上讲,与强迫答案相比,一种具有荒谬优化的逻辑语言。

即使验证代码可能比实施代码更长,但它的作用却更好,并且更接近规格的外观。您将更多代码类型的时间用于更少的文档/规格/代码。

例如:

int32 Remainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures Math.Abs(result) < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    requires denominator != 0
    ensures result >= 0
    ensures result < Math.Abs(denominator)
    ensures exists n suchthat n*denominator + result == numerator
}

结果是:

//warning: suggested precondition: denominator != int32.MinValue due to Math.Abs
int32 Remainder(int32 numerator, int32 denominator) {
    return numerator % denominator;
}
int32 EuclideanRemainder(int32 numerator, int32 denominator) {
    return ((numerator % denominator) + denominator) % denominator;
}

HRM,我认为有几种语言试图将一些其他抽象率先率:与Actor模型一起使用STM和Erlang。

  1. 关于我唯一看不到我将如何完成的事情是一种并发检查的语言,类似于静态键入检查。我之所以这样说,是因为停止问题存在。
  2. 当它割草时,早上给我咖啡,检查我的电子邮件,并告诉我新闻中发生了什么。

我认为框架是下一步。

  • 目前一些“语言”是适用的 UAT (这与一个人可以称之为目标的接近 目标需要测试 因为这是可以解释的唯一方法,例如 合身 对于测试部分);这些可以与编程语言合并。
  • 几乎每种语言都可以访问越来越多的语言 高级接口 (IE, 抽象)需要您的代码越来越少,并从操作系统中抽象出来(与C ++ MFC相比,与C ++ Win32 API相比,请参阅C#中的GUI应用程序的容易程度)。
  • 至于编程语言,他们可以获得其他开发方法的更多最佳功能:我正在考虑 面向方面的编程 这可以帮助解决许多OO问题,并且已经在C#和Java中以某种形式进行了部分实施(例如有关记录,交易的问题...)。
  • 最终目标 (曾是?)允许UML VIESW以及图表的详细信息足以编码系统; UML也是一种语言(以更大的含义)。
  • IDE 还应包括:您现在可以设置如何从IDE调整对话框的方式,而您通常必须对其进行编码。稍后您可能可以 风格 您的整个应用程序或网站从主题列表中列出,就像任何可皮肤应用程序一样。还有更多。

想象一下,在统一环境中的人们的结合,因为开发环境是开发的重要组成部分,就像一个人可以访问的图书馆及其访问水平一样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top