编程语言理论的研究与开放挑战


32

在像一些一般性讨论的精神一个,我打开这个线程并打算收集意见认为哪些编程语言的开放的挑战和热点问题的研究。我希望讨论甚至可以浮出水面,对编程语言研究的未来发表看法。

我相信这种讨论将对像我这样对PL感兴趣的新学生研究人员以及已经参与其中的人有所帮助。


7
社区维基?
Suresh Venkat

2
如果您引用或总结“ TCS的前沿”问题的文字,我认为它确实会改善此问题以及回答该问题的人员。这个问题的答案的预期范围尚不清楚,而另一个问题的答案更精确。
Vijay D

不久前当我在stackoverflow上问这个问题时...我被否决了,我的问题被关闭了!
罗夏(Rorschach)2013年

Answers:


23

我认为PL理论的总体目标是通过改进编程语言和使用语言的技术生态系统来降低大规模编程的成本。

以下是对PL研究领域的一些高级,含糊的描述,这些描述一直受到关注,并且可能会持续一段时间。

  • 大多数编程语言研究都是在顺序计算的背景下完成的,到目前为止,我们可以说已经融合了大多数现代编程语言中可用的核心功能(例如,高阶函数,(部分)类型推断,模式匹配)。 ,ADT,参数多态性),并且众所周知。尚无关于并发和并行计算的编程语言功能的共识。

  • 与上一点有关,类型系统的研究领域已经看到其大部分活动都与顺序计算有关。我们是否可以概括这项工作,以找到约束并发和并行计算的易于处理且有用的打字学科?

  • 作为上述观点的特例,Curry-Howard对应关系涉及结构证明理论和功能编程,从而导致计算机科学与数学(基础)之间的持续技术转移,例如同伦类型理论就是一个令人印象深刻的例子。有许多诱人的暗示,它可以扩展到并发和并行计算(的某种形式)。

  • 近年来,例如使用Isabelle和Coq之类的交互式证明助手,程序的规范和验证已经非常成熟,但是该技术仍远未在日常编程中大规模使用。要改善这种状况,仍有许多工作要做。

  • 用于新颖计算形式的编程语言和验证技术。我在
    这里特别考虑的是量子计算以及受生物学启发的计​​算机制,请参见例如此处

  • 统一 编程语言,类型,验证的方法很多,有时会觉得它们之间有很多重叠之处,还有更多的抽象方法有待发现。特别是,受生物学启发的计​​算机制可能会继续使我们不知所措。

PL研究的一个问题是,没有像P / NP问题这样的明确问题,我们可以立即说出建议的解决方案是否有效。


1
如果可以的话,即使没有发生量子计算,也可以使用量子计算和量子编程语言,但如果没有其他方面,对自然语言中的编程,模糊编程,甚至物理计算和物理编程(直接在物质上进行编程,超出分子水平)
Nikos M.

1
@NikosM。我同意,质量控制非常重要,需要进行大量调查。本文展示了量子力学的基础与编程语言理论之间令人惊讶的联系,这些联系仅通过抽象来发掘。
Martin Berger 2014年

很好,也许一个问题可以解决这类正式(或非正式)关系
Nikos M.

11

让我列出一些限制编程语言研究的假设。这些很难脱离,因为它们感觉它们是编程语言的基本组成部分,或者因为探索替代品将“不再是编程语言设计”。对于每个假设,我都会列出其限制作用。

  1. 程序是语法结构。

    • 真正的程序员永远不会使用iPad构造源代码。即使这样做,它们也永远无法像Emacs,Eclipse,NetBeans,XCode等一样高效。
    • 关于构建程序的其他方法的研究不是编程语言设计,而是图形用户界面设计或教育(请参阅Scratch)。
  2. 无法执行部分编写的程序。

    • 至少,执行到缺少的部分时会发生运行时错误。
    • 运行未完成的程序会有什么好处?
  3. 程序是关于向计算机提供指令的。

    • 编程语言设计对于如何编写和组织法律没有什么可说的。配件。
    • 细菌不编写程序。
  4. 编程就像是动手做,是普通人无法完成的。

    • 普通人不了解语法,概念,工具,因此他们不可能编写程序。
    • 即使我们试图让普通人编写程序成为可能,他们也只能编写一些琐碎的东西。

我想我可以继续。


2
詹姆斯:太好了,我会通知姨妈。马丁:这正是我在说的那种东西-非文本编程尚未令人信服地建立,因为PL社区并未认真对待它,因为它尚未令人信服地建立。但对我来说,很明显,人类并非是在屏幕上打字的。我们擅长扔东西和采摘蓝莓。
Andrej Bauer

1
@AndrejBauer作为科学论点,“对我来说很明显”并非没有改善。如果您看一下书写系统的历史(其中编程语言只是最近的例子),那么它们的历史轨迹就与逻辑记录书写相去甚远。也许我们解析字符串的能力比蓝莓更重要。字母书写已经发展了数千年,因此不太可能包含大量易于修复的错误。也就是说,我很高兴相信我们可以做得比基于ASCII的线性字符串更好。我认为还需要一段时间。
Martin Berger 2013年

1
我的答案是“跳出框框思考”。检查PL研究中的隐含假设,并了解它们如何限制潜在的PL研究。
Andrej Bauer 2013年

