「Hello World」中的「bug」

Hello World 可能是许多人编写的第一个次序。这么简单的次序按理说应该没有 bug 吧?一位叫「sunfishcode」的开发者给出了令人意外的结论。

C 说话中的 Hello World

用 C 说话写 Hello World 有很多种不同的方式,比如维基百科里记录的版本、K&R book 中介绍的版本,甚至还有 1974 年的原始版本。

「Hello World」中的「bug」

这里展示一个 ANSI C 的版本:/* Hello World in C, Ansi-style */#include <stdio.h>#include <stdlib.h>int main(void){ puts("Hello World!"); return EXIT_SUCCESS;}这个版本应用 (void) 来确保 main 是一个新型的声明。它应用 EXIT_SUCCESS 宏,而不是假设平台应用 0 表示 success,根据 C 的规范,这是不必要的。但我们在这里不会冒任何风险。它应用适当的头文献以避免隐式声明 puts。这个版本试图把每件事都做好,但它仍然有一个缺陷。上面提到的所有版本都有一个 bug。bug 在哪儿?Linux 有一个有趣的设备文献,叫做「/dev/full」,就像它更著名的表亲「/dev/null」一样。但是当你写入「/dev/full」时,它不会丢弃数据,而是会失败。它的作用就像文献系统中一个刚刚耗尽空间的文献:$ echo "Hello World!" > /dev/fullbash: echo: write error: No space left on device$ echo $?1这是一个很好的小工具,用于测试次序能否正确处理 I/O 过错。如果没有剩余的空间,或者磁盘出现故障,那么创建实际的文献系统是很不方便的,但是让一个次序将其输入写入「/dev/full」,然后看看会发生什么,这是非常容易的。让我们测试一下上面的 C 说话例子:$ gcc hello.c -o hello$ ./hello > /dev/full$ echo $?0与在上面的 shell 中应用 echo 不同,这里没有输入,退出状态为零。这意味着 hello 次序陈述了成功执行。然而,它实际上并没有成功。我们可以通过应用 strace 确认它遇到了故障。$ strace -etrace=write ./hello > /dev/fullwrite(1, "Hello World!\n", 13) = -1 ENOSPC (No space left on device)+++ exited with 0 +++操作系统陈述了「No space」过错,但没关系,次序默默地接受它并返回 0,这是成功的代码。这是一个 bug!这个 bug 有多严重?可以说,hello world 在任何地方都不会是安全的。然而,hello world 确实做了一些现实世界的次序所做的事情:打印到规范输入,这可能会被重定向到一个文献。在现实世界中,文献可能会耗尽空间。如果一个次序没有检测到这种过错并通过其返回代码陈述该过错,那么它的父进程将不知道子进程失败了,并且将继续运行,就像没有任何过错一样,即使它期望产生的输入已经悄悄地丢失了数据。例如,考虑一个将 yaml 文献打印到规范输入的次序。如果规范输入耗尽空间,则输入可能会在某个任意点被截断,尽管它可能仍然是有效的 yaml。因此,我们应该期待次序能够检测和陈述这种情况。如果换成其他说话呢?在前面的内容中,我们重点看了 bash 和 C,那如果换成 Python 呢?Python 处理过错的原则可是「Errors should never pass silently」。以下是 Python 2 的情况:$ python2 hello.py > /dev/fullclose failed in file object destructor:sys.excepthook is missinglost sys.stderr$ echo $?0它确实向 stderr 打印了一条消息,尽管这是一条令人困惑的消息。但是,它也返回 0,这意味着它告诉运行它的人它已经成功退出。幸运的是,Python 3 正确地陈述了过错,并打印了一个更好的过错消息:$ python3 hello.py > /dev/fullException ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>OSError: [Errno 28] No space left on device$ echo $?120最后,作者又尝试了几种说话,结果如下:

「Hello World」中的「bug」

「Hello World」中的「bug」

原文链接:https://blog.sunfishcode.online/bugs-in-hello-world/封面出自:https://lmichelin.fr/hello-world/

原创文章,作者:机器之心,如若转载,请注明出处:https://www.iaiol.com/news/helloworld-zhong-de-bug/

(0)
上一篇 2022年 3月 22日 下午2:26
下一篇 2022年 3月 23日 上午7:39

