计算机科学巨匠

2023-11-16

贝尔实验室联合多家准备开发Multics 系统,但是最后退出了,但是却培养了优秀的人才,如肯汤姆森,花了四周时间自己做了一个简化的系统,这就是Unix的雏形,因为简化所以同事称为unics,后来觉得用B语言编写性能差,与Ritchie 合作想将unics以高级语言来改写,然后Ritchie将B语言改成C语言重新编译了unics内核,并且正式命名发版UNIX!!!B语言是BCPL的第一个字母,里奇就用第二个字母,所以C语言就此诞生
C有指针,在高级语言领域操作内存是最方便的。

编译性语言:java php c++…为C语言的衍生物,从函数这一层或者往里看都是C的代码
解释性语言脚本类:Phton,Ruby …他们第三方库丰富,但是第三方库往往是C
在高级语言中只有C操作内存是最方便的。
转载一篇舒适的文章
https://blog.csdn.net/zjc3909/article/details/91442442

在这里插入图片描述
相信很多刚刚上大学的计算机、电子通信等相关专业的同学,在学校学习接触的第一门编程语言课程一般都是C语言。

可能有很多非计算机专业学生都是稀里糊涂的学完这个课程,也有很多学生因为挂科而开始“记恨”C语言的发明人,可是你知道你真正要“记恨”的那个人是谁么?还有,你知道C语言至今已经诞生了多少年?是怎么诞生的呢?它又对计算机的发展造成了哪些影响?

缘起于兴趣
1967年,一个平常的日子,位于美国新泽西的贝尔实验室迎来了一位26岁的新员工,他叫丹尼斯·里奇(Dennis Ritchie),一个简单而又低调的年轻人。谁也想不到的是,这个初来乍到的新员工今后会对计算机领域带来了如何不朽的影响。

他的父亲是贝尔实验室的一个电气工程师,受其父亲影响,里奇在中学毕业后进入了哈佛大学学习物理学和应用数学。在偶然机会下他听了一些计算机相关的讲座,从此便迷上了计算机,他还去选修了一学期计算机介绍的正规课程,之后便投入大量精力研究计算机理论和实践。

历史似乎总是按着既定的轨迹前进,里奇进入贝尔实验室后很快便开始参与他感兴趣的也是刚刚兴起的计算机研究。从此贝尔实验室更像是他的家,他在这里一工作便做到了退休,几十年如一日的兢兢业业。

一件值得做的事
参加工作后不久,里奇便开始参与第一个大项目,是由贝尔实验室、麻省理工学院和通用电气公司三方共同联合研发的项目,目的是为了开发出一套安装在大型主机上多人多工的操作系统,即Multics分时操作系统。

可惜好景不长,1969年由于进度过于缓慢,Multics项目最终遭到裁撤,贝尔实验室退出了该计划。第一个大项目就这样无果而终,里奇终归还是有所不甘却又无可奈何。不过,不久他遇到了一个人,一个对他这一生的成果帮助巨大的人,也是他一生的挚友,比他小两岁的肯·汤普森。

肯·汤普森老爷子年轻的时候应该是个游戏宅和技术宅,他先是编写了个模拟太阳系旅行的游戏Space Travel,然后为了能更好得玩上这个游戏,他在BCPL语言基础上开发出一个简单很多的B语言,然后找了台空闲的PDP-7电脑开始用B语言编写一个能跑游戏的系统,这个系统便是Unix系统的前身。
在这里插入图片描述

有一天,汤普森找到里奇,想让他加入自己的个人小项目,一块开发Unix系统,本身对计算机技术就痴迷的里奇当然跟汤普森一拍即合,就此展开了轰轰烈烈的Unix系统开发,而其最根本的原因也仅仅是为了想在PDP-7电脑上运行Space Travel游戏。

1970年,他们成功开发出基于B语言的Unix系统,而B语言是一种解释型语言,有着很大的局限性,造成他们开发系统的时候会太过复杂和繁琐。于是,他们决定在B语言的基础上进行改造和开发一种更高级的语言,终于在1972年,里奇成功创造设计出了一种新的高级的语言,同时也是编译型的语言,B语言是BCPL的第一个字母,里奇就用第二个字母,所以C语言就此诞生。与B语言不同的是,C语言可以被编译成机器码,直接运行在CPU上,速度相对于B语言是不可同日而语的。

开发和编程的乐趣,早已让这两个人忘记了那个之前一直心心念念的Space Travel游戏。1973年初,在C语言主体已经基本开发完成之后,他们就开始迫不及待全身心的投入到用C语言重写Unix系统。也是这一年,他们成功用C语言开发出了Unix系统第三版内核,至此之后Unix系统基于C语言的移植和修改都变得相当便利,这为之后的Unix发展和普及打下了坚实的基础。

