私はすべての答えを詳細に読む時間がありませんでした...しかし、私は面白がっていました。
1960年代から70年代前半にも同様の論争がありました(コンピューターサイエンスの歴史はしばしば繰り返されます):高レベル言語をコンパイルして、プログラマーが手作業で作成したマシンコード(アセンブリコードなど)と同じくらい効率的なコードを作成できますか?誰もがプログラマーがどのプログラムよりもはるかに賢く、非常に賢い最適化を考え出すことができることを知っています(実際には、現在はピープホール最適化と呼ばれるものをほとんど考えています)。これはもちろん私の皮肉なことです。
コード拡張の概念さえありました:優れたプログラマーによって生成された同じプログラムのコードのサイズに対するコンパイラーによって生成されたコードのサイズの比率(これらが多すぎるように:-)。もちろん、この比率は常に1より大きいという考えでした。当時の言語は、CobolとFortran 4、または知識人向けのAlgol 60でした。Lispは考慮されていなかったと思う。
誰かがコンパイラを作成して、時々1の拡張率を得ることができるという噂がありました...コンパイルされたコードが手書きのコードよりもはるかに優れている(そしてより信頼できる)ルールになるまで。当時の人々はコードサイズを心配していました(小さな記憶)が、速度やエネルギー消費についても同じことが言えます。理由は説明しません。
奇妙な機能、言語の動的な機能は重要ではありません。重要なのは、それらが使用されるかどうか、使用されるかどうかです。パフォーマンスは、どんな単位(コードサイズ、速度、エネルギーなど)でも、プログラムの非常に小さな部分に依存することがよくあります。したがって、表現力を与える施設が実際に邪魔にならない可能性が十分にあります。優れたプログラミングの実践では、高度な機能は規律ある方法でのみ使用され、新しい構造を想像します(これがLispのレッスンでした)。
言語に静的な型付けがないという事実は、その言語で書かれたプログラムが静的に型付けされないことを意味していません。一方、プログラムが使用する型システムは、型チェッカーが現在存在するにはまだ十分に形式化されていない可能性があります。
議論の中で、最悪の場合の分析(「停止問題」、PERL解析)への参照がいくつかありました。しかし、最悪の場合の分析はほとんど無関係です。重要なのは、ほとんどの場合または有用な場合に何が起こるかです...しかし、定義されているか、理解されているか、経験されています。プログラムの最適化に直接関係する別の話があります。ずっと前にテキサスの主要な大学で博士課程の学生と彼の顧問(後に国立アカデミーの1人に選出された)の間で行われました。私が思い出すように、学生はアドバイザーが手に負えないことを示した分析/最適化問題の研究に固執していた。すぐに彼らは言葉を話すことはもうありませんでした。しかし、学生は正しかった。ほとんどの実際のケースでは問題は十分に扱いやすいので、彼が作成した論文は参考研究となった。
そしてPerl parsing is not
computable
、その文が意味するものは何でも、文言についてさらにコメントするために、非常によく形式化された言語であるMLにも同様の問題があります。Type
checking complexity in ML is a double exponential in the lenght of the
program.
それは最悪のケースの複雑さをもたらす非常に正確で正式な結果です...それはまったく問題ではありません。Afaik、MLユーザーは、型チェッカーを爆発させる実用的なプログラムをまだ待っています。
多くの場合、以前と同様に、人間の時間と能力は計算能力よりも不足しています。
将来の本当の問題は、まだ使用されているすべてのレガシーソフトウェアを書き換える必要なく、新しい知識、新しいプログラミング形式を統合するために言語を進化させることです。
数学を見ると、それは非常に大きな知識体系です。それを表現するために使用される言語、表記法、概念は何世紀にもわたって進化してきました。新しい概念で古い定理を書くのは簡単です。私たちは主な証明を適応しますが、多くの結果を気にしません。
しかし、プログラミングの場合、すべての証明を最初から書き直さなければならない場合があります(プログラムは証明です)。私たちが本当に必要とするのは、非常に高レベルで進化可能なプログラミング言語であるかもしれません。オプティマイザーの設計者は喜んで従います。