“Hello, World” 的历史

“Hello, World!” —— 初学者进入编程世界的第一步

Cover image for Say Hello to Programming: Writing "Hello, World!" in 50 Different Languages

由布莱恩·柯林汉 撰写的“Hello, world”程序 (1978年)
在这里插入图片描述

布莱恩·W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人

在这里插入图片描述

布莱恩·W.克尼汉

布莱恩·W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。

他与 Shen Lin 合作共同完成了两个知名的 NP-complete 优化问题的解决方案:图划分问题和旅行推销员问题。旅行推销员问题(Travelling Salesman Problem, 又称为旅行商问题、货郎担问题、TSP 问题)是一个多局部最优的最优化问题:有 n 个城市,一个推销员要从其中某一个城市出发,唯一走遍所有的城市,再回到他出发的城市,求最短的路线。

布莱恩·W.克尼汉除了和丹尼斯・里奇撰写了《C 程序设计语言》之外,还撰写了《UNIX 编程环境》,这本书对 UNIX 操作系统的编程环境做了详细而深入的讨论,内容包括 UNIX 的文件系统、Shell、过滤程序、I/O 编程、系统调用等,并对 UNIX 中的程序开发方法做了有针对性的指导。

布莱恩·W.克尼汉在普林斯顿大学为非计算机专业学生开设了一门介绍计算机技术基础的课程,根据课程讲义编写《D is for digital》—— 中文译名《世界是数字的》。书中解释了当今计算和通信领域的工作方式,包括硬件、软件、因特网等,讨论了新技术带来的社会、政治和法律问题。

Hello World

1972 年,在贝尔实验室成员布莱恩·W.克尼汉撰写的内部技术文件《A Tutorial Introduction to the Language B》中首次提到了 “Hello World” 这一字符串。当时,他使用 B 语言撰写了一个用于演示外部变量的示例程序:

main( ) {extern a, b, c;putchar(a); putchar(b); putchar(c); putchar('!*n');
}a 'hell';
b 'o, w';
c 'orld';

这个程序将在终端打印出 “hello, world”,然后附上一个换行符。之所以这一短语被拆分成多个变量记录,是因为 B 语言中的每个字符常量只能容纳 4 个 ASCII 字符。

1974 年,时值 C 语言取代 B 语言,在贝尔实验室的又一内部备忘录《Programming in C: A Tutorial》中,布莱恩·W.克尼汉用 C 语言再次编写了一个 Hello World 程序作为教学示例。这一程序在他和丹尼斯・里奇于 1978 年出版的《C 程序设计语言》中得到继承:

main( ) {printf("hello, world\n");
}

在上例中,main () 函数定义了程序开始执行的位置。其主体由一条语句组成,即对 printf (print formatted,打印格式化)函数的调用,将使程序输出以参数传递给它的任何内容,在本例中是字符串 hello, world。

自此,Hello World 成为了电脑程序员学习新的编程语言的传统。但是,也有些人认为 hello, world 的字符串早于 1966 年的 BCPL 语言出现的时候已经出现。虽然相关的字词确实在发明者记录的文件出现,但是可以肯定的是,Hello World 在当时确实没有流行。因此,人们公认为布莱恩·W.克尼汉是令该字符串走进公众目光的人。

K&R
起初,C 语言没有官方标准。1978 年贝尔实验室正式发表了 C 语言。布莱恩·W.克尼汉(Brian Kernighan)和丹尼斯・里奇(Dennis Ritchie)出版了《The C Programming Language》。这本书被 C 语言开发者们称为 K&R,很多年来被当作 C 语言的非正式的标准说明。人们称这个版本的 C 语言为 K&R C。
至此,布莱恩·W.克尼汉(Brian Kernighan)和丹尼斯・里奇(Dennis Ritchie)两人简称 K&R。

via : Hello World https://zh.wikipedia.org/wiki/Hello_World

纵观编程历史,“Hello World” 在向初学者介绍编码世界方面发挥了至关重要的作用。
虽然 “Hello World” 看似微不足道,但它不仅是一个承载着编程教育的历史和文化意义的简单程序,也是初学者进入编程世界的第一步,代表了编码无限可能性之旅的开始。

扩展阅读

  1. “Hello, World”的历史 —— The History of ‘Hello, World’ - HackerRank Blog

    https://www.hackerrank.com/blog/the-history-of-hello-world/

  2. 300 种编程语言的 Hello World 程序列表 —— List of Hello World Programs in 300 Programming Languages – MYCPLUS

    https://www.mycplus.com/featured-articles/hello-world-programs-in-300-programming-languages/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OS中断机制-嵌套和竞争

对于FreeRTOS最好不去用中断嵌套,中断嵌套会增加堆栈空间的使用,因为每个中断服务程序都需要保存和恢复寄存器状态,这可能会耗尽有限的堆栈空间,从而导致系统故障。以及中断嵌套时,不同的中断服务程序可能会竞争访问共享资源,从而增加死锁的风险。这可能会导致系统出现故…

Verilog进行结构描述(structural modeling)(一):基本概念

目录 1.结构描述(structural modeling)的内容:2.实例 微信公众号获取更多FPGA相关源码: 1.结构描述(structural modeling)的内容: 用门来描述器件的功能基于基本元件和底层模块例化语句最接近实际的硬件结构主要使用元件的定义、使用声明以…

Flink——最流批的大数据框架(流批一体)

Apache Flink基础教程 资料来源:Apache Flink Tutorial (tutorialspoint.com) Apache Flink是Apache Hadoop的开源本地分析数据库。它由Cloudera、MapR、Oracle和Amazon等供应商提供。本教程中提供的示例是使用Cloudera Apache Flink开发的。 本教程是为那些想要学…

