4

これは私の最初の質問なので、意味が十分に伝わるかどうかわからないので、少し緊張しています. ともあれ、いざ……。

プログラミングの新しいマイルストーンに到達するたびに、常に共通の目標が 1 つあるように思われます。

機械語、オペコード/ニーモニック、プロシージャ/関数、構造体、クラス (OOP) などは、常に、より自然で理解しやすく保守しやすい方法でプログラムを計画、構造化、コーディングするのに役立ちました。

もちろん、関数型プログラミングは決して目新しいものではありませんが、近年、ある種のルネッサンスを経験しているようです。また、Microsoft が F# を主流のプログラミング言語に追加することで、FP が大幅に強化されると考えています。

元の質問に戻りますが、プログラミングは最終的には制限や規則がほとんどない自然言語 (英語) で行われると思います。コンパイラは、コードから情報を抽出する AI/NLP システムの一部になります。テキストと言うべきか、コンパイラがコンパイルできる中間言語に変換します。

では、FP はプログラミングを自然言語プログラミングに近づけるのでしょうか?それともむしろ障害であり、主流の OOP が私たちを自然言語プログラミングにより速く導くのでしょうか?

この質問は、自然言語プログラミングの使いやすさや実現可能性について議論するために使用すべきではありません。未来だけが教えてくれるからです。

4

9 に答える 9

29

申し訳ありませんが、私はまったく同意しません。コードは最終的には物 (オブジェクト) を作成するための青写真であるため、確実に機能するためには、非常に正確で規則に準拠している必要があります。ナプキンにアイデアをスケッチすることが機械工学を引き継ぐのと同じように、自然言語がプログラミングを引き継ぐことはありません。

于 2008-11-12T23:49:24.407 に答える
8

個人的には、自然言語プログラミングはややクラックだという結論に達しました。

英語は、プログラミング言語として完全に使用するのに正確には適していません。感情的な用語や、プログラミングには関係のない他の抽象的な概念など、プログラミングとは相関関係のない抽象的な言葉が多すぎます。 language" が続き、その "自然言語" はプログラミングである可能性がありますが、そうではありません。

ここであなたの言っていることはわかりますが、問題は、英語にはスクラップ用語が多すぎて、同じものに対して繰り返し名前が付けられていることです。そのため、プログラミングのドメインに固有でさえないものを使用することになりますプログラミングの仕事。

プログラミングが実際には高度に専門化された言語であることを理解し、定義が非常に主観的な英語とは異なり、単純で宣言的で一貫した定義を持つ言語で頭脳を使ってコーディングすることを学ぶ方が適していると思います。 .

言語の内外を学習し、その図式と動作を学習したら、それらを組み合わせて新しいことを行うことができます。

Perl を例にとると、誰もがライン ノイズであると非難しますが、多くのプログラミング言語を知っている場合、「OMG LINE NOISE」の最初のハードルを乗り越えると、読まないものを作成できる程度の直感性があります。期待どおりに魔法のように動作することを確認してください。

そして、私見ですが、ドメイン固有言語は、的を絞った問題解決のために話し言葉に勝っています。

于 2008-11-12T23:51:08.257 に答える
3

「では、FP はプログラミングを自然言語プログラミングに近づけるのでしょうか、それともむしろ障害であり、主流の OOP は私たちを自然言語プログラミングにより速く導くのでしょうか?」

ない。どちらも、コンピューターに何をさせたいかを具体的にしなければならないという同じ原則に基づいて動作します。不確実性の余地はあってはならず、どのパラダイムも自然言語とは何の関係もありません。彼らは、複雑なコードと大規模なコードベースの管理と構造化という、まったく別の問題に取り組んでいます。

自然言語の大きな障害は構文解析です。自然言語を明確に解析することは不可能です。人間でさえ、多くのコンテキスト情報 (顔の表情、声のトーン) がなければそれを行うことはできません。

OOP と FP は、解析後に何が起こるかについてのみです。各セマンティック要素が識別および解析された後、どの意味が割り当てられるか。

自然言語でプログラミングできる日が来るかもしれません。今後数十年以内にそれが起こるとは思えませんが、いつの日か起こるかもしれません. しかし、今日のプログラミング パラダイムは、このプロセスを加速することも遅らせることもありません。それらは単にそれとは何の関係もなく、解析の問題を解決するのに役立ちません.

于 2008-11-12T23:56:59.167 に答える
2

参考までに、Inform 7はおそらく自然言語プログラミングに最も近いものです。それは非常に特殊な領域のための言語です: インタラクティブ フィクションの作成、つまり「アドベンチャー ゲーム」から始まった種類のソフトウェアです。

于 2008-11-13T06:08:13.800 に答える
2

関数型プログラミングは、オブジェクト指向プログラミングよりも自然言語プログラミングに近いとは思いません。関数型プログラミングには、非常に動詞指向の構文があります。Lisp や Scheme でプログラミングするときは、関数やデータに対して実行するアクションについて考えるのに多くの時間を費やします。オブジェクト指向プログラミングでは、ほとんどの時間をオブジェクトについて考えることに費やしているため、非常に名詞指向のように見えます。ただし、Smalltalk、C++、および Java では、(いわば) すべての名詞に動詞を適用できるメソッドもあります。

オブジェクト指向プログラミングが必ずしも自然言語プログラミングにつながるとは思いませんが、私の観点からすると、オブジェクト指向プログラミングは関数型プログラミングよりも少し近いものです。私には、関数型プログラミングは自然言語よりも数学に少し近いように思えます。それはそれほど悪いことではありません。なぜなら、とにかくプログラミングするときに数学を考えるべき言語だからです。

于 2008-11-12T23:55:51.773 に答える
0

プログラミング言語の次の進化を探しているなら、私は DSL に目を向けます。DSL は高度にカスタマイズされた言語を可能にし、洗練されたビジネス ユーザーがデータ型、スレッド、UI ウィジェットなどのコーディングの詳細を気にすることなくシステムを構成できるようにします。

関数型言語は、「高度な並列処理」の分野で活躍するでしょう。

于 2008-11-13T03:21:30.080 に答える
0

「Windows Internals the 5th Element」がデータベースに追加され、私の住所に発送されるという主観的な質問がここに来ると思いますか? もしそうなら、自然言語プログラミングは関数型プログラミングに非常に近いものになるでしょう。そうでなければ、自然言語プログラミングは私の注文品を発送してくれませんよね? 関数型プログラミングは、自然言語とは何の関係もないので機能します。

于 2008-11-13T04:04:43.237 に答える
0

主に C# 3.0 のクールな新機能の結果である関数型プログラミングへの現在の関心の高まりは、基本的に並列処理を可能にすることであり、マルチコア コンピューティングへの移行を示しています。私見、これを「自然言語プログラミング」への次のステップと見なすことはできないと思います

于 2008-11-13T01:28:30.120 に答える
0

いいえ。関数型プログラミングは、コンパイラーの証明に近づくでしょう。それは、コードに関するより多くのアサーションを証明するコンパイラです。より多くのコンパイラーが私たちに証明できるほど、ソフトウェア開発は芸術ではなくエンジニアリングに近づきます。

NLP プログラミング言語は、おそらく「言ったことではなく、言ったことを実行する」スタイルの言語です。それはおそらく、関数型言語が進む方向とは逆です。

「すべてのプログラミング言語は LISP に収束しています。」

于 2008-11-13T05:50:49.140 に答える