有没有超高级语言?[关闭]


20

从历史上看,HLL类似于C,Fortran或Pascal,而VHLL则类似于Ruby或Python。我熟悉术语4GL,5GL,DSL和LOP,那些不熟悉的人应阅读Wikipedia的定义。我正在寻找UHLL。

我的问题是:是否有计算机语言可以提高生产力另一个数量级,有人在使用它们吗?

更高的生产力意味着更少的编写代码和更少的程序员获得结果,更少的错误和更少的调试,更紧密的代码和需求之间的概念联系,更少的修改和维护工作。

我感兴趣的主要领域是通用业务和消费者应用程序,具有GUI或浏览器前端,数据持久性以及与其他系统(如打印和电子邮件)的连接。其他人可能会专注于其他地方。

我认识到,其中某些语言可能是特定于域的,它们可能仅比大型且功能强大的应用程序的配置功能多。Excel电子表格属于此类别。

我认识到其中一些语言可能看起来很笼统,但范围可能仍然狭窄,不适合许多问题。例如,对于主要处理用户交互和文本数据的程序,Matlab可能不是一个好的选择。

类似于VHLL,我知道UHLL中可能包含的一些功能。我希望找到以下一个或多个(并随时添加到列表中):

  • GUI表单的图形是用于GUI表单的程序
  • 包含行,列和标题的表是数据库中表的程序
  • 声明式逻辑表示在没有IF语句的情况下应该执行的操作以及何时执行
  • 对数据集进行操作,无FOR循环
  • 非顺序执行,例如数据驱动,模式匹配,树遍历

这个问题的动机是,我越来越厌倦了将相对简单的业务需求转换为大量代码来满足计算机需求的艰巨的工作。问题的实质是找到其他与我分担痛苦并致力于提高语言水平并让计算机完成更多艰苦工作的人。这是1970年代至80年代的主要关注点,但是它还在发生吗?

这些是对我的问题的一些建议答案,在此提供它们是为了总结或枚举我所知道的语言,而我认为这是不足的。

有许多语言是HLL或VHLL,并且包含属于较高级别的单个功能。我用了大多数(通常很糟)。它们包括

  • Lisp,具有其宏和自我修改的能力
  • Haskell,具有数据依赖性和模式匹配
  • SQL,处理行和表
  • Rebol,看起来很聪明,但我真的不明白
  • APL(和J)及其多维数组和超紧凑运算符
  • C#与LINQ
  • AWK / Perl / Python / Ruby内置了出色的集合和正则表达式

这些语言具有太多的低级功能,无法成为UHLL。程序员仍然必须为任何有用的程序编写许多底层构造。

有RAD / 4GL软件包。我用过一些:

  • dBase / Foxpro
  • Dataflex / Powerflex(我的产品)
  • 访问
  • PowerBuilder的

还有很多我没用过的。通常,语言充其量是HLL,但该软件包包含框架和语言与软件包之间的特权连接,因此可以快速构建应用程序。我不确定为什么这种方法没有用尽,但是无论如何不是这样。

有原始框架/库。我用了一些:

  • 滑轨
  • Java AWT和Swing
  • .NET Windows窗体,WPF和ASP.NET。

这些是当前的技术水平。它们使程序员牢牢地陷在实现语言的泥潭中,动turn处理复杂性。这不是UHLL,但可以想象在其中之一之上构建UHLL。

有一些我不太了解的设计工具,例如UML和Rational的工具集。据我所知,它们可以帮助阐明业务需求,但永远不能取代编程步骤。我不想消灭程序员,只是每单位时间和精力要做更多的事情。

因此,我消除了所有可以想到的竞争者,希望其他人可以提供更好的候选人。

后期编辑:我想我有一个答案:Wolfram语言。http://www.wolfram.com/wolfram-language/


2
@Phoshi-SQL也涵盖了最后三点。只是不是以DWIM(按照我的意思)的方式。
kdgregory 2014年

10
GUI表单的图形当然是GUI表单的程序,但是处理按钮单击,UI刷新等的代码在哪里?您是否曾与Visual Studio的表单设计师合作过?他们仍然在后台编写代码,但通常开发人员无需查看它。他们只是在视觉上发展形式。除了事件处理程序主体之类的自定义代码外, 包含行,列和标题的表是数据库中表的程序吗?数据库表上的所有触发器,索引和约束呢?
FrustratedWithFormsDesigner 2014年

