我的猫图文 (图灵完备非门咋过)

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)

认识Peluche

Peluche(法语中的“毛绒”的意思)是一只光滑的猫。

如何证明图灵完备,图灵完备条件判断

她将是今天的测试对象。

Peluche 图灵完备吗?什么是图灵完备?

图灵完备性的概念是,如果设备可以模拟图灵机,那么它就可以执行任何类型的计算。

这意味着任何实现以下八条指令的机器都是一台计算机(因此可以执行任何类型的计算):

  • . and , : 输入和输出一个值
  • + - :增加和减少存储单元中包含的值。
  • > < :向左或向右移动当前存储磁带。
  • [ ] :执行循环。

所以,如果 Peluche 能够执行这八个指令,那么我们认为它图灵完备。

图灵完备性的证明

  • 输入输出

首先,看看能得到反应,尝试戳 Peluche。

如何证明图灵完备,图灵完备条件判断

如何证明图灵完备,图灵完备条件判断

她看了我一眼,然后才转过身。

如何证明图灵完备,图灵完备条件判断

如何证明图灵完备,图灵完备条件判断

所以它是这样的:戳了它一下,得到了一个反应。所以它可以处理输入并给出输出。

输入/输出确认!

增减内存值

前几天,我下班回来:

如何证明图灵完备,图灵完备条件判断

到处都是狗粮……

但后来我仔细看了一下,意识到可以对格子进行编号,如下所示:

如何证明图灵完备,图灵完备条件判断

这看起来很像内存磁带!因为它可以将食物洒在瓷砖上,然后直接从地板上吃掉它们,因此她可以增加和减少给定存储单元中包含的值。

增加/减少确认!

向左或向右移动当前内存单元

还有一次,洗碗时 不小心 洒了一些水在 Peluche 身上。它开始在厨房里到处乱跑,弄得一团糟。

如何证明图灵完备,图灵完备条件判断

如果仔细观察(在红色箭头的尖端),会注意到,在弄得一团糟时,它移动了碗。

移动碗意味着它会将粗磨食物洒在另一块瓷砖上。这算作移动内存头以编辑另一个内存单元。

已确认内存磁带的移位!

执行循环

所以,在这个烂摊子之后,不得不清理。

不到五分钟后,回到厨房又看到这个:

如何证明图灵完备,图灵完备条件判断

是的......它 绝对 可以执行循环......

循环确认!

我们刚刚证明了 Peluche 确实是图灵完备的。那么现在,如何使用它来执行高性能计算?

拿她怎么办?

现在已经证明 Peluche 是图灵完备的,可以对它做任何事情!

因此,试图给简单的代码来执行:

如何证明图灵完备,图灵完备条件判断

结果是:它什么都不做。

虽然图灵完备,但也许猫根本不是为了执行代码而设计的?

关于“猫计算”

撇开笑话不谈, 猫计算 是给这种通用实践起的名字。根据经验,当有人发现一种语言的新特性时,他们开始在任何地方使用它,只是因为他们可以并且想要。

但是,就像可以使用 cat 但不应该执行代码一样,这并不是因为 可以 使用而 应该 使用的功能。

卷起来

猫计算似乎是一个菜鸟错误,但即使是最有经验的开发人员有时也会犯菜鸟错误。

每三年发布一个新版本的 C++。每一次,它都让我在各种可能的情况下使用新功能。尽管这是建立一些经验的好机会(避免误用功能的最佳方法之一是执行一次这些误用),但这也是获得不良实践的有利基础。

在使用某个功能之前,请务必问问自己是否需要某个功能,否则可能会出现猫计算。

此外,猫计算是虐待动物,所以不要这样做

如何证明图灵完备,图灵完备条件判断

感谢阅读,再见!

在写这篇文章的过程中没有猫受到伤害,但有一只被轻轻戳了一下。

如何证明图灵完备,图灵完备条件判断