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这样的语言中的纯函数式编程是对所有问题的解决方案,这并不值得审查。