回顾那段历史,我们看到C语言几乎都是伴随着Unix的发展而发展,而C语言强大的移植性也促进了Unix的推广。因为C语言只要在不同架构处理器的计算机上加上相应的C语言编译器和库,就可以把C源代码进行编译,同时连接成目标二进制文件,这样就可以在不同架构的机器上运行。

在1977年,里奇发表了《可移植的C语言编译程序》,主要介绍了如何基于不同架构系统下编译C语言。第二年,贝尔实验室正式向世界发表了C语言,虽然此时的C语言还没有具体标准,直到布莱恩·柯林汉(Brian Kernighan)与里奇一起编写了一部至今仍被C语言学习者认为是学习C语言的“圣经”的《The C Programming Language》(C程序设计语言),所以在那些还没有C语言标准的年代,此书一直被当作是 C语言的非正式的标准说明。

很久以后,有人问里奇是什么启发了他如此设计C语言,他回答很简单:“这看起来是件值得做的事”。

站在巨人的肩膀上
C语言和Unix的出现,给计算机时代带来一片崭新的天地,影响极其深远,在之后几十年的计算机工业发展占有极其重要的地位。

C语言的出现对现代计算机编程语言如C++、Objective-C、Java、C#等都有极大的影响,可以说C语言是现代程序语言革命的起点,是程序设计语言发展史的一个重要里程碑。同样,Unix系统也对现代操作系统有着极大的影响,不管是AIX、Solaris、Mac OS X和BSD等这些不同的Unix系统,还是现在非常普及的类Unix系统Linux操作系统,甚至是微软的Windows。甚至可以毫不夸张的说,苹果、微软等这些科技巨头公司都是站在里奇的肩膀上成功的。

1983年,里奇和汤普森由于“研究发展了通用的操作系统理论,尤其是实现了UNIX操作系统”共同获得了那一年的图灵奖。并在1999年获得有克林顿总统亲自颁发的美国国家技术奖章,以表彰他们在C语言和Unix系统上的卓越贡献。
在这里插入图片描述

2007年,里奇从贝尔实验室退休开始过上隐居生活,2011年美国时间10月12日在新泽西的老家中不幸去世,享年70岁。

最后,引用他的好友布莱恩·柯林汉对他的评价:牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。

