プログラミング言語理論が答えようとしている「質問」とは何ですか?


10

私はしばらくの間、結合論理、ラムダ計算、関数型プログラミングなどのさまざまなトピックに興味があり、それらを研究してきました。ただし、「計算能力」の質問、つまりさまざまな制約で計算できる/できないものに答えようとする「計算理論」とは異なり、「プログラミング理論」の類似物を見つけるのに苦労しています。

ウィキペディアはそれを次のように説明しています:

プログラミング言語理論(PLT)は、プログラミング言語とその個々の機能の設計、実装、分析、特性評価、および分類を扱うコンピュータサイエンスの一分野です。

これは、実際には特定されていない「すべて」を言うようなものです。

トピックの一般的な進行は通常、次のようになります。

組み合わせ論理>ラムダ計算>マーティンロフ型理論>型付きラムダ計算>(ここで何かが起こる)>開発されたプログラミング言語-CL / λとの接続がほとんどないλ

私は、CL / λ関連する根本的な「数学」と、チャーチ・ロッサーの定理を含む結果として出てくる興味深い証明を見ることができます。しかし、私はこのすべての事業の「最終目標」を理解するのに苦労していますか?あなたがそうするなら、PLT の聖杯は何ですか?今のところ、それは知的なかゆみを掻くだけのようですが、私は実際に研究/理論から実用的なものへの橋を渡ることはできません。

λ


1
λ

あなたは100%正しいです。したがって、「狭いPOV」を呼び出しました。ここを読み、SIGPLAN / POPL Proceedingsをチェックするだけで、「その他のトピック」に精通しています。私はまだ、あなたが言及したトピックを含む PLTの広範な概要を説明する「全体的なリファレンス/本」を見つけていません。型理論のビットは、プログラミング言語の「作成中」のPOVからのものです。全体像を把握するために、PLTのさまざまな領域の概要を説明するための指針はありますか?彼らが使用している基本的な「モデル」とその方法を知りたいのですが。 どこでもλ
博士号

2
@PhD必要なPLTのさまざまな領域の概要はありません。c'estla vie!多分いつかこれは変わるでしょう。しかし、息を止めないでください。フィールドは急速に進化しており、サブフィールドに差別化しています。他の人気のある単純なモデルには、微積分、構造演算セマンティクス、単純な命令計算(WHILE言語のような)およびその他多数が含まれます。多くの場合、自分のアプリケーションドメインに合うようにおもちゃの計算を発明します。π
Martin Berger

回答:


13

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のような言語の純粋な関数型プログラミングがすべての問題の解決策であり、精査に耐えられないと考えています。


1
@MartinBerger:CompCertは、実際のプログラミング言語を「理論的に」処理できる例としてカウントされますか?そうでない場合は、CompCertが非常に印象的であるため、どのくらい高いレベルに設定していますか。
Andrej Bauer

2
@MartinBerger:「ほとんどのPL理論家は、Agdaのような言語での純粋な関数型プログラミングがすべての問題の解決策であると考えている」ということを考慮してください。手始めに、現在ICFPとPOPLに存在するトピックを見ても、大部分は不純なプログラミング言語に関するものです。
Andrej Bauer

5
@PhD:PLTには型理論以外にも多くの機能があります。型理論は、PLTの主要なツールの1つであるため、最初に気づくのはそのためです。
Andrej Bauer

1
@AndrejBauer CompCert、CakeMLなどは印象的ですが、LLVM、GCCなどの広く使用されているコンパイラとはかけ離れています。さらに、コンパイラは、実際のソフトウェアとは異なり、(種類/種類)仕様を持っています。通常の産業用ソフトウェアエンジニアリングでは得られないことです。言うまでもなく、Xavierの初期のCompCertに関する作業の大部分は、仕様を正確にすることでした。
Martin Berger

2
@PhD「PLT以外のC / C ++、Java、C#」よりも「劇的に生産性が高い」ということについては、これらの言語、具体的には、時間の経過に伴う進化、およびそれらが獲得したほとんどすべてのことを覚えておいてください。時間、例えばラムダ、モナド(LINQ)、パターンマッチング、部分的な型推論はPLTから来ます。C#チームにはPLTの博士号があります。実際、彼らはある時点で私を雇おうとした。就職の面接は、C#にはジェネリックが必要であることをAnders Heijlsbergに納得させようとしていたことでした。彼は当時は好きではありませんでした...
Martin Berger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.