编程语言理论试图回答的“问题”是什么?


10

我一直对诸如组合逻辑,Lambda微积分,函数式编程等各种主题感兴趣,并一直在研究它们。但是,与试图回答“可计算性”问题(即可以/不能在各种约束条件下进行计算的问题)的“计算理论”不同,我努力寻找“编程理论”的类似物

维基百科将其描述为:

编程语言理论(PLT)是计算机科学的一个分支,致力于编程语言及其各个功能的设计,实现,分析,表征和分类。

这就像说“一切”,这并不是很具体。

主题的共同进展通常是这样的:

组合逻辑>演算>马丁·洛夫类型理论>类型lambda积分>(有什么在这里发生)>编程语言开发的-有很少与CL连接/λ

我可以看到与CL /相关的底层“数学”λ以及由此产生的有趣证明,包括Church-Rosser定理,这很简洁。但是,我正在努力了解所有这些工作的“最终目标”吗?什么是圣杯 PLT的,如果你愿意?就目前而言,这似乎只是在刮擦知识分子的痒,但我真的无法跨过研究/理论到任何实际的桥梁。

注意:在使用 λ-calc用于不确定性证明。但是,除了它对“可计算性”的适用性之外,我只是不了解它,甚至很难从这种狭窄的POV理解PLT研究的需要。是否有任何现有的书籍,参考文献可以阐明PLT的“大局”?


1
在您的“常见进展”中,您完全忽略了PLT的全部内容。由于某种原因,您的观点似乎受到了歪曲λ-微积分和类型理论。让我们看一下POPL 2019接受的论文:并发随机编程,概率编程,可验证的汇编,代数效应,认证神经网络,PL和硬件弱内存模型,量子编程等。类型理论”,您不会说吗?
Andrej Bauer

您是100%正确的。因此,我喊出了“窄POV”。我仅在这里阅读并检查SIGPLAN / POPL会议记录,才能熟悉“其他主题”。我还没有找到一本“整体参考书/书”,它提供了有关PLT的广泛概述,其中包括您提到的主题。类型理论位仅来自(正在创建?)编程语言的“我的” POV。您是否有一些指针可以对PLT的各个领域进行高层次的介绍,以获得概览?我很好奇,他们使用什么底层“模型”以及如何使用?λ 到处?
博士

2
@PhD没有高层次的介绍给你想要PLT的各个领域,这就是生活!也许有一天这会改变。但是,不要屏住呼吸。该领域正在迅速发展,并逐渐将自己划分为子领域。其他流行的简单模型包括π-演算,结构化操作语义,简单的命令式演算(如WHILE语言)以及许多其他功能。通常,人们会发明一种玩具微积分来适合自己的应用领域。
马丁·伯杰

Answers:


13

PLT的总体目的是通过优化最重要的工具(编程语言)和相关的工具生态系统,使工业软件工程(通常意义上)更便宜(通常意义上)。

涉及数学的一些原因:

  • PL 非常重要,而且尚不清楚它们在没有证据的情况下做对了。数学给出了真实编程语言的简化模型。该模型使我们可以在非常简化的环境中学习实际的编程语言,从而(希望)消除了模型级别的大多数问题。当前,真正的编程语言在数学上是棘手的。换句话说:λ演算是果蝇,即大肠杆菌,是PLT 的球形母牛

  • PLT缺乏合适的经验方法,这种方法会很好/更好,因此可以用数学代替。

  • 数学是美丽而深刻的。

  • 数学提供了一种简单的,经过实践检验的测试方法,这对于帮助博士生毕业至关重要。通常,例如:通过将PL特征XYZ添加到lambda微积分中来研究其特征。为XYZ添加简单类型并证明类型正确。添加XYZ的泛型并证明类型健全。证明XYZ泛型的参数定理。为XYZ添加从属类型并证明类型健全。为XYZ依赖类型开发部分类型推断。为XYZ添加渐变类型并证明类型健全。添加XYZ合同。这些都是纸。如果您的博士生或博士后时间用完,您可以停下来。上述每个有趣的是,将产生约泛型,parametricity洞察力,类型推断等等。这条管道是一个伟大的导航所有可能的编程语言的艰辛之路。第二种学习方法是在编译器中实现语言,但这对个人来说不太容易处理。

是否需要PLT是一个有趣的问题。大多数正在工作的程序员似乎认为并非如此。它们是错误的:大多数由没有PLT背景的在职程序员开发的语言(例如Javascript,PHP)起初都是可怕的,并且犯了PL理论家们早已学会的如何避免的所有错误。如果由业余爱好者开发的PL成为主流,则PL理论家需要十年左右的时间来解决明显的缺陷(例如,改造静态打字系统,请参见Typescript)。让我总结一下这种情况:

 Every successful programming language ends up being ML! Either because 
 it was designed by a PL theorist as ML from the start, or because a 
 decade of painful evolution removes all the obvious flaws, leaving ML. ;-)

另外: 这种情况完全是PLT的错,因为大多数人没有工业编程经验,所以真的不知道软件工程师的痛苦是什么。尤其是出于社会学原因,大多数PL理论家认为,像Agda这样的语言中的纯函数式编程是对所有问题的解决方案,这并不值得审查。


1
@MartinBerger:CompCert是否可作为能够“理论上”处理现实世界编程语言的示例?如果没有,您将标准设置为多高,因为CompCert令人印象深刻。
Andrej Bauer

2
@MartinBerger:请考虑淡化“大多数PL理论家认为,像Agda这样的语言进行纯函数式编程可以解决所有问题”,因为这只是您的抱怨和宣泄。对于初学者来说,即使您查看ICFP和POPL当前存在的主题,大多数内容还是关于不纯编程语言的。
Andrej Bauer

5
@PhD:PLT除了类型理论之外,还有很多其他方面。类型理论是您首先注意到的,因为它是PLT的主要工具之一。
Andrej Bauer

1
@AndrejBauer CompCert,CakeML等令人印象深刻,但它们与LLVM,GCC等广泛使用的编译器相去甚远。此外,与几乎任何现实世界的软件不同,编译器确实具有(种类/排序)规范,您只是普通工业软件工程中没有的。更不用说Xavier早期在CompCert上所做的很大一部分工作就是规范规范。
Martin Berger

2
@PhD关于“比非PLT C / C ++,Java和C#更具“生产力”,请记住,如果您查看这些语言,更具体地说,它们随着时间的演变,几乎是他们所获得的一切时间,例如lambda,monad(LINQ),模式匹配,部分类型推断来自PLT。C#团队拥有PLT博士学位。确实,他们在某个时候试图雇用我。求职面试是我试图说服Anders Heijlsberg C#需要泛型,但他当时不喜欢这种泛型...
Martin Berger
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.