fork 是一个创建新进程的系统调用

在计算机科学中,fork 是一个创建新进程的系统调用。具体来说,fork 调用会创建一个与当前进程几乎完全相同的副本,包括父进程的内存布局、环境变量、打开的文件描述符等。这个新的进程被称为子进程,而原始进程被称为父进程。 以下…

光伏开发有没有难点?如何解决?

随着全球对可再生能源的日益重视,光伏技术作为其中的佼佼者,已成为实现能源转型的关键手段。然而,光伏开发并非一帆风顺,其过程中也面临着诸多难点和挑战。本文将对这些难点进行探讨,并提出相应的解决策略。 一、光伏开…

12 学习总结:操作符

目录 一、操作符的分类 二、二进制和进制转换 (一)概念 (二)二进制 (三)进制转换 1、2进制与10进制的互换 (1)2进制转化10进制 (2)10进制转化2进制 2…

解决vs2022scanf报错问题

vs2022scanf报错问题 大家下完vs2022之后,开心的写下一段简单的代码: #include <stdio.h> #include <stdlib.h>int main() {int a;scanf("%d", &a);printf("%d", a);return 0; } vs2022会毫不犹豫的报错,下面是报错信息: 翻译过来就是v…

探究InnoDB Compact行格式背后

目录 一、InnoDB 行格式数据准备 二、COMPACT行格式整体说明 三、记录的额外信息 &#xff08;一&#xff09;变长字段长度列表 数据结构 存储过程 读取过程 变长字段长度列表存储示例 &#xff08;二&#xff09;NULL 值位图 数据结构 存储过程 读取过程 NULL 值…

【MySQL进阶之路 | 高级篇】索引的声明与使用

1. 索引的分类 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;单列索引和空间索引. 从功能逻辑上说&#xff0c;索引主要分为普通索引&#xff0c;唯一索引&#xff0c;主键索引和全文索引.按物理实现方式&#xff0c;索引可以分为聚簇索引…

苹果电脑清理垃圾怎么清理 macbook怎么清理电脑垃圾文件 macos优化软件 cleanmymac怎么使用

在选择电脑时&#xff0c;不少人都会选择拥有高性能和轻薄机身的mac。一开始&#xff0c;它确实如我们所期待的那样健步如飞&#xff0c;然而&#xff0c;随着时间的流逝&#xff0c;有没有觉得您的Mac有时候像是需要一个好的春季大扫除一样&#xff1f;随着我们不断使用电脑&a…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

神经网络参数-----学习率(Learning Rate)

学习率 学习率是训练神经网络的重要超参数之一&#xff0c;它代表在每一次迭代中梯度向损失函数最优解移动的步长。它的大小决定网络学习速度的快慢。在网络训练过程中&#xff0c;模型通过样本数据给出预测值&#xff0c;计算代价函数并通过反向传播来调整参数。重复上述过程…

Geoserver源码解读四 REST服务

文章目录 文章目录 一、概要 二、前置知识点-FreeMarker 三、前置知识点-AbstractHttpMessageConverter 3.1 描述 3.2 应用 四、前置知识点-AbstractDecorator 4.1描述 4.2 应用 五、工作空间查询解读 5.1 模板解读 5.2 请求转换器解读 一、概要 关于geoserver的r…

zabbix-agent2启动失败报错Unit zabbix-agent2.service entered failed state.

文章目录 1&#xff0c;用systemctl status zabbix-agent2查看报错状态2&#xff0c;用journalctl -xe查看一下报错日志3&#xff0c;再看一下zabbix的日志。4&#xff0c;错误修改5&#xff0c; 再次重启zabbix-agent2 1&#xff0c;用systemctl status zabbix-agent2查看报错…

Word如何在页眉中插入和删除横线

你平常是否遇见到Word的页眉中有一条横线&#xff0c;怎么也删不了&#xff01;&#xff01;&#xff01; 今天刘小生分享如何在页眉中插入和删除横线&#xff0c;我们一起操练起来吧&#xff01; 1、Word页眉插入横线 选择【插入】-【页眉页脚】&#xff0c;在“页眉页脚”…

00_Python核心编程

Python入门 一 Python初识 1 Python的历史 Python的历史python是蟒蛇的含义python是一种解释型的,面向对象的,带有动态语义的高级程序设计语言. python是一种使你在编程时能够保持自己的风格的程序设计语言,你不用费什么劲就可以实现你想要的功能,并且编写的程序清晰易懂. …

常见的排序算法【总结】

目录 排序的基本概念与分类排序的稳定性内排序与外排序简单排序冒泡排序时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) 简单选择排序排序原理&#xff1a;时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) 插入排序排序原理&#xff1a;时间复杂度&#xff1a; O ( n 2 ) O(n^…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

JDK 23:Loom改进版发布

1.新版 Loom EA 改进虚拟线程中的监视器&#xff08;同步方法&#xff09; Project Loom 发布了新的抢先体验版本(23-loom4-102 - 2024/5/31)。改进了对象监视器实现&#xff0c;可以防止虚拟线程在以下情况下固定其载体线程&#xff1a; 当进入同步方法/语句时发生阻塞&…

问题-python-爬虫无法爬取外网资源问题(python爬虫)

方法一&#xff1a; 这个报错通过关掉梯子就能解决&#xff0c;目前不清楚具体原理。 后续了解具体原理了&#xff0c;我会在这篇文章上更新具体分析—— 方法二&#xff1a; 也可以把这个东西打开&#xff0c;但是用完建议关掉。