测试 C、Python、Java 等 16 种编程语言的 Hello World:7 种存在 Bug?( 二 )


此话应该从何说起?想必很多程序员在初次学习编程的时候 , 大多数会用 Hello World 程序来试一下 。 这也导致了 Hello World 常被开发者用来检测程序的标准输出 , 但是因为此时 Hello World 程序存在 Bug , 所以 prints 的标准输出往往可能会被重定向到另一个文件 。
譬如 , 现实世界中 , 如果文件占用了全部的空间 。 此时用 Hello World 程序来检测 , 最终并没有检测任何问题 , 那么该代码的父进程将不知道子进程失败了 , 会继续运行 , 即使系统期望产生的输出内容已经悄悄地丢失了数据 , 但程序还是像什么都没有发生一样 。
举个例子 , 编写一个程序 , 其中主要是 prints一个 yaml 文件到标准输出 。 如果标准输出的空间用完了 , 输出可能会在某个任意的点被截断 , 尽管它仍是有效的 yaml 。 所以我们期望程序能够检测并报告这种情况 。
7 种主流语言常见的 Hello World 程序都有 Bug?
除了 C 语言之外 , Python 告诉我们“Bug 不应该被无声地忽视” , 下面是 Python 2 的测试示例:

$ python2 hello.py > /dev/fullclose failed infile 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
测试的版本
C

(全部)
C++

(全部)
Python 2

Python 2.7.18
【测试 C、Python、Java 等 16 种编程语言的 Hello World:7 种存在 Bug?】Ruby

ruby 2.7.2p137(2020-10-01 修订版 5445e04352)[x86_64-linux-gnu]
Java

openjdk 11.0.11 2021-04-20
Node.js

v12.21.0
Haskell

Glorious Glasgow Haskell 编译系统 , 版本 8.8.4
Rust

rustc 1.59.0 (9d1b2106e 2022-02-23)
Python 3

Python 3.9.5
Perl

perl 5 , 版本 32 , subversion 1 (v5.32.1) 为 x86_64-linux-gnu-thread-multi 构建(带有 46 个注册补丁...)
Perl 6

v2020.12
Bash

GNU bash , 版本 5.1.4(1)-release (x86_64-pc-linux-gnu)
Awk

GNU Awk 5.1.0, API: 3.0 (GNU MPFR 4.1.0, GNU MP 6.2.1)
OCaml

4.08.1
Tcl

8.6.11
C#

Mono JIT 编译器版本 6.8.0.105
原文链接:https://blog.sunfishcode.online/bugs-in-hello-world/
— END—
《新程序员001-004》全面上市 , 对话世界级大师 , 报道中国IT行业创新创造

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。