3
@FrustratedWithFormsDesigner:但是,您感到沮丧。
罗伯特·哈维

4
@RobertHarvey:是的。但是没有我必须自己编写所有代码那样沮丧。;)
FrustratedWithFormsDesigner 2014年

7
与针对特定问题域量身定制的DSL相比,哪种语言更高级(如“最抽象”)?而且,当然,有一些语言是专门为有效构建此类DSL而设计的。
SK-logic

Answers:


33

您列出的几乎所有标准都是已在4GL / RAD工具中尝试过的,例如MS Access,Sybase Power Builder,Oracle Forms,Ruby-on-Rails(作为Web Apps的更现代标本),以及更多其他工具(有关详细信息,请参阅Wikipedia)。供应商名单很长​​)。实际上,使用这些工具可以非常快速地将相对简单的业务需求转换为某种程序。这就是为什么大多数RAD工具供应商以他们认为每个人都认为已经发明了UHLL的方式来宣传其产品的原因。

问题是,一旦您离开需求“ 相对简单 ”的基础,并且必须维护和发展使用这些环境编写的程序,您就会注意到,您很容易达到极限并注意到它们的缺点,或者用它们来实现需求绝不会比您想到的任何其他“ VHLL”都简单。恕我直言,当进一步升级到程序的1.1、1.2和1.3版本时,这些很有可能扼杀您在1.0版中所做的任何效率改进。

如果要针对复杂的要求构建软件,则将需要复杂的编程环境。仍然没有灵丹妙药,这些年来,我们的进步只是逐步的改进,与以前的任何编程语言相比,生产力都没有达到“数量级”(至少在过去30年中,这大约是20年代的时间)。布鲁克的文章发表的过去)。


9
为+1 relatively simple。实际的业务逻辑往往会很快使意大利面条变薄。
Bobson 2014年

1
离开地面后立即+1。对我来说,它们通常非常像“在5分钟内建立一个博客(无需编写代码)!”。键入广告。太好了,除非您必须实现类似于真实程序的东西,然后突然之间您认为应该简单的事情却并非如此。也许它们很棒,但我只是不理解它们-但是市场营销使我们很难相信,随着您走得更远,这不仅是一个更大的混乱。
BrianH 2014年

是的我知道。我已经在大多数4GL和其他几种代码中编写了代码。我曾经使用过的可缩放,但之所以如此,是因为它们包含嵌入式的不太好用的HLL,例如VBA。而且所有产品都有限制,作为封闭产品,您无法更改这些限制。是的,弗雷德·布鲁克斯(Fred Brooks)是对的,因此UHLL将需要一整套子弹。
david.pfx 2014年

我称之为“ Dreamweaver效果”。UHLL只是超泄漏的抽象
Charles Salvia

14

我知道的最高级的编程语言是APL。它需要一个特殊的键盘来表示所有必要的符号。看看这个视频,其中作者写道康威生命游戏的完整实现在约七分钟。

当然,真正的问题是“这可行吗?” 我可以在世界上找到足够的APL程序员来维持这种业务吗?APL是否可以在手机和平​​板电脑上运行?我真的需要为所有软件开发人员购买新的键盘吗?

如果您真的想提高生产力,那么最好的选择可能是Lisp的一些变体。Clojure在JVM上运行,并具有.NET端口。我之所以这样说,是因为人们已经做到了。Orbitz搜索引擎在Lisp上运行,而Paul Graham使用Lisp运营了整个业务,声称这使他比竞争对手(都使用Java)具有明显优势。

请注意,编程语言的级别越高,从实际硬件中删除的语言就越多,并且出现性能问题的可能性就越大。除非您拥有真正复杂的编译器,否则您仍可能会不时使用性能更高,级别更低的语言来编写应用程序中对性能至关重要的部分。

而且仍然存在大量精通该语言的开发人员的问题。尽管有很多缺点,但是找到Java程序员永远不会有问题。


请注意,主流语言仍在发展。创建Linq的目的是使数据驱动的编程更具声明性。 C#语言中添加了一些新功能,以使Linq可以正常工作。所有这些都与提高开发人员的生产力有关。

深入阅读
超越平均水平


