はい、それはどこにでも適用できますが、それがどの文脈で使用されることを意図しているかに注意することが重要です。これは、アプリケーション全体がクラッシュすることを意味するものではなく、@ PeterMが指摘したように、多くの場合、壊滅的である可能性があります。目標は、全体としてクラッシュすることはないが、内部でエラーを処理できるシステムを構築することです。私たちの場合、年間数分のオーダーのダウンタイムが予想されるのはテレコムシステムでした。
基本的な設計は、システムを階層化し、システムの中央部分を分離して、作業を行う他の部分を監視および制御することです。OTPの用語では、スーパーバイザープロセスとワーカープロセスがあります。スーパーバイザーには、ワーカーや他のスーパーバイザーを監視する役割があり、ワーカーが実際のすべての作業を行っているときにクラッシュしたときに正しい方法で再起動することを目的としています。機能を厳密に分離するというこの原則を使用してシステムをレイヤーに適切に構造化することで、ワーカーからスーパーバイザーへのエラー処理のほとんどを分離できます。あなたは小さなものになってしまうことを試みますフェイルセーフエラーカーネル。これが正しければ、システムの他の部分のどこでもエラーを処理できます。この文脈で、「let-it-crash」哲学が使用されることを意図しています。
可能な限り少ない場所で実際にエラーや障害を処理することを目的として、どこでもエラーや障害について考えているというパラドックスが発生します。
エラーを処理するための最良のアプローチは、もちろんエラーとシステムによって異なります。プロセス内でローカルにエラーをキャッチしてそこで処理しようとするのが最善の場合もありますが、それが機能しない場合は再度失敗するオプションがあります。多数のワーカープロセスが連携している場合は、それらすべてをクラッシュさせて再起動するのが最善の場合がよくあります。これを行うのはスーパーバイザーです。
何かがうまくいかないときにエラー/例外を生成する言語が必要です。そうすれば、それらをトラップしたり、プロセスをクラッシュさせたりすることができます。エラーの戻り値を無視することは同じことではありません。