プログラミング言語理論の研究と未解決の課題


32

このようないくつかの一般的な議論の精神で、私はプログラミング言語の研究における未解決の課題とホットなトピックについて意見を集めるつもりでこのスレッドを開いています。議論がプログラミング言語の研究の将来に関する意見を表面化させることさえ期待されます。

この種の議論は、PLに興味のある私のような新入生の研究者だけでなく、すでにある程度関与している研究者にも役立つと考えています。


7
コミュニティwiki?
Suresh Venkat

2
「TCSのフロンティア」の質問のテキストを引用または要約すると、この質問とそれに答える人たちは本当に改善されると思います。この質問に対する予想される回答の範囲は明確ではありませんが、他の質問は予想される内容についてより正確です。
ヴィジェイD

私がしばらく前にstackoverflowでこの質問をしたとき...ダウン票を得て、私の質問は閉じられました!
ロールシャッハ

回答:


23

PL理論の全体的な目標は、プログラミング言語と、言語が使用される技術的エコシステムを改善することにより、大規模プログラミングのコストを下げることだと思います。

以下は、持続的な注目を集めているPL研究分野の高レベルでやや曖昧な説明であり、おそらくしばらくはそうするでしょう。

  • ほとんどのプログラミング言語の研究はシーケンシャル計算のコンテキストで行われており、現在までに、ほとんどの最新のプログラミング言語で使用可能な機能のコア(たとえば、高階関数、(部分)型推論、パターンマッチング)にほぼ収束しています、ADT、パラメトリック多型)、よく理解されています。同時計算および並列計算のためのプログラミング言語機能について、そのようなコンセンサスはまだありません。

  • 前のポイントに関連して、タイピングシステムの研究分野では、ほとんどのアクティビティが逐次計算に関するものであることがわかりました。この作業を一般化して、並行計算と並列計算を制約する扱いやすい便利なタイピング分野を見つけることができますか?

  • 前のポイントの特別なケースとして、カリー-ハワード対応は構造証明理論と関数型プログラミングに関連し、コンピューターサイエンスと数学(の基礎)の間の持続的な技術移転につながります。たとえば、ホモトピー型理論は印象的な例です。並行計算(の一部の形式)に拡張できる多くの興味をそそるヒントがあります。

  • プログラムの仕様と検証は近年、例えばIsabelleやCoqのようなインタラクティブな証明アシスタントを使用してかなり成熟しましたが、この技術はまだ日常のプログラミングで大規模に使用できるにはほど遠いです。この状況を改善するために、まだやるべきことがたくさんあります。

  • 新しい形式の計算のためのプログラミング言語と検証技術。私は
    ここで、特に量子計算と生物学的に触発された計算メカニズムについて考えています。例えばここを参照してください。

  • 統一。プログラミング言語、型、検証には多くのアプローチがあり、それらの間には多くのオーバーラップがあり、さらに抽象的なアプローチが発見されるのを待っていると感じることがあります。特に、生物学的に着想を得た計算メカニズムは、私たちを圧倒し続けるでしょう。

PL研究の問題の1つは、提案されたソリューションが機能するかどうかをすぐに判断できるP / NP質問のような明確な未解決の問題がないことです。


1
量子コンピューティングと量子プログラミング言語を追加する場合、量子コンピューティングが発生していない場合でも、この計算モデルでいくつかのプログラミング概念がどのように転送されるかについての研究は、他に何もなければ、自然言語でのプログラミング、ファジープログラミング、物理計算と物理プログラミング(物質レベルでの直接的なプログラミング、分子レベルを超える)でさえ
ニコスM.

1
@NikosM。私は同意します、QCは大したことであり、徹底的に調査されています。この論文は、抽象化によってのみ発見された、量子力学の基礎とプログラミング言語理論との驚くべき関係を示しています。
マーティンバーガー14年

ニース、多分質問はこれらの種類の正式な(または正式ではない)関係に対処することができます
ニコスM.

11