小程序猿谨以此文,献给在天堂的计算机科学巨匠、C语言之父、Unix之父丹尼斯·里奇!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机科学巨匠 的相关文章

  • C++,菱形继承和虚继承

    一 菱形继承的基本概念 菱形继承又称为钻石继承 由公共基类派生出多个中间子类 又由多个中间子类共同派生出汇聚子类 汇聚子类会得到 中间子类从公共基类继承下来的多份成员 菱形继承的格式 A 公共基类 B C 中间子类 D 汇聚子类 示例 in
  • 读《企业中的开放源代码》有感

    文章目录 开源代码的益处 开源的本质 开源是一门学科 开源代码的益处 学习出色编码技能的最佳方法是开发开源项目 注意是开发而不是阅读 因为可以研究该领域内顶尖编码员所采用的实践 以更快的方式启动新项目 从此没有必要再闭门造车 开源的本质 我
  • Linux平台下二进制安装FastDDS

    1 Linux平台下二进制安装 该页面主要介绍在linux环境下 使用二进制release安装 eProsima公司的 Fast DDSThe 安装 内容 运行应用 在一个CMake项目中包含Fast DDS 卸载 1 1 安装 ePros
  • 规则动词的过去式及发音规则

    规则动词的过去式词尾变化有几种 1 一般情况下加ed 如watched planted watered pulled climbed picked 2 以不发音字母e结尾的加d 如liked moved tasted 3 以辅音字母加y结尾
  • 线程池使用之自定义线程池

    目录 一 Java内置线程池原理剖析 二 ThreadPoolExecutor参数详解 三 线程池工作流程总结示意图 四 自定义线程池 参数设计分析 1 核心线程数 corePoolSize 2 任务队列长度 workQueue 3 最大线
  • Java学习心得8——继承

    当我们需要设计几个类似的类的时候 我们可以把它们之间的相同的东西提取出来放到一个父类中 然后这几个类就可以不写这些相同的东西 只要去继承那个父类就可以得到这些东西了 假如我们需要设计三个类Fish Bird Dog 它们的共同点是都有年龄
  • UE4 实现用鼠标旋转场景中的物体

    本文实现的是用在UE4 中用鼠标旋转场景中的物体 点击到物体时开始物体旋转功能 移动鼠标物体跟着旋转相应的角度 松开鼠标左键物体停止旋转 下面介绍实现此功能的蓝图逻辑 由于比较简单就不一一介绍了 直接贴上蓝图代码 如有问题欢迎交流
  • dpkg:警告:无法找到软件包 XXX的文件名列表文件,现假定该软件包目前没有任何文件被安装在系统里。(详细的解决过程)

    1 问题描述 在使用sudo apt get update 和upgrade中会出现 dpkg 警告 无法找到软件包ca certificates 的文件名列表文件 现假定该软件包目前没有任何文件被安装在系统里 dpkg 警告 无法找到软件
  • docker gitlab 数据 迁移 2770

    我的操作步骤 1 把 gitlab目录下 的 data etc log 目录下压缩并拷贝 2 把压缩文件 拷贝到新的gitlab 指定目录下 3 启动 错误 up to date storage directory var opt gitl
  • Qt中使用OpenGL渲染视频

    Qt5 4之后 OpenGL在Qt中可以通过QOpenGLWidget和QOpenGLFunctions来实现 以下Demo 只展示OpenGL相关部分 解码出AVFrame后对其进行渲染 顶点Shader static const cha
  • go语言基础-----24-----命令行解析Go flag、uuid唯一ID

    一 命令行解析Go flag 1 定义flag参数的相关函数 参数有三个 第一个为 参数名称 第二个为 默认值 第三个是 使用说明 1 通过 flag String Bool Int 等 flag Xxx 方法 该种方式返回一个相应的指针
  • powershell初探(九)

    最近公司需要用到com 其中涉及到很多的注册问题 记录在这里 希望在帮到别人的同时 也能解决自己的问题 0 写在前面 本人菜鸟一枚 本章的总结都来自于网络 如果有错漏之处 还望牛人指正 1 COM是做什么用的 com是包含了实现一个或多个接
  • jQuery 入门教程(15): 删除HTML元素

    jQuery使用下面两个方法来删除或是清空某个HTML元素 remove 删除指定的元素 包括其子元素 empty 清空指定元素的子元素 例如 html view plain copy print
  • 通过查看Qt助手(QtAssistant)了解并使用自己需要Qt库

    常用库 我们需要知道常用的库有哪些 才能使用他们 QtCore基本库 基本数据类型 QString 不直接使用c 中String QByteArray 字节数组 基本数据结构 QList QVector QMap 输入输出类 QTextSt
  • MFC中删除控件的操作

    一 手动删除 1 首先确定控件有哪些相关的变量和函数 打开 rc2文件在里面删除对应的控件图标 2 打开主对话框头文件 一般类向导生成的函数和变量定义都在头文件的最后一个 public l里 找到生成的变量定义和函数定义将其删除 3 打开对
  • 计算机专业推荐游戏本,十大游戏笔记本电脑排名 热门游戏本推荐

    1 惠普 暗影精灵4 Pro 15 6英寸游戏本 暗影精灵4 Pro最吸引人的点莫过于搭载了新一代GeForce RTX2060显卡 拥有6G显存 性能提升高达6倍 并将AI增强图形技术和光线追踪技术引入游戏 让游戏世界可以模拟每道光迹的真
  • Quick Test Professional9.0编程常用方法及实例详解

    通过QTP获取Web页面中对象属性 在制作自动化用例时需要知道大部分控件的name值 我们不可能都向开发人员询问 QTP为我们提供了一个很好的工具 Object Spy 使用它可以为我们把每个需要的对象属性全部列出来 打开QTP 工具 对象
  • 解决keil5仿真提示内存不对齐

    仿真提示 JLink Warning Mis aligned memory write Address 0x20000000 NumBytes 2 Alignment 2 Halfword aligned 解决办法 将keil安装目录D K
  • Manjaro linuxqq闪退问题

    删除配置文件即可 rm r config QQ
  • Java中的抽象类和接口有什么区别(面试题)

    Java中的抽象类和接口有什么区别 面试题 概念 对比 补充 概念 抽象类 在面向对象的概念中 所有的对象都是通过类来描绘的 但是反过来 并不是所有的类都是用来描绘对象的 如果一个类中没有包含足够的信息来描绘一个具体的对象 这样的类就是抽象

