質問

質問への彼の議論でブライアンの前提「副作用良いことはありますか?」 のは興味深いです。

  

コンピュータが(むしろラムダとうまく動作するように設計されているよりも)効果でうまく動作するように設計されているフォン・ノイマンマシンです。

私はアプローチの並置によって混乱しています。私は黒と白としてそれらを見ることができません。証拠価値とは何かます:

  

コンピュータは、[1]

の影響でうまく動作するように設計されているフォン・ノイマンマシンです

最後の部分は私を混乱させるます:

  

はなくラムダとうまく動作するように設計されているよりも[2]

ラムダは、関数型プログラミングのためのシンボルとして使用されていますか?それとも、機能的プログラミングのためeuphenismsていますか?本当のメッセージとは何ですか?

どのような意味において、前提の部分は、[1]と[2]の権利ですか?返信に隠された施設は何ですか?誰かが、元の前提を正当化することはできますか?フォン・ノイマン・マシンとラムダは本当に仕事はどうすればよいですか?

役に立ちましたか?

解決

私はあなたが求めているものを全くわからないんだけど、私はそれを読んで、あなたは彼がラムダで何を意味するか求めている?

彼は、関数型プログラミングのための理論的基礎の多くを形成するラムダ計算する、を参照しています。それは高次機能について抽象(とりわけ)の表記法について説明すると推論している。

フォンノイマンマシンは、我々が持っているものは基本的です。プログラムは操作およびストア(当社RAM)にアクセスする命令で実行されます。それは、すべてが暗黙的に副作用を介して行われています。データは、RAMの一部の領域から読み出したビットを処理し、及びRAM内の一部(他の、おそらく)領域に書き戻されます。 副作用がなければ、CPUはそれの電源がオンにされたときにゴミデータがそのレジスタであることを起こっどんな操作に制限されます。

ラムダ計算は、(「間接的にアクセスすることができるか」私たちのRAMをので、この原則をベースマシンは(基本的に、私たちのレジスタ)「CPUがアクセスできるか」との区別を持っていない、副作用の概念を持っていない、と)。そのような機械ですべてが既存のものを修正することはありません、1つ以上の引数を取る関数で、機能的な原則をベースに、新しい値を返すことになります。 (そして、いや、私は...それは、ハードウェアにどのように動作するかわからない:))

それは、あなたの質問に答えるのか?

他のヒント

ここではを何より多くの深さである私はを意味し、他の人が同意するか、彼らが言っているかどうかを確認するために興味深いものになるもののます。

コンピュータは、今日どのように機能するかを考えてみましょう。あなたは、整数と浮動小数点レジスタ、およびランダム・アクセス・メモリの広大な配列、および主にこのレジスタ/メモリセルの値を読み取るに基づいてフォーム」である指示を持っているハードウェアを持って、このレジスタにこの新しい値を突く行きます/細胞'。整数は32または64ビットである(メモリセルを更新することは、キャッシュ・ラインと一貫性とメモリモデルとその他もろもろに来るとき。PERFの影響のすべての種類を有する)、ほぼすべてのプログラミング言語は、正確にハードウェアに一致するこれらのデータ型を表面。ほぼすべてのランタイムは、スタックに割り当てられたオブジェクトが安い小さなコールスタック、および非スタックベース-寿命が必要な場合、他のオブジェクトを作成および破棄することができ、より高価な「ヒープ」と連動します。

今最も近代的な関数型プログラミング言語を考えます。不変性は当たり前です。あなたはめったに新しい値でメモリ「を突くない」でしょう。 (これは、あなたがより多くを割り当てる意味し、より多くのの新しいのオブジェクトの作成を意味します。)ラムダと継続が標準です。あなたはより多くのめったにスタックに対応したオブジェクトの寿命を持っていません。 (確かに、いくつかのFPランタイムはスタックを使用しないでください。CPSの実装でスタックとプログラムカウンタの概念は、アウトオブプレースです。)再帰はループ構造であるので、あなたは少なくとも必要性「テール」は消費しないために呼び出しますとにかくスタック。実際にすべてが「ヒープ」割り振る必要がある、そしてもちろん、あなたは、ガベージコレクタが必要です。代数的データ型は、タグ付けされたデータを提供します。理論的にはこれらのタグは、データのみの余分な2つのまたは3ビットを必要とするが、実行時に一致するように、彼らはしばしばメモリ以上の余分な言葉を持っている必要があります。 ...私は一種の蛇行していますが、あなたはが、ほとんどの場合、のFP言語では傾向がないものはは最悪の規模のものにに正確に対応するために、のか、あるの典型的なコンピュータのハードウェアアーキテクチャと基本的な言語ランタイムのの最も高価ます。

これは、そのようにする必要はありません。一つは、実行時には、スタックを避け、およびヒープ/割り当てファスト(マルチスレッドアプリケーションのためではなく、ボトルネック)を行う世界を想像することができます。一つは、相互運用可能な整数型は29個のまたは60ビットを持っている世界を想像することができ、およびランタイム/ハードウェアは、例えばのための単語の余分な残りのビットを使用しますGC、または代数タイプのタグ、またはその他もろもろ。 (私はいくつかのFPの実装/ランタイムがこれらのトリックのいくつかを行うと思います。)等等...ポイントは、あなたが与えられた近代的な関数型言語を取り、それを中心にランタイム/ハードウェアを設計した場合、それは非常に異なって見えるでしょう、です今日の典型的なハードウェア/ランタイムから。

(私はterrificallyことを伝えないと思う、と私は正確には分かりませんが、うまくいけば、あなたはここで私の論文の要旨を完全に理解多くの詳細について不正確なと思います。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top