Linq是我所说的那种代码的一个很好的例子。我喜欢将ifs和loops分别作为whens和selects编写在一行中。还有其他例子吗?
david.pfx

1
@ david.pfx:C#参加该聚会的时间比较晚,我发现它的语法向后(它使用SQL关键字,但是其他人使用SQL顺序和更简单的关键字/符号的顺序是不同的)。但是,他们将其编译为SQL的方式要比大多数语言所能做到的要好。
Jan Hudec 2014年

4
@ david.pfx:几乎任何具有列表理解能力的功能语言都可以完成Linq的工作。
罗伯特·哈维

7

我认为您已经暗示了一个限制超高级语言存在的交叉点-在某些时候我们不再将它们识别为编程语言。

我知道并且可能在这里引起巨大潜在兴趣的这种特定现象的最佳示例是Unified Modeling Language。确实,已经开发了特定的软件应用程序堆栈来专门执行您的要求。它可以满足您的许多要求,但不一定符合您的思维方式。尽管如此,对于这种情况还是非常有教育意义的,因为我也有类似的感觉,我的经验(随后)改变了我对这个问题的思考方式。

我个人将在这里谈到IBM的 Rational Software Architect,这是一种真正允许进行超高级开发的尝试。目标是您能够将哲学业务概念创建为对象,例如Actor或Class,为实体赋予属性,定义连接,定义信息在工作时如何流经系统,并做到这一点全部带有GUI。

例如,您可能会拖动一个DataStore对象,一个Actor,一个表单,一些相关的类(例如Customer等),使用图形等在对象之间绘制一些连接线,然后繁荣:完成后,发布一个工作程序。(这明显简化了)

确实,已经完成了复杂的GUI的形成,UML的非常彻底的实现/解释,然后将其编译为Java / C#/ VB代码,并带有保存UML绘图信息的完整XML文档,并且它们也实现/启用往返工程,因此您可以在模型和代码之间来回切换,从而可以在很高的流血哲学水平和非常低的平台特定代码中进行控制。

这就是您想要的一切,而且,您在交换中不放弃任何东西!对?

为什么每个人都不使用它?!?!

...嗯,瞧,就是这样。您最终要完成的工作是一项整体任务,所有事情都涉及很多活动部件和魔术,所有事情都(有时甚至不是)是受许多不同地方(在GUI,XML,较低级别)中的更改的影响代码,UML模型,这些模型本身是在许多不同的模型级别中创建/定义/维护的)。

玩起来真的很酷,但这是...如何表达它...它具有极高的学习曲线,设计时考虑了多个学科,您确实必须将其视为全新的事物对您已经拥有的其他技能的介绍很少或很少。

最重要的是-即便如此,数十家公司投入了数百万美元的项目,并且背后有一些非常知名的公司,您仍然在可执行层最终得到了C风格的代码,有时必须直接对其进行编辑,因为有些事情并没有使面向对象的类描述和UML之间的转换降低到编程/机器级别,并且自动化还不够完善。

我的经验是,这是生成脚手架的极其复杂的方法。对于如此庞大的技术事业,这可能是我将要说的最残酷的话,但这就是我从中得到的。

在我与之交谈的业内人士中,他们可悲的是说了同样的话。他们的感觉是,他们花了几个月的时间做了很多工作,包括创建文档,无数的图表,模型,会议,分析,然后全都扔掉了,而开发团队只是为它编写了代码,通常只是将其视为另一个规范活页夹(没人再读了)。因此,现在他们只使用Java和一些特殊用途的图表/可视化软件,以及敏捷,到此为止。

也许这是不公平的,并且只要您做对就行。也许吧,但是我与顾问和教授交谈过,他们声称他们在专门的为期数周的开发研讨会上花费了很多时间,以学习该系统,并回去接受更多培训,并且实际上花费了数年时间来学习如何制作该系统。工作以及去哪里。

但是,也许这全是程序员的错,他们只是拒绝接受系统运行良好而又完全不像计算机编程那样。也许纯粹的代码程序员只是拒绝替换工作,例如蜡烛制造者和古老的织布工,因此拒绝仅仅执行有限的实现到规范的任务,这使其他所有人感到沮丧,以至于把它扔掉并说坏话,它几乎是完美的。

