質問

TMが言語を認識し、受け入れまたは拒否された状態に入る場合、言語は決定できます。開発者として。これは、プログラムにバッファーオーバーフローまたはデッドロックが含まれているかどうかを判断できることを意味するため、これは重要だと思います。また、次の問題は密接にはなりません。

  • プログラムは、初期化されていない変数にアクセスします。
  • 2つのコンテキスト無料の文法を実行します。同じランゴージを説明してください。
  • サブルーチンへのパラメーターが参照またはコピー結果によって渡された場合、それは違いを生みますか

決定可能性の観点から、あなたは決定可能性の重要なポイントであり、なぜ決定可能性が重要であるか(特に開発者にとって)。

注:箇条書きは答えが問題ありません - 自分でトピックを調べることができます。主なポイントが何であるかを知りたいだけです。

役に立ちましたか?

解決

多分これはに属します CS理論交換, 、しかし、とにかく試してみます。

重要なポイントは、いくつかの問題は拘束できないことです。つまり、アルゴリズムでは解決できないため、他の方法で取り組む必要があります。これらの問題の中には、コンピューター言語に関する多くの「メタの問題」があります。たとえば、 ウイルスの検出.

問題は想像もできないと判断したため、いくつかの可能な行動コースがあります。

  1. いくつかの問題が半密接になる可能性があります、つまり、 セミ- いくつかのケースを解決するアルゴリズムですが、他のケースでは永遠にループします。半アルゴリズムを実装するときは、タイマーを入れて戻ります no answer 時間がなくなると。
  2. 問題を単純化することにより、問題の重要な部分をほんの少し解決します。
  3. 2 +問題が複雑になったときにユーザーに入力を依頼します。
  4. 正解を得るヒューリスティックを使用してください 多くの 時の。
  5. 別の言語、おそらく非耕作の完全な言語を使用します。

1〜3は、プログラム検証剤を含む自動化された推論ツールに人気があります。 4は、ウイルススキャナーが行うことです。 5はaです 良い選択 ユーザーがスクリプトを作成してより大きなシステムを自動化できるようにする場合。完全なJavaScript/Scheme/lua/何でもそれらを与える代わりに、無制限の再帰/ループを許可しない制限付きサブセットを提供します。

他のヒント

条件を満たすソフトウェアを書く必要があるとします。「実行時には、直接または間接的に自分自身を呼び出すことになってはならない」。

その条件は決定不可能ですが、より制限的な条件は決定できます。たとえば、「関数ポインターを使用してはならない、および関数は直接的または間接的にそれ自体への呼び出しを含めるものではない」。

これは、柔軟性を決定するために柔軟性を交換することができることを強調するためであり、システムの特定の必要なプロパティが強制力を発揮できるようにすることです。

プログラミング言語が決定可能な場合、プログラムがその言語の有効なプログラムであるかどうかを常に決定することができます。

しかし、たとえプログラムがその言語の有効なプログラムであっても、そのプログラムがバッファオーバーフローまたはデッドロックが発生する可能性があるかどうかは把握できないままです。

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