4
@AndrejBauer,我认为将范围限制为POPL是一个错误-许多此类工作是在OOPSLA,ICSE或CHI上完成的。除非有新颖的正式方法,否则POPL不会感兴趣,但是POPL并不是整个PL社区。
Sam Tobin-Hochstadt 2013年

2
@DominicMulligan:当然,这些都是非常受欢迎的想法。通过我的评论,我试图改变对编程的理解。因此,如果理论思想可以在实践中得到很好的利用(我的意思是“普通”程序员会在日常生活中使用它们),那么我们就赢了。
Andrej Bauer 2013年

0

我一直在想一个问题。我不知道它是否符合公开挑战的标准。

随着时间的流逝,数学知识一直在稳步增长。几个世纪以来,理论基础,概念,符号和证明都在发展。数学家在任何时候都不必以系统和正式的方式检查聚合的全局一致性,尽管有一定尝试(尽管有尝试)。

我们应该期望编程语言和程序库会随着时间的流逝而类似地聚合和发展。什么样的工具可以帮助管理编程结果和库的汇总,以使它们保持一致并有效地被所有人使用,因为计算机可以更正式且对一致性有更高的要求。我们是否需要为每种新的编程语言重做库。我们为什么要选择一种语言,因为它具有适合于预期应用程序的库,而不是具有作为编程介质的内在品质的库?

在另一个主题上,您可能会在以下问题中找到想法:编程语言是否越来越像自然语言?我意识到这个想法可能不会吸引许多理论计算机科学家,但是通过研究不同的问题或从不同的角度来看,它仍然可能有用。我远远不同意已发布的许多想法,但这就是讨论的目的。


一致性过高。
Andrej Bauer 2013年

1
我可以看到就此建议并没有多大同意,但是建议很少。尽管如此,至少对我来说,对原因进行一些解释可能会更有帮助。万一我不清楚,我绝不是要说数学可能是不一致的,只是数学没有(必须)以一致的方式进行汇总(历史学家会说得更好)。从CS的角度来看,我在汇总的难度上可能是错的(我从未对此做过任何技术性的工作),但我仅是将用户体验和通常听到的观点联系在一起,这间接地损害了TCS产生的语言。
babou 2013年

1
好吧,我的评论主要是关于一致性是一个全有或全无的想法,而实际上大多数软件都是“几乎是一致的”。但是我们使用它并发现它很有用。那么,为什么理论家痴迷于似乎几乎无法实现且过于理想化的概念呢?似乎能够以一些不那么琐碎的方式量化一致性似乎更好。
Andrej Bauer 2013年

@AndrejBauer-感谢您的答复。您对我所写的内容感到惊讶,我对此感到有些惊讶。那里没有任何东西支持某种形式的绝对一致性,而只是希望有一种可行的方法,这种方法将使聚合在不断发展的环境中变得可能和有意义。如您所说,通常可以做到。找到一致的目的应该是这个想法的一部分,而我并不是在建议任何平凡或其他的答案。我从来不是一个痴迷的理论家,而且从您的回答中我看不出我们可能会出现分歧。
babou 2013年

1
我想我只是在抱怨“纯粹的理论家”,仅此而已。请别理我。
Andrej Bauer 2013年

0

上个世纪以来,在应用程序和理论方面,编程语言都发生了巨大的创新和爆炸,但有可能证明这是计算历史上的一次/一次性事件,类似于“进化的爆炸”。 (另请参见cs.se上的“为什么会有这么多的编程语言?”),因此在这方面,未来将不像过去。但是,目前在游戏/开发中存在一些可识别的长期趋势。

  • 编程/软件的复杂性以及管理/最小化/减轻/减少它的方式一直是一个影响语言设计的主题,在当今非常流行的非常大型/复杂的软件系统中,它可能甚至变得更加重要。这是OOP设计原理的主要方面,但是现在我们有了高度复杂的OOP系统!对它的集中思考导致了该领域的经典,例如布鲁克斯的《神话人月》,在许多方面仍然是非常有效的观点,甚至可能比写作时更有意义。

  • 并行性。硬件向更大的并行性(例如多核等)转移,时钟速度的提高不再足以提高性能。这种转变发生在2000年代中期,对语言研究/设计产生了重大影响。并行性一直是一个主题,但它具有新的首要意义/紧迫性,并且存在一些广泛的思想/共识,即并行性过于复杂且难以编程,也许不同的理论方法可以缓解这种情况。一个很好的参考:并行计算研究的前景:伯克利的观点

  • 数据挖掘 / 大数据。这些都会影响编程语言的设计。数据库体系结构中的新方向也在波及/影响编程语言。

  • 超级计算对语言设计有重大影响,并且与并行性和数据挖掘/大数据(例如与MapReduce等新语言)重叠。

  • 视觉 / 数据流编程。这些类型的“语言”已经有所增加(在某种意义上,可视化编程实际上在许多方面使编程与“语言”脱钩)。也具有并行性的强交叉授粉。

  • AI。这更像是一个远程通配符,目前还不太清楚,它将如何影响计算机语言和编程,但可能会非常重要。过去(以另一种形式)它导致了像prolog这样的全部语言。遗传算法 / 遗传编程是如何将其应用于惊人结果的早期迹象。

Tate撰写的Beyond Java的参考书中可能包含一些有关“编程语言的未来”的有用想法。他思考(尽管有争议)也许Java(可以说是现有的最复杂/最全面的编程语言之一)开始显示它的时代,并且有长期出现新的语言/方法以填补其位置的早期迹象。

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.