プログラミング言語の研究を制限するいくつかの仮定をリストしましょう。これらは、プログラミング言語が何であるかについての重要な部分であると感じているため、または代替案を探すことは「もうプログラミング言語の設計ではない」ために、脱却するのは困難です。各仮定で、その制限効果をリストします。

  1. プログラムは構文構造です。

    • 本物のプログラマはiPadを使用してソースコードを作成することはありません。そして、たとえそれらを行ったとしても、Emacs、Eclipse、NetBeans、XCodeなどの場合ほど効率的ではありません。
    • プログラムを構築する別の方法に関する研究は、プログラミング言語の設計ではなく、グラフィカルユーザーインターフェイスの設計または教育のいずれかです(スクラッチを参照)。
  2. 部分的に書かれたプログラムは実行できません。

    • 少なくとも、実行が欠落部分に到達すると、ランタイムエラーが発生します。
    • 未完成のプログラムを実行するのに何が良いでしょうか?
  3. プログラムとは、コンピューターに指示を与えることです。

    • プログラミング言語の設計では、法律の作成および整理方法については何も言うことはありません。付属品。
    • 細菌はプログラムを書きません。
  4. プログラミングは人間工学に似ており、普通の人が行うことはできません。

    • 一般の人々は構文、概念、ツールを知らないので、プログラムを書くことはできません。
    • 普通の人がプログラムを書くことを可能にしようとしても、些細なことしか書けません。

続けられると思います。


2
ジェームズ:すばらしい、叔母に知らせます。Martin:これはまさに私が話しているようなものです。非テキストプログラミングは確立されていません。しかし、人間は画面上で単語を入力するために作られたものではないことは、私には明らかです。物を投げてブルーベリーを摘むのが得意です。
アンドレイバウアー

1
@AndrejBauer科学的な議論として、「それは私には非常に明白です」は改善を超えていません。プログラミング言語が最近の例にすぎない筆記システムの歴史を見ると、それらの歴史的な軌跡はロゴの書き方から離れています。文字列を解析する能力は、ブルーベリーよりも関連性が高いかもしれません。アルファベット表記は数千年にわたって進化してきたので、簡単に修正可能な大規模なバグが含まれている可能性は低いです。そうは言っても、ASCIIベースの線形文字列よりもうまくやれると信じてうれしいです。私たちがやるまでにはしばらく時間がかかると思います。
マーティンバーガー

1
私の答えのポイントは、「箱の外で考える」ことです。PL研究の隠された仮定を調べ、PL研究が持つ可能性をどのように制限するかを見る。
アンドレイバウアー

4
@AndrejBauer、範囲をPOPLに制限するのは間違いだと思います。この種の作業の多くはOOPSLA、ICSE、またはCHIでも行われます。新しい形式的なアプローチがない限り、POPLは興味がありませんが、POPLはPLコミュニティ全体ではありません。
サムトービンホッホシュタット

2
@DominicMulligan:確かに、これらはすべて非常に歓迎すべきアイデアです。私のコメントで、私はプログラミングとは何かの認識を変えようとしています。したがって、理論的なアイデアを実際にうまく利用できる場合(つまり、「普通の」プログラマーが日常生活でそれらを使用するということです)、私たちは勝ちました。
アンドレイバウアー

0

私が疑問に思っている問題が1つあります。それがオープンチャレンジとしてふさわしいかどうかはわかりません。

数学的知識は時間とともに着実に成長しています。理論的基礎、概念、表記法、および証明は、何世紀にもわたって進化してきました。数学者は、いつでも体系的かつ正式な方法でそのグローバルな一貫性をチェックすることなく、集計を管理しました(それを行う試みはありましたが)。

プログラミング言語とプログラムライブラリは、時間の経過とともに同様に集約され、進化することを期待する必要があります。どのようなツールがプログラミング結果とライブラリの集約を管理し、すべての人が一貫して効果的に使用できるようにするのに役立つでしょう。新しいプログラミング言語ごとにライブラリをやり直す必要がありますか。プログラミング媒体としての本質的な性質よりも意図したアプリケーションに適したライブラリを持っているため、なぜ言語を選択する必要があるのでしょうか?

別のトピックでは、次の質問でアイデアを見つけることができます。プログラミング言語は自然言語に似てきていますか?私は、このアイデアは多くの理論的なコンピューター科学者にアピールしないかもしれないことを理解していますが、異なる問題や異なる観点から見ることによって、まだ役に立つかもしれません。私は投稿された多くのアイデアに同意することはできませんが、それが議論の目的です。


一貫性が過度に重視されています。
アンドレイバウアー

1
控えめな提案ではありますが、これについてはあまり意見が一致していません。それでも、少なくとも私にとっては、理由についていくつかの説明的な言葉を持っている方がより役立つかもしれません。はっきりしない場合は、数学が矛盾する可能性があると言うつもりはありませんでしたが、一貫した手段で(必然的に)集約されていなかっただけです(歴史家はもっとよく言うでしょう)。CSの観点からは、集計の難しさについては間違っているかもしれません(これについて技術的な仕事をしたことはありません)が、ユーザーエクスペリエンスとよく聞かれる観点のみを関連付けているため、間接的にTCSによって生成された言語に有害です。
babou

