Haskellの束



Haskellの束はかなり奇妙な場所です。 厳密な計算を行う伝統的な言語の束のようには見えません...



...これは古き良き単純なデータからの大量のゴミです!



Haskellヒープでは、すべてがきれいに箱に包まれています。 Haskellの山は、たくさんの贈り物 (サンク)です。



ギフトの中身を知りたいときは、それを開きます (計算します)。



ギフトは通常なんらかの形で呼ばれ、ギフトを開くと、 ギフト券 (データコンストラクター)が取得されます。 証明書には2つの機能があります。何らかの方法で呼び出され(たとえばJustまたはRight )、現在の場所を正確に示します。 運が良ければ、いくつかのギフト(証明書-タプル)が内部に表示されることもあります!





ギフトを受け取る必要はありません。また、証明書を使用する必要もありません。

ヒープ上のギフトはかなり厄介です。 それらを開くと爆発するものもあれば、邪魔されたときに他のギフトを開くスピリットが住むものもあります。



ギフトを開いたときに何が起こるかを理解することは、Haskellのプログラムがメモリと時間をどのように費やすかを理解するための鍵です。



この一連の記事では、エドワードがコミックの世界に飛び込んで、怠zyな言語でのコンピューティングの基本を紹介します。 楽しんでください!

次回: Haskellヒープでのコンピューティング

発言。 厳密に言えば、このシリーズは「GHC Pile」と呼ばれるべきです。 しかし、できるだけ多くのGHC依存関係を削除し、任意の遅延言語に適用されるメタファーを提案しようとしました。 当初、このシリーズには「デモマンがレイジーコンピューティングを学ぶ」というタイトルが付けられていましたが、エラーやフリーズを引き起こすサンクの爆弾メタファーがありました。 それは怠metaのいくつかの重要な側面を捉えているので、ギフトのメタファーがより好きです。 「ボックス化された」という用語の使用は少しわかりにくいです。GHCのボックス化またはリフトされた値は、ハングまたはエラーになる場合がありますが、ボックス化されていない値はCのヒープに表示されるものと似ています。オブジェクトのように見えるプリミティブ値。 明確にするために、今後はボックス化という用語を使用しません(もちろん、ボックス化されていない型は考慮しません)。



All Articles