但是...我认为其中可能有些道理,但我认为大多数情况下它实际上并不能很好地工作。我认为这在大多数情况下都变得不是那么困难(计算机编程),甚至使它变得更困难的一点是,如果它能奏效,那将是非常棒的,但是天哪,您很长一段时间都无所作为展示它到达那里!

也许它只能在拥有数千人团队的企业中工作,也许我们还没有。

我不知道。

但是,对于这种使用超高级语言的方法的对与错的研究(我认为UML需要包含在这种考虑中)实际上必须考虑诸如Rational Software Architect之类的东西,以避免潜在的傻瓜差事。

或者也许我们只需要再给它20至50年的努力。我不再乐观地认为编程语言是约束。

如果以前编程语言是制约因素,那就是为什么改进使我们获得了潜在的数量级改进。如果不再是这样的约束,那么任何创新都更有可能无法提供这样的改进顺序。但是我不能告诉未来!因此,我认为其余的不是“在创作中”,而是肯定“为时过早”。


您是否真的认为消除编码?在计算机像我们一样聪明之前,我看不到将业务需求直接转换为代码的前景。
david.pfx 2014年

1
与Rhapsody一起工作时,我一直感到很高兴(我想知道为什么IBM购买了另一个类似的工具,并以IBM Rational品牌拥有两个类似的应用程序集),而我的经验是它无法扩展。在同一段代码上工作的多个人是一个经过充分研究和解决的问题,但是在同一UML上工作的多个人只是行不通。
Jan Hudec 2014年

“为什么不是每个人都使用它“ - ?!?!因为它会产生不好的结果这是一个已经被鞭打其生命的英寸内的马UML是失败的。
duffymo

1

如果您考虑一会儿,那么更高级别的编程基本上就可以组成更容易获得和证明的较小零件。到目前为止,您的程序是各种库的非常简单的粘合代码。也许胶水是非常有表现力的DSL。您可以使用几乎每种编程语言来执行此操作。

就个人而言,我越来越开始意识到可组合性的解决方案-与您本能的感觉相反-在面向对象的编程中找不到。这种范例以及命令式编程为程序员提供了太多的自由,这反过来又使得编写易于重用的代码变得非常困难。

相反,我认为函数式编程提供了更适合组合性的原语。纯函数式编程语言还不允许您定义具有副作用的函数,这不仅可以减少错误或促进发现错误,还可以更轻松地构建它们(将它们组成更大的系统)。

如果您对函数式编程感兴趣,那么可以看看Haskell等现代函数式语言。我认为Parsec模块提供了很好的高级DSL(在功能术语中称为组合器库)进行解析。Haskell也有功能性的反应式编程框架,使您可以用几行代码来构建功能强大的GUI。


1
-1用于回答“是/否”问题而没有说“是”或“否”。(并忽略了OP问题中的特定词汇。)
DougM 2014年

实际上,我认为这是对的。UHLL并非用于实现已经存在的功能,而是以太难以在较低层次上考虑的方式来组合它们。你知道任何?Haskell不是吗。
david.pfx 2014年

感谢您的积极回应。正如DougM所同意的那样,我实际上只是在考虑删除答案。我并不是在暗示Haskell本身就是它,而是我认为在功能编程语言(例如Haskell)中使用组合器库是组合现成组件的方法。
Matthias P.

0

我希望游戏中用来编写他们的任务和界面脚本的Lua可以满足这个条件。还有类似的领域特定语言(和地图构建器实用程序)用于允许关卡设计人员快速轻松地说“当玩家与Bob对话时,启动Bob的Epic Quest”。

我知道一些更深奥的语言,专注于移动代码来描述什么是怎么回事,而不是如何它应该做。一些关注于非常声明性的,基于逻辑的方法。有些人专注于反应式编程来做到这一点。有些人将重点放在执行此操作的角色上(特别是对于需要可并行化的事情)。有些人只是专注于使语法更自然-断言自然语法会减少由自然语言和代码之间的翻译引起的错误。

对于为档名和文件开发人员带来更高数量级的生产力而言,没有人真正有希望


1
lua难道不适合作为UHLL所不能及的用于编码低级细节的语言吗?
david.pfx 2014年

0

我认为REBOL可能符合您的所有条件。您可以用几行代码制作相对复杂的GUI应用程序-但是其“特殊性”是DSL创建。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.