语言是可判定的如果TM识别语言并进入“接受”或“拒绝”状态。作为开发者。我认为这很重要,因为它意味着我们可以确定程序是否包含缓冲区溢出或死锁。此外,以下问题是不可解决的:
就可判定性而言,您认为Decidability的关键点是什么?为什么Decidability很重要(特别是对开发人员而言)。
注意:答案中的子弹点很好 - 我可以自己查找主题。我只是想知道主要观点是什么。
答案 0 :(得分:3)
也许这属于cstheory exchange,但无论如何我都会参与其中。
关键点是:有些问题是不可判定的,即算法无法解决,因此应该通过其他方法解决。这些问题包括许多涉及计算机语言的“元问题”,例如detecting a virus的问题。
确定问题不明确后,有几种可能的行动方案:
no answer
。1到3是自动推理工具的流行,包括程序验证程序。 4是病毒扫描程序的功能。当允许用户编写脚本以自动化更大的系统时,5是good choice;而不是给它们完整的JavaScript / Scheme / Lua / what,给它们一个不允许无限递归/循环的受限子集。
答案 1 :(得分:0)
假设您必须编写一些满足条件的软件:“在运行时,任何函数都不会直接或间接地调用自身”。
这种情况是不可判定的,但更具限制性的条件可能是可判定的,例如:“不使用函数指针,任何函数都不应直接或间接包含对自身的调用”。
这是为了强调有时可以交换灵活性以确定可用性,以便系统的某些必需属性可以变得可执行。
如果编程语言是可判定的,则始终可以确定某个程序是否是该语言的有效程序。
但即使程序是该语言的有效程序,该程序是否可能导致缓冲区溢出或死锁仍然是不可判定的。