自然言語でのshouldの正確な意味も明確ではありません。「ホイールは列に収まる必要があります」と言うとき、それは正確にはどういう意味ですか? mustと同じ意味かもしれませんが、その場合、構文には意味がありません。そうでなければ、これが満たされるためには、どの程度の自信が必要ですか? ホイールが合わない場合の対処法は?
あなたが言及した意味では、いくつかの同等物がありますが、それらに相当する単語を使用する言語を私は知りません:
テスト/アサーション
ASSERT
多くの場合、言語ディレクティブ、マクロ、またはテスト ライブラリ関数です。mustASSERT
に対応する意味で、一部の言語とテスト フレームワークは、チェックが失敗した場合に警告メッセージを吐き出す「警告アサーション」用のマクロを定義しますが、テストを回避または失敗することはありません。これは should に対応します。
例外処理
ある意味では、スローされた例外を類似物と見なすことができます。例外がキャッチされた場合、プログラムは何かが本来あるべきものではないケースを処理できます。ただし、例外は、プログラムが機能するためには何かの失敗を説明する場合があります。その場合、例外はキャッチされないか、ハンドラーがプログラムを正常に失敗させます。ただし、常にそうであるとは限りません。場合によっては、コードが実行されて、可能性があるか、可能性が低いものをテストし、通常はスローされることを予期して例外がキャッチされます。
制約ロジック
さまざまな正式な自然言語ドキュメントでのmustとshouldの一般的な意味の 1 つは、制約に関するものです。must は、常に満たさなければならない制約を指定します。満たされない場合、状態は互換性がありません。一方、shouldは、常に制約を満たすことを意味します。状態とmustによって暗示される制約が与えられた場合は可能ですが、不可能な場合でも有効です。非公式の制約ロジックでは、これは文脈に「外部制約」がある場合に発生します。制約」は、コンテキストの知識がある場合にのみ可能である可能性があり、コンテキストが与えられると、「必要な制約」のさまざまなサブセットも満たすことができますが、同時に満たすことはできません。そのため、一部の制約ロジック仕様言語 (それらを「プログラミング言語」と呼びますが、定義によって異なります) 制約の順序付けの概念があります - 制約の最初のレベルはmustに対応し、次のレベルはshouldに対応し、可能な場合、制約はその外部のすべての制約が与えられた場合に満たされる必要があります(以前のレベルでは)、それが次のレベルのいくつかの制約と競合する場合でも、それは満たされません。