PLTの全体的な目的は、最も重要なツール(プログラミング言語)および関連するツールエコシステムを最適化することにより、(一般的な意味で)産業用ソフトウェアエンジニアリングを(一般的な意味でも)安価にすることです。
数学が関係するいくつかの理由:
PLは非常に重要であり、証明なしで正しいことを行うかどうかは明らかではありません。数学は、実際のプログラミング言語の簡略化されたモデルを提供します。このモデルを使用すると、実際のプログラミング言語を大幅に簡略化した設定で研究でき、モデルレベルですでにほとんどの問題が(うまくいけば)取り除かれます。実際のプログラミング言語は現在、数学的に扱いにくいものです。つまり、ラムダ計算は、PLTの球形の牛であるショウジョウバエであるE.Coliです。
PLTには適切で適切な経験的方法が欠けているため、これを使用するのが良い/よいので、代わりに数学を使用します。
数学は美しく、深いです。
数学は、PhDの学生の卒業を支援するために重要な、シンプルで試行錯誤した研究方法を提供します。通常、例:PL機能XYZをラムダ計算に追加して調査します。XYZの単純型を追加し、型の健全性を証明します。XYZのジェネリックを追加し、型の健全性を証明します。XYZジェネリックのパラメトリック性定理を証明します。XYZの依存型を追加し、型の健全性を証明します。XYZ依存型の部分型推論を開発します。XYZの段階的な型を追加し、型の健全性を証明します。XYZの契約を追加します。それらのそれぞれは紙です。博士課程の学生またはポスドクが時間切れになった場合は停止できます。上記のそれぞれは興味深いものであり、ジェネリックス、パラメトリック性、型推論などについての洞察をもたらします。このパイプラインは素晴らしいですすべての可能なプログラミング言語の困難な水域をナビゲートする方法。学習の2番目の方法は、コンパイラに言語を実装することですが、個人にとって扱いにくいものです。
PLTが必要かどうかは興味深い質問です。ほとんどの作業プログラマはそうではないと考えているようです。それらは間違っています。PLTの背景のない作業プログラマーによって開発されたほとんどの言語(Javascript、PHPなど)はひどく始まり、PL理論家が長い間回避する方法を学んだすべての間違いを犯します。アマチュアが開発したPLが主流になった場合、PL理論家は明らかな欠陥を修正するのに10年ほどかかる必要があります(たとえば、静的型付けシステムの改良、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のような言語の純粋な関数型プログラミングがすべての問題の解決策であり、精査に耐えられないと考えています。