随机推荐

  • 【深度】区块链技术安全威胁分析(附下载)

    解码区块链 专题文章一 区块链技术安全威胁分析 2020年4月20日 国家发改委明确 新基建 定义和范围 表态 区块链 被纳入其中 为深入探索区块链技术的发展应用 挖掘对零售行业产生的影响和机遇 苏宁零售技术研究院联合业内资深学者和企业技术
  • MSP432 串口通信

    文章目录 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 二 UART模式的特性 三 库函数 四 一般配置步骤 五 代码 MSP432P401R基础使用 四 串口收发 一 MSP432P401R串口资源 详
  • python中数据结构之列表,元组,字典,集合

    一 列表 列表 引入一个新的概念 数据结构 数据结构是通过某种方式组织在一起的数据元素的集合 这些数据元素可以是数字或字符 甚至可以是其他数据结构 在 python 中 最基本的数据结构是序列 序列中的每个元素匾被分配一个序号 即元素的位置
  • php://filter(文件包含漏洞利用)

    网址 index php page php filter convert base64 encode resource index php 例如 http 120 24 86 145 8005 post index php file php
  • 论文写作 计算机类顶会顶刊,及论文发表指导

    计算机方向的一些顶级会议和期刊 转载 国内的学报期刊 SCI级 但是IF比较低 也不是特别专门针对计算机视觉 物理学报 红外与毫米波学报 etc EI级 自动化学报 光学精密工程 电子学报 软件学报 计算机研究与发展 计算机学报 征稿指南
  • C#通过TCP传送结构体

    1 定义结构体 命名空间 using System Runtime InteropServices 注意这个属性不能少 StructLayoutAttribute LayoutKind Sequential CharSet CharSet
  • 元器件选型实例(如何选一款合适的 DC-DC )

    授人以鱼不如授人以渔 实际项目的元器件选型 如何选择合适的元器件 矜辰所致 目录 前言 一 应用背景 二 选型准备 2 1 考虑因素 通用因数 结合实际 2 2 初步确定方案 三 实际选型 3 1 查找目标 3 2 筛选目标 价格和库存 3
  • 设计模式详解(四)——原型模式

    一 场景问题 在电商系统中 订单服务通常是业务核心模块之一 在提交订单的过程中 往往会出现某个订单数额较大的订单 例如一些企业订单订购公司员工节假日礼品 往往会订购成千上万件 如果不做拆分 就会导致订单票据较长 此时就会有拆分订单的操作 假
  • CSS 媒体查询

  • FTPUpload

    std string g strVer Mozilla 5 0 Windows NT 6 1 WOW64 rv 13 0 Gecko 20100101 Firefox 13 0 1 size t CallBackHeader void pS
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • [vue3]vue3中引入class类的写法

    1 在src utils topu下创建一个ts文件 topu ts class Topu Topu类中涉及到的变量 都要提前在这个部分定义好 width Number 结尾必须顿号 不然报错 height Number data any
  • Android之Adapter用法总结

    1 概念 Adapter是连接后端数据和前端显示的适配器接口 是数据和UI View 之间一个重要的纽带 在常见的View ListView GridView 等地方都需要用到Adapter 如下图直观的表达了Data Adapter Vi
  • 【解决方法】Windows7 任务计划程序 “任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”

    目录 问题背景 问题描述 折腾过程 解决方法 适用于我的解决方法 2 其他解决方法 供参考 解决方法1 3 解决方法2 4 解决方法3 4 解决方法4 5 出错原因 参考资料 问题背景 今天刚好给家里的旧电脑加上新的内存条 组了个双通道 顺
  • FTP搭建教程

    FTP搭建教程 目录 一 FTP简介 二 搭建FTP 一 FTP简介 FTP中文为文件传输协议 简称为文传协议 它也是一个应用程序 不同的操作系统有不同的FTP应用程序 这些应用程序都遵守同一种协议以传输文件 FTP主要的功能是 上传 和
  • 1011. 在 D 天内送达包裹的能力

    传送带上的包裹必须在 D 天内从一个港口运送到另一个港口 传送带上的第 i 个包裹的重量为 weights i 每一天 我们都会按给出重量的顺序往传送带上装载包裹 我们装载的重量不会超过船的最大运载重量 返回能在 D 天内将传送带上的所有包
  • 用Python 编写Logistics算法

    我们用Python来自己编写Logistics算法 首先 先将一些理论 Logistics算法用于实现线性可分的二分类问题 1 Sigmoid函数 fx 1 1 exp x Sigmoid函数是常用的阈值函数之一 函数图像如下 是不是很像累
  • Kotlin内部类

    一 内部类 定义在类内部的类 与类成员有相似的访问控制 kotlin 默认是静态内部类 非静态用inner关键字 this outter this inner的用法 二 匿名内部类 没有定义名字的内部类 类名编译时生产 类似Outter 1
  • 算法[第四版]-图灵程序设计丛书-笔记

    第一章 笔记 1 1 9 编写一段代码 将一个正整数 N 用二进制表示并转换为一个 String 类型的值 s public class Conversionbinary public static void main String arg
  • 计算机科学巨匠

    贝尔实验室联合多家准备开发Multics 系统 但是最后退出了 但是却培养了优秀的人才 如肯汤姆森 花了四周时间自己做了一个简化的系统 这就是Unix的雏形 因为简化所以同事称为unics 后来觉得用B语言编写性能差 与Ritchie 合作