私の答えは本当に私が書いた前に読んだことがなかったGillesの精巧さです。それでも、それは役立つでしょう。
一般的なプログラミング言語理論、特にプロセス計算とは大きく異なる2次元のプログラミング言語作業の違いから、あなたの質問に答える私の試みを始めましょう。
後者は通常、製品としてプログラミング言語を提供することを目的として業界で行われます。OracleでJavaを、MicrosoftでC#を開発しているチームがその例です。対照的に、純粋な研究は製品に結び付けられていません。その目的は、本質的に関心のあるオブジェクトとしてプログラミング言語を理解し、すべてのプログラミング言語の基礎となる数学的構造を調査することです。
目標が異なるため、プログラミング言語理論のさまざまな側面は、純粋な研究と製品中心のR&Dに関連しています。以下の図は、どこが重要かを示している場合があります。
この時点で、2つの次元が一見非常に異なっているように見える理由と、それでもそれらがどのように関連しているのかを尋ねます。
重要な洞察は、プログラミング言語の研究開発には、技術的、社会的、経済的という複数の側面があるということです。ほぼ定義上、業界はプログラミング言語の経済的利益に関心を持っています。マイクロソフトなどは、心の底から言語を開発するのではなく、プログラミング言語が経済的な利点をもたらすと信じているからです。また、一部のプログラミング言語が成功する理由を深く調査しましたが、他のプログラム言語は、一見類似している、またはより高度な機能を備えているにもかかわらず、成功しません。そして、彼らは単一の理由がないことを発見しました。プログラミング言語とその環境は複雑であり、特定の言語を採用または無視する理由も複雑です。しかし、プログラミング言語が成功する最大の要因は、すでに広く使用されている言語へのプログラマーの優先的なアタッチメントです。より多くの人々が言語を使用するほど、より多くのライブラリー、ツール、教材が利用可能になり、プログラマーの生産性が向上します。その言語を使用できます。これはネットワーク効果とも呼ばれます。もう1つの理由は、個人や組織の言語を切り替えるコストが高いことです。特に、あまり経験のないプログラマにとっては言語を習得する必要があります。また、使い慣れた言語とのセマンティックの距離が遠い場合、時間と手間がかかります。これらの事実を踏まえると、なぜ新しい言語がまったく魅力的なのかと疑問に思われるかもしれません。企業が新しい言語を開発するのはなぜですか?なぜJavaやCobolにとどまらないのですか?言語が成功する主な理由はいくつかあると思います。
プログラミングの新しい領域が開かれ、現在の職を失うことはありません。その主な例は、Javascriptの増加を伴うWebです。
言語の粘り。これは、言語を変えることの高価格を意味します。しかし、プログラマーは別の分野に移動し、プログラミング言語を取り入れて、新しい分野の古い言語で成功することがあります。
言語は、深刻な財政力を持つ大企業によって推進されています。早期導入者は、言語が数年後もサポートされることを合理的に確信できるため、この支援により、導入のリスクが軽減されます。これの良い例はC#です。
言語には説得力のあるツールとエコシステムが付属している場合があります。ここでもC#です。例として、.NetとVisual Studioエコシステムを挙げます。
古い言語は新しい機能を採用しています。Javaが頭に浮かびます。これは、反復ごとに、関数型プログラミングの伝統からより良いアイデアを取り入れます。
最後に、新しい言語には固有の技術的利点がある可能性があります。たとえば、表現力が向上し、構文が向上し、より多くのエラーをキャッチするタイピングシステムなどになります。
このような背景を考えると、純粋なプログラミング言語の研究と商用プログラミング言語の開発との間にいくらかの分断があることは驚くべきことではありません。特に大規模ソフトウェアの場合、どちらもソフトウェアの構築と進化をより効率的にすることを目的としていますが、産業用プログラミング言語の仕事は、クリティカルマスに到達してネットワーク効果を得るための迅速な導入を促進することにもっと関心を持つ必要があります。これは、働くプログラマが気にすることに焦点を当てた研究につながります。そしてそれは、ライブラリの可用性、コンパイラの速度、コンパイルされたコードの品質、移植性などのようなものになる傾向があります。今日私たちが実践しているプロセス計算は、主流のプロジェクトに取り組んでいるプログラマーにはほとんど役に立ちません(ただし、将来的には変わると思います)。
純粋なプログラミング言語の研究はかなり異なります。プログラミング言語の簡略化されたモデルで動作します。 -calculusは、関数型プログラミングを大幅に簡略化したものです。同様に、 -calculusは、並行プログラミングを大幅に簡略化したものです。これらの大幅な簡素化は、研究を成功させる鍵です。彼らは、コアの計算機序に焦点を当てるために私たちを可能にする(例:π βλπβ-関数型プログラミングの削減、論理プログラミングの解決/統一、同時計算の名前渡し)。Scalaのような言語が完全な型推論を実行できるかどうかを理解するために、JVMについて心配する必要はありません。実際、JVMについて考えることは、型推論のより良い理解を損なうことになります。そのため、小さなコア計算への計算の抽象化が不可欠で強力です。
したがって、プログラミング言語の研究は、人々がおもちゃで遊ぶ大規模なサンドボックスと考えることができます。特定のおもちゃで遊ぶときに何か面白いものを見つけ、そのおもちゃを徹底的に調査した場合、その興味深いおもちゃは主流の産業的受容への長い道のりを開始します。プログラミング言語研究者によって最初に発明された言語機能が広く受け入れられるようになるまでに数十年かかる傾向があるため、私は長い行進を言います。たとえば、ガベージコレクションは1950年代に考案され、1990年代にJavaで広く利用可能になりました。パターンマッチングは1970年にさかのぼり、Scala以来広く使用されています。
プロセス微積分は特に興味深いおもちゃです。しかし、それは完全に調査されるにはあまりにも新しいです。それにはさらに10年の純粋な研究が必要です。プロセス理論の研究で現在行われているのは、プログラミング言語研究の単一の最大の成功事例である(順次)型の理論を取り上げ、メッセージパッシングの同時実行のための型の理論を開発することです。逐次プログラミングのための適度な表現力のタイピングシステム、たとえばHindley-Milnerは、広く理解され、広く普及しており、実際のプログラマーに受け入れられています。並行プログラミングには適度に表現力のあるタイプが欲しいです。これに関する研究は、1980年代に、ミルナー、サンジョルジ、ターナー、小林、ホンダなどの先駆者によって開始され、多くの場合、明示的または暗黙的に、線形論理から生じる線形性の概念に基づいています。ここ数年は活動が大幅に増加しており、この上向きの軌道は近い将来も続くと予想しています。また、プロセス計算のトレーニングを受けた若い研究者が産業R&Dラボに出向いて作業するという実用的な理由だけでなく、CPUとコンピューターアーキテクチャの進化により、この作業は製品中心のR&Dに漏れ始めることも期待しています計算の順次形式から。
要約すると、私はあなたがプロセス計算のような最先端のプログラミング言語理論をあなた自身の言語構築の仕事に役立たないことを心配しないでしょう。それは、最先端の理論が現在のプログラミング言語の懸念に対応していないからです。将来の言語についてです。「現実の世界」が追いつくまでにはしばらく時間がかかります。今日の言語を構築するために使用する知識は、過去のプログラミング言語理論です。プロセス計算は理論的なコンピューターサイエンスのすべての最も存在する領域の1つであるため、プロセス計算について詳しく学ぶことをお勧めします。