相关推荐

  • AI翻新标杆指南:呆板之心Pro·AI 趋势前锋 Insight 榜单发布

    呆板之心Pro 根据企业的技巧实力、产物翻新性、市场与行业潜力、翻新引导能力等多项标准,层层选拔,评比出四大板块的80+优质机构。2017年,呆板之心发布了中国最早的AI评比榜单「Synced Machine Intelligence Awards」。与全世界近 200 万从业者共同关注AI技巧的发展,见证人工智能与我们发生的每一次互动和进步。作为科技范畴的观察者和AI行业发展的见证者,五年时间里,AI技巧一直保持着跨越式前进,呆板之心的年度评比也逐渐成为了以AI为代表的产业科技风向标。随着传统产业对AI的认识更加成

    2022年 5月 14日
  • 无代码生产力对象赋能数字化供应链新发展

    「机器之心2021-2022年度AI趋势大咖说」聚焦「驱动将来的AI技术」与「重塑财产的AI科技」,推出线上分享,共邀请近40位AI领域知名学者、财产专家及企业高管通过主题分享及多人圆桌等形式,与行业精英、读者、观众共同回顾 2021年中的重要技术和学术热点,盘点AI财产的年度研究方向以及重大科技突破,展望2022年度AI技术发展方向、AI技术与财产科技融合趋势。

    2022年 8月 1日
  • Call for Papers | IEEE国际聚会较量争论社会科学与复杂系统格外专题征文

    DSAA是由 IEEE、ACM、ASA 和 CCF 联合支持的首屈一指的数据科学聚会。

    2022年 3月 30日
  • 著名统计学家David Cox去世:他提出的「COX返回模型」曾影响一代人

    他提出的「COX 返回模型」曾深刻地影响了统计学研究。昨晚,英国著名统计学家 David Cox 去世,享年 97 岁。David Cox 因提出「COX 返回模型」而广为人知,并深刻地影响了统计学规模的研究。许多人自发地在社交媒体平台表达了悲痛和哀悼:David Cox 生平David Cox1924 年出生于英国伯明翰,在剑桥大学圣约翰学院学习数学,并在 Henry Daniels 和 Bernard Welch 的指导下于 1949 年在利兹大学获取博士学位。1950 年到 1956 年期间,David Co

    2022年 1月 20日
  • 295页博士论文探索加强进修形象表面,获AAAI/ACM SIGAI博士论文奖提名

    除了论文本身超有技术含量之外,文中使用的图表也非常美观漂亮。

    2022年 3月 20日
  • Nature盘点:从Fortran、arXiv到AlexNet,这些代码改变了迷信界

    从 Fortran 编译器到 arXiv 预印本库、AlexNet,这些算计机代码和平台改变了迷信界。2019 年,「事件视界望远镜」团队拍下了第一张黑洞照片。这张照片并非传统意义上的照片,而是算计得来的——将美国、墨西哥、智利、西班牙和南极多台射电望远镜捕捉到的数据进行数学转换。该团队公开了所用代码,使迷信社区可以看到,并基于此做进一步的探索。而这逐渐成为一种普遍模式。从天文学到动物学,每一个伟大的现代迷信发现背后都有算计机的身影。斯坦福大学算计生物学家、2013 年诺贝尔化学奖获得主 M

    2021年 1月 21日
  • 10位大咖云聚,400分钟干货分享,这里有一场AI 家产发展趋向分享会等你来看!

    从 2015 年的 Alpha Go 人机大战,人工智能热潮如平地惊雷,光芒尽显。到 2020 年的突发疫情,倒逼家产智能突围,带来数字时代转型升级的加速发展。风起于青萍之末,浪成于微澜之间,从 2015 年到 2020 年,AI 家产趋向变化的草蛇灰线逐渐显现。在不平凡的 2020 年,意外和契机相伴而至,稳健与突破竞相呈现。站在 2020 的尾巴上,伴随着对过去的梳理和对未知的期待,我们需要重振激情,用全方位的知识储备把握未来 AI 家产趋向的走向和发展。新春将至,在即将到来的牛年里,作为一个 AI 人下面一年

    2021年 1月 29日
  • 拖拽公式图片、一键转换LaTex公式,这款开源公式识别神器比Mathpix Snip更适合你

    只必要把公式图片用鼠标拖动到东西内,就能一键转成 LaTex 公式。

    2021年 8月 15日
  • 百亿量化私募“道歉”,AI选股还能信吗?

    近两年来,量化投资行业爆发式增长,一批私募范围突破百亿大关,备受商场关注。随着大量资金涌入量化私募,商场竞争亦在不断加剧,尤其是头部私募之间的比拼,纷纷展开军备竞赛。为了保持长期竞争上风,不少量化私募开始加大人工智能、机器进修方面的加入。与此同时,商场上也有许多疑问。阿尔法狗诞生以后,在围棋、象棋、德州扑克等范畴,人工智能已经彻底打败了人类。那么,在投资范畴人工智能会打败人类吗?近期,知名量化私募幻方量化因事迹回撤达到了历史最大值,在官微发布公告,表示“深感愧疚”。幻方表示,事迹波动的一部分原因来源于长周期上的持股

    2022年 1月 10日
  • 为国打造世界一流的芯片人材,清华大学成立集成电路学院

    刚刚,清华大学集成电路学院揭牌成立,拉开中国造就一流芯片人材的序幕。

    2021年 4月 22日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注