このようないくつかの一般的な議論の精神で、私はプログラミング言語の研究における未解決の課題とホットなトピックについて意見を集めるつもりでこのスレッドを開いています。議論がプログラミング言語の研究の将来に関する意見を表面化させることさえ期待されます。
この種の議論は、PLに興味のある私のような新入生の研究者だけでなく、すでにある程度関与している研究者にも役立つと考えています。
このようないくつかの一般的な議論の精神で、私はプログラミング言語の研究における未解決の課題とホットなトピックについて意見を集めるつもりでこのスレッドを開いています。議論がプログラミング言語の研究の将来に関する意見を表面化させることさえ期待されます。
この種の議論は、PLに興味のある私のような新入生の研究者だけでなく、すでにある程度関与している研究者にも役立つと考えています。
回答:
PL理論の全体的な目標は、プログラミング言語と、言語が使用される技術的エコシステムを改善することにより、大規模プログラミングのコストを下げることだと思います。
以下は、持続的な注目を集めているPL研究分野の高レベルでやや曖昧な説明であり、おそらくしばらくはそうするでしょう。
ほとんどのプログラミング言語の研究はシーケンシャル計算のコンテキストで行われており、現在までに、ほとんどの最新のプログラミング言語で使用可能な機能のコア(たとえば、高階関数、(部分)型推論、パターンマッチング)にほぼ収束しています、ADT、パラメトリック多型)、よく理解されています。同時計算および並列計算のためのプログラミング言語機能について、そのようなコンセンサスはまだありません。
前のポイントに関連して、タイピングシステムの研究分野では、ほとんどのアクティビティが逐次計算に関するものであることがわかりました。この作業を一般化して、並行計算と並列計算を制約する扱いやすい便利なタイピング分野を見つけることができますか?
前のポイントの特別なケースとして、カリー-ハワード対応は構造証明理論と関数型プログラミングに関連し、コンピューターサイエンスと数学(の基礎)の間の持続的な技術移転につながります。たとえば、ホモトピー型理論は印象的な例です。並行計算(の一部の形式)に拡張できる多くの興味をそそるヒントがあります。
プログラムの仕様と検証は近年、例えばIsabelleやCoqのようなインタラクティブな証明アシスタントを使用してかなり成熟しましたが、この技術はまだ日常のプログラミングで大規模に使用できるにはほど遠いです。この状況を改善するために、まだやるべきことがたくさんあります。
新しい形式の計算のためのプログラミング言語と検証技術。私は
ここで、特に量子計算と生物学的に触発された計算メカニズムについて考えています。例えばここを参照してください。
統一。プログラミング言語、型、検証には多くのアプローチがあり、それらの間には多くのオーバーラップがあり、さらに抽象的なアプローチが発見されるのを待っていると感じることがあります。特に、生物学的に着想を得た計算メカニズムは、私たちを圧倒し続けるでしょう。
PL研究の問題の1つは、提案されたソリューションが機能するかどうかをすぐに判断できるP / NP質問のような明確な未解決の問題がないことです。
プログラミング言語の研究を制限するいくつかの仮定をリストしましょう。これらは、プログラミング言語が何であるかについての重要な部分であると感じているため、または代替案を探すことは「もうプログラミング言語の設計ではない」ために、脱却するのは困難です。各仮定で、その制限効果をリストします。
プログラムは構文構造です。
部分的に書かれたプログラムは実行できません。
プログラムとは、コンピューターに指示を与えることです。
プログラミングは人間工学に似ており、普通の人が行うことはできません。
続けられると思います。
私が疑問に思っている問題が1つあります。それがオープンチャレンジとしてふさわしいかどうかはわかりません。
数学的知識は時間とともに着実に成長しています。理論的基礎、概念、表記法、および証明は、何世紀にもわたって進化してきました。数学者は、いつでも体系的かつ正式な方法でそのグローバルな一貫性をチェックすることなく、集計を管理しました(それを行う試みはありましたが)。
プログラミング言語とプログラムライブラリは、時間の経過とともに同様に集約され、進化することを期待する必要があります。どのようなツールがプログラミング結果とライブラリの集約を管理し、すべての人が一貫して効果的に使用できるようにするのに役立つでしょう。新しいプログラミング言語ごとにライブラリをやり直す必要がありますか。プログラミング媒体としての本質的な性質よりも意図したアプリケーションに適したライブラリを持っているため、なぜ言語を選択する必要があるのでしょうか?
別のトピックでは、次の質問でアイデアを見つけることができます。プログラミング言語は自然言語に似てきていますか?私は、このアイデアは多くの理論的なコンピューター科学者にアピールしないかもしれないことを理解していますが、異なる問題や異なる観点から見ることによって、まだ役に立つかもしれません。私は投稿された多くのアイデアに同意することはできませんが、それが議論の目的です。
前世紀にかけて、応用および理論的側面からプログラミング言語の途方もない革新と爆発がありましたが、これは「進化の爆発」に似た、コンピューティングの歴史の中で唯一/一度のイベントである場合があります(cs.seの「なぜこれほど多くのプログラミング言語があるのか」も参照してください)、したがって、この点で未来は過去のようにはなりません。ただし、プレイ/開発中の特定可能な長期の現在の傾向があります。
プログラミング/ソフトウェアの複雑さと、それを管理/最小化/緩和/削減する方法は、言語設計に常に影響を与えているトピックであり、非常に大きく/複雑なソフトウェアシステムでは非常に一般的であり、現在の時代ではさらに重要になります。これはOOPの設計原理の主要な側面でしたが、今では非常に複雑なOOPシステムがあります!それに焦点を合わせて熟考することで、ブルックスの神話マンマンなどの分野の古典が生まれました。これは、多くの点で非常に有効な視点であり、おそらくそれが書かれたときよりも関連性があります。
並列処理。ハードウェアの並列性が向上し(マルチコアなど)、クロック速度の向上だけではパフォーマンスが向上しなくなりました。この変化は2000年代中頃に起こり、言語の研究/設計に大きな影響を及ぼしています。並列化は常にトピックでしたが、新しい最重要性/緊急性があり、プログラミングでは並列化が過度に複雑で困難であるという広範な考え方/コンセンサスがあり、異なる理論的アプローチがこれを軽減する可能性があります。これに関する素晴らしい参考文献:並列コンピューティング研究の展望:バークレーからの見解
データマイニング / ビッグデータ。これらはプログラミング言語の設計に影響を与えています。また、データベースアーキテクチャの新しい方向性は、プログラミング言語の波紋/影響です。
スーパーコンピューティングは言語設計に大きな影響を与え、また、例えばMapReduceのような新しい言語の場合、並列処理やデータマイニング/ビッグデータとも重なります。
ビジュアル / データフロープログラミング。これらの種類の「言語」が増加しています(ある意味では、視覚プログラミングは多くの点で実際にプログラミングを「言語」から切り離しています)。また、平行度を備えた強力な他家受粉。
AI。これはより長い範囲のワイルドカードであり、コンピューター言語とプログラミングにどのように影響するかは現時点ではあまり明確ではありませんが、おそらく非常に重要です。過去には(別の形式で)prologのような言語全体につながりました。驚くべき結果をどのように適用できるかの初期の指標は、遺伝的アルゴリズム / 遺伝的プログラミングです。
「プログラミング言語の未来」に沿った有用なアイデアを持っているかもしれないリファレンス、Beyond Java by Tate。彼は(議論の余地はあるものの)多分Java(おそらく最も洗練された/包括的なプログラミング言語の1つ)がその年齢を示し始めており、長期的にその場所を埋めるために新しい言語/アプローチが出現する兆候があることを熟考しています。