以下は、コースの講義ノートから直接、修了したばかりのプログラムの設計方法 (簡略化されたラケット) コースから得られる 2 つの最大のもののようです。
1) 末尾呼び出しの最適化、および非関数型言語でのその欠如:
残念ながら、他のほとんどの言語は TAIL CALL OPTIMIZATION をサポートしていません。別の言い方をすれば、テールコールでもスタックを構築します。
テール コールの最適化は、ほとんどの言語の主要な要素が開発されてからずっと後の 70 年代半ばに発明されました。テール コールの最適化がないため、これらの言語は、任意のサイズのデータをトラバースできるようにする固定の LOOPING CONSTRUCTS セットを提供します。
a) この種の最適化を特徴としない手続き型言語で、このタイプの最適化に相当するものは何ですか? b) これらの等価物を使用することは、スタックを持たない言語で同様の状況でスタックを構築することを避けることを意味しますか?
2) 変異とマルチコア プロセッサ
このメカニズムは、プログラミングで使用する他のほとんどすべての言語の基本です。いくつかの理由により、これまで導入を遅らせてきました。
基本的であるにもかかわらず、驚くほど複雑です
これを使いすぎると、プログラムが並列化 (複数のプロセッサで実行) に対応できなくなります。マルチコア コンピューターが一般的になった現在、必要なときにのみミューテーションを使用する機能がますます重要になっています。
ミューテーションを使いすぎると、プログラムを理解するのが難しくなり、プログラムをうまくテストするのが難しくなります。
しかし、可変変数は重要であり、このメカニズムを学ぶことで、Java、Python、および他の多くの言語を使用する準備が整います。そのような言語でも、「ほぼ関数型プログラミング」というスタイルを使いたいものです。
このコースを受講する前に、Java、Python、および C++ をいくつか学んだので、突然変異を当然のことと考えるようになりました。今、それはすべて上記の声明によって空中に放り出されました. 私の質問は次のとおりです。
a) 2 番目の箇条書きで提案されていること、およびそれに対して何をすべきかについて、より詳細な情報をどこで見つけることができますか? b) より不注意なスタイルとは対照的に、「ほとんど関数型プログラミング」スタイルからどのような種類のパターンが出現するかこのコースを受講する代わりに、他の言語を続けていればよかったのではないでしょうか?