1
まあ、私の発言は、一貫性がオールオアナッシングのアイデアであるという事実に関するものですが、実際には、ほとんどのソフトウェアは「ほぼ一貫した」ものです。それでも、私たちはそれを使用し、それが便利だと感じています。理論家は、実際には達成不可能で理想主義的な概念に取りつかれているのはなぜですか?それほどささいな方法で一貫性を定量化できると良いと思われます。
アンドレイバウアー

@AndrejBauer-返信いただきありがとうございます。私が書いたものに当てはまるように、私はあなたの声明に少し驚いています。絶対的な一貫性の何らかの形をサポートするものはありませんが、進化するコンテキストで集約を可能にし、意味のあるものにする何らかの実用的なアプローチへの願いだけです。あなたが言うように、ほとんど一貫性があります。その目的のために一貫性のある意味を見つけることはアイデアの一部であり、私は些細なこともそうでないことも答えを提案していませんでした。私は取りつかれた理論家ではありませんでしたし、あなたの答えから、私たちが対立する可能性のある場所がわかりません。
babou

1
私は「純粋な理論家」について暴言を言っていたと思います、それだけです。無視してください。
アンドレイバウアー

0

前世紀にかけて、応用および理論的側面からプログラミング言語の途方もない革新と爆発がありましたが、これは「進化の爆発」に似た、コンピューティングの歴史の中で唯一/一度のイベントである場合があります(cs.seの「なぜこれほど多くのプログラミング言語があるのか​​」も参照してください)、したがって、この点で未来は過去のようにはなりません。ただし、プレイ/開発中の特定可能な長期の現在の傾向があります。

  • プログラミング/ソフトウェアの複雑さと、それを管理/最小化/緩和/削減する方法は、言語設計に常に影響を与えているトピックであり、非常に大きく/複雑なソフトウェアシステムでは非常に一般的であり、現在の時代ではさらに重要になります。これはOOPの設計原理の主要な側面でしたが、今では非常に複雑なOOPシステムがあります!それに焦点を合わせて熟考することで、ブルックスの神話マンマンなどの分野の古典が生まれました。これは、多くの点で非常に有効な視点であり、おそらくそれが書かれたときよりも関連性があります。

  • 並列処理。ハードウェアの並列性が向上し(マルチコアなど)、クロック速度の向上だけではパフォーマンスが向上しなくなりました。この変化は2000年代中頃に起こり、言語の研究/設計に大きな影響を及ぼしています。並列化は常にトピックでしたが、新しい最重要性/緊急性があり、プログラミングでは並列化が過度に複雑で困難であるという広範な考え方/コンセンサスがあり、異なる理論的アプローチがこれを軽減する可能性があります。これに関する素晴らしい参考文献:並列コンピューティング研究の展望:バークレーからの見解

  • データマイニング / ビッグデータ。これらはプログラミング言語の設計に影響を与えています。また、データベースアーキテクチャの新しい方向性は、プログラミング言語の波紋/影響です。

  • スーパーコンピューティングは言語設計に大きな影響を与え、また、例えばMapReduceのような新しい言語の場合、並列処理やデータマイニング/ビッグデータとも重なります。

  • ビジュアル / データフロープログラミング。これらの種類の「言語」が増加しています(ある意味では、視覚プログラミングは多くの点で実際にプログラミングを「言語」から切り離しています)。また、平行度を備えた強力な他家受粉。

  • AI。これはより長い範囲のワイルドカードであり、コンピューター言語とプログラミングにどのように影響するかは現時点ではあまり明確ではありませんが、おそらく非常に重要です。過去には(別の形式で)prologのような言語全体につながりました。驚くべき結果をどのように適用できるかの初期の指標は、遺伝的アルゴリズム / 遺伝的プログラミングです。

「プログラミング言語の未来」に沿った有用なアイデアを持っているかもしれないリファレンス、Beyond Java by Tate。彼は(議論の余地はあるものの)多分Java(おそらく最も洗練された/包括的なプログラミング言語の1つ)がその年齢を示し始めており、長期的にその場所を埋めるために新しい言語/アプローチが出現する兆候があることを熟考しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.