高级语言应该有多高?

时间:2010-09-22 00:26:57

标签: programming-languages language-design abstraction high-level

我知道这是非常抽象的,但我相信它非常专注。

目前有很多高级语言: C# Java VB Python 等所有这些都是为了提取低级复杂性并提供更加用户友好的编程体验。高级语言可以减少并且大部分时间完全删除执行低级特定于进程的操作(例如指针操作和内存管理)的必要性。许多还删除了平台细节(如文件操作,用户界面生成等)

我的两个问题是:

  1. 还有什么可以/应该被抽象出来?今天的高级语言中是否还有更多的低级语义将被进一步抽象出来?
  2. 通用高级语言在什么时候成为very high-level,a.k.a 目标明确

8 个答案:

答案 0 :(得分:4)

  1. 还有什么可以/应该被抽象?  它总是取决于你的目标。这里没有明确的界限,但我认为这取决于你需要多少控制权?在抽象和可能性之间通常存在相当大的权衡。
  2. 通用高级语言何时成为目标导向?  只要你能告诉语言/编程环境你想要什么,而不是它应该做什么。
  3. 实际上虽然......当然,这条线是完全随意的。

答案 1 :(得分:4)

在语言中包含非常高级别的抽象的一个问题是,有时它们不适合你想要完成的所有事情,所以你最终也需要较低级别的抽象。在同一种语言中使用高级和低级抽象的问题是,如果您可以通过低级抽象来探测高级抽象,那么高级抽象可能很容易泄漏。

例如,Java甚至不是那种高级别的语言,但它首先被设计为安全的(在抽象不泄漏的意义上)。因此,有些事情在Java中是不可能的。例如,您不能在Java中编写Java的垃圾收集器,也不能使用指针转换多态来滚动您自己的对象系统,或编写操作系统(至少不是传统的操作系统)。

相比之下,D提供高水平和低水平的设施。例如,D的垃圾收集器是用D语写的。这听起来不错,而且大部分都是如此。但是,当您开始在单个代码库中混合抽象级别时,抽象可能会泄漏,特别是如果您使用强制转换或联合来打败类型系统。因此,要在D中成功编程,您可能偶尔需要了解一些处理漏洞抽象的低级细节,即使您不需要它们来完成手头的任务。

答案 2 :(得分:2)

Tcl有一个正式的提案(Tcl Improvement Proposal (TIP) 131几乎可以很好地解决这个问题。它只需要一个志愿者来完成这项工作。甚至还有一个骨架实施,只剩下一些细节。< / p>

答案 3 :(得分:2)

某些特定领域的语言可能非常“高级别”。一个很好的例子是 Inform (用于编写文本冒险),其中编程语言与普通英语没有太大区别。以下是example project的摘录:

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."

这是实际的源代码。 :)

答案 4 :(得分:2)

我认为假设的未来语言将允许您编写验证程序而不是实现。然后编译器分析该验证器并(尝试)编写与您的规范匹配的实现。 (显然编译器必须失败或有时会回到暴力,因为它不是一个停止的解算器。)

基本上,与粗暴强制回答相比,逻辑语言具有荒谬的优化。

尽管验证代码可能比实现代码更长,但它可以提供更好的文档,并且更接近规范的样子。您可以交换更多的代码输入时间,以减少文档/规范/代码取消。

例如:

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;
}

答案 5 :(得分:1)

Hrm,我认为一些语言试图引领一些额外的抽象:Clojure的STM和Erlang的Actor模型。

  1. 关于我唯一能看到的,我看不出它将如何完成的是一种具有并发检查的语言,类似于静态类型检查。我这样说是因为停止问题存在。
  2. 当我刈草坪时,早上喝咖啡,检查我的电子邮件,告诉我新闻发生了什么。

答案 6 :(得分:0)

我认为框架是下一步。

答案 7 :(得分:0)

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

想象一下统一环境中那些人的联合,因为开发环境是开发的重要组成部分,正如可以访问的库及其访问级别一样。