当前位置: 首页 > article >正文

C语言诞生秘史:从被逼出到首个编译器的坎坷之路

C语言是运用C语言自身来进行编译的这一情况听起来好似那鸡生蛋、蛋生鸡这般但早年贝尔实验室的那帮人实则真就把它给做成了并非依靠魔法做到的而是被逼迫到那种程度才达成的。被逼出来的语言临近1970年的时候 合作推进Multics操作系统的贝尔实验室 、 MIT 还有通用电气 他们满怀希望要打造出一个能够同时为上千人提供服务的庞大系统。然而呢 经历了数年的时间那项目却一直拖延 最终做出来的系统不仅运行速度极为缓慢 而且占用内存量相当大 这使得贝尔实验室直接停止投资然后退出了。肯·汤普森回到办公室之后发现没什么事情可做 就在一台内存仅仅只有8KB的PDP - 7小型机之上编写了一个简化版本的系统 而这个系统就是UNIX的最初形态。一开始他是使用汇编写的 可是汇编操作起来实在太耗费精力了 每一条指令都需要他亲自去处理 所以他就研发了一个B语言 通过解释执行的方式来运行 这样一来代码编写速度确实变快了 然而运行速度却慢得如同老牛拉着车缓缓前行一般。这阶段没人想造新语言纯粹是手头工具不好使。把机器语法写进代码1971年实验室更换了一台PDP - 11这台机器相较于PDP - 7有明显优势然而B语言在其上运行并不顺畅原因在于B的变量均为字长而PDP - 11是按字节进行寻址的。丹尼斯·里奇接手了改造工作他并非凭空去设计语法而是依据PDP - 11的硬件手册来编写代码。PDP - 11存在自动递增以及递减的寻址方式于是他将和--这两个运算符增添至C语言PDP - 11的寄存器一次处理16位数据所以他规定int类型为16位内存是依照字节编址故而他把char设定为1字节。就连数组下标写成a[i]与*(a i)完全等效同样是为了让编译器直接生成一条加法指令省去多余的时钟周期。先有鸡还是先有蛋的解法头一个C编译器的确并非是以C来编写而成的里奇与汤普森率先运用汇编语言编写了一个简易至极的C编译器其具备的功能少之又少仅仅支持if、while、加减乘除以及函数调用微小到能够在纸张之上将逻辑推导明晰准确借助这个粗陋的编译器编译生成第二个版本该版本的功能略微有所增加接着再运用第二个版本编译出第三个版本循序渐进地增添全新特性直至1973年第三版UNIX的内核已然全部运用C进行重新编写了此一过程并非是为了炫耀技艺而是实在没有其他途径可供选择了。他们得先采用一个具备能够跑动起来特性的工具哪怕它极为粗糙接着在这个工具的根基之上迭代出更为优良的工具直至最终打造出一台完整的编译器。它原本只是PDP-11的影子不少人指出C语言具备可移植性然而在最初的那几年间它压根无法脱离PDP - 11。float类型会自行转变为double缘由在于PDP - 11的浮点协处理器仅支持双精度运算register关键字在后来几乎没什么人使用了这是由于当年的编译器并不擅长对寄存器分配进行优化需要程序员亲自去指定而现代编译器比人要聪慧得多KR第一版当中main函数能够不书写返回类型void关键字也不存在并非是有所遗漏而是在PDP - 11上根本不存在对于这些抽象概念的需求。C语言本质上是PDP - 11的指令系统的镜像只是呢它看起来太像人类能够读懂的代码以至于让人产生误解以为它从一开始就是通用高级语言。从专用工具变成通用语言1978年里奇以及科尼汉撰写了《The C Programming Language》这本书众人读完以后发觉原本他人书写C代码的方式与自身相近。这本书没有被正式确立为标准然而所有人都将它当作标准来使用缘由是UNIX系统伴随它被售卖至大学与公司。随后有人编写了可移植C编译器要把C移植到IBM、DEC的其它机器上就必须去除一些直接对应PDP - 11硬件的特性以牺牲些许效率来换取兼容性。1989年时ANSI组织加以发布首个官方所述C语言标准出现void类型、函数原型、const修饰符这类事物正式被纳入其中这并非属于技术方面的升级而是一种妥协C语言若要进入大公司采购清单若要进入大学教材之中便不得不放弃一部分与硬件的紧密关联进而变得规范化。信任程序员的选择以标准化形式存在的C语言逐渐从系统程序员占据的小范围使用工具转变成为工程师所使用的通用语言然而其底层设计并未产生变化。指针仍然能够随意地去计算内存地址数组出现越界情况时编译器不会进行检查union当中的字段完全要依靠程序员自身去记住哪一个正处于使用状态。这些并非是漏洞而是基于设计所做出的决定——该语言信任你有能力管理好自身同时也默认你真正关注在意的是机器运行速度是否够快而非代码看上去是否安全。当前来看C语言它不像Python那样编写起来令人感觉顺手也不像Rust那样在编译阶段便将内存错误阻挡在程序之外。那个编译出来的程序只要没出现写错的情况便能够贴着硬件运行不存在中间层致使速度被拖慢。它有古怪的语法然而每一条语法背后则对应着一台1970年代小型机的硬件特性。它的编译器可以完成自举并非技术表演而是由于当年没人给它准备现成的开发工具链只能自己打造一把钥匙接着用这把钥匙去打开下一扇门。C语言未曾宣称自己会去改变世界它只是默默地将一台小型机器的特性写入了过去五十年的代码之中直至如今操作系统、嵌入式装置、数据库、游戏引擎底层依旧是它。首先当你初次着手撰写C程序之际你是否遭受过指针或者数组越界所带来的困扰呢其次诚挚欢迎你于评论区域中将自己的那段经历予以分享。那里是你可以畅所欲言的地方。

相关文章:

C语言诞生秘史:从被逼出到首个编译器的坎坷之路

C语言,是运用C语言自身来进行编译的,这一情况听起来好似那鸡生蛋、蛋生鸡这般,但早年贝尔实验室的那帮人实则真就把它给做成了,并非依靠魔法做到的,而是被逼迫到那种程度才达成的。被逼出来的语言临近1970年的时候 &am…...

4 种可靠的 OPPO 手机联系人备份到电脑的方法

OPPO 手机的全球出货量常年位居前五,足以见得它已经获得了越来越多用户的认可。对于年轻群体而言,入手一款高性价比的 OPPO Reno4 SE 这类机型是非常不错的选择。但日常使用中,误操作、进水等意外都可能导致数据丢失,为了避免这类…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web界面响应延迟归因与优化路径

Qwen3.5-4B-Claude-Opus保姆级教程:Web界面响应延迟归因与优化路径 1. 模型与部署环境概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该…...

nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测

nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级但强大的工具在跨境电商领域…...

别再乱选了!Ansys EDA桌面版导入IBIS模型,Pin Import和Buffer Import到底怎么用?

Ansys EDA桌面版IBIS模型导入指南:Pin Import与Buffer Import深度解析 在信号完整性(SI)和电源完整性(PI)仿真领域,IBIS模型的使用一直是工程师们关注的焦点。作为行业标准的Ansys EDA工具链(原E-desktop)提供了强大的SIPI仿真能…...

从源码到上架:手把手教你用Android Studio打包绿豆TVBox APK,并修改Logo、启动图和包名

从零打造个性化TV应用:Android Studio深度定制指南 在流媒体内容消费爆发的时代,拥有一个专属的影视聚合平台成为许多技术爱好者的追求。绿豆TVBox这类开源项目为开发者提供了快速入门的跳板,但真正实现个性化部署需要跨越从源码编译到定制化…...

百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现

百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现 1. 为什么需要测试AI助手的安全性 去年我在本地部署了一个自动化助手,本想让它帮我整理文档和收发邮件。结果有次不小心让它执行了一个包含rm -rf的命令,差点把工作目录清空。这次…...

Windows 11终极清理优化指南:用Win11Debloat快速提升系统性能

Windows 11终极清理优化指南:用Win11Debloat快速提升系统性能 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以…...

从 Spotlight 到 Raycast:一个 Mac 效率控的深度迁移与自定义指南

1. 为什么我从 Spotlight 迁移到 Raycast 作为一个用了十年Mac的老用户,我几乎每天都要和Spotlight打交道。从最初的简单文件搜索,到后来的计算器、词典功能,Spotlight确实帮了我不少忙。但直到去年发现Raycast,我才意识到原来Ma…...

ffmpegGUI:让FFmpeg视频处理变得简单的跨平台桌面工具

ffmpegGUI:让FFmpeg视频处理变得简单的跨平台桌面工具 【免费下载链接】ffmpegGUI ffmpeg GUI 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpegGUI ffmpegGUI是一款基于FFmpeg的开源图形界面工具,它将命令行操作转化为直观的可视化交互&…...

如何用PPTist快速创建专业演示文稿:免费在线PPT制作完全指南

如何用PPTist快速创建专业演示文稿:免费在线PPT制作完全指南 【免费下载链接】PPTist 基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示。支持导…...

GitHub中文界面终极指南:5分钟让你的GitHub说中文

GitHub中文界面终极指南:5分钟让你的GitHub说中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 想象一下,你…...

PromptTemplate和ChatPromptTemplate的区别是什么呢?

我用最简单、最直白、一看就懂的方式给你讲清楚: PromptTemplate 和 ChatPromptTemplate 的真正区别 一句话总结 PromptTemplate 生成一段普通字符串 给补全模型/简单模型用ChatPromptTemplate 生成一整段聊天对话格式 给**聊天模型(ChatGLM、Qwen、GP…...

新手指南:掌握3MF格式实现Blender高效3D打印工作流

新手指南:掌握3MF格式实现Blender高效3D打印工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 副标题:从格式解析到自动化处理的完整应用方案…...

陶瓷淬火时“啪“一声裂开的瞬间,背后藏着相场模型里的连续损伤演化。今天咱们用Matlab玩个热应力场+相场断裂的耦合计算,看看脆性材料怎么被温度场玩坏

matlab相场热力耦合断裂问题,陶瓷淬火算例,paraview可视化先上主菜——相场控制方程。核心是温度场T与相场d的相爱相杀: % 热传导方程残差计算 function R_T calc_heat_residual(T, d, dt)kappa 1e-5; % 热扩散系数grad_T gradient(T);R_T…...

告别蓝牙!用STM32F103和NRF24L01搭建低成本2.4G无线通信,实测传输距离与稳定性

STM32F103与NRF24L01构建高性能2.4G私有通信系统实战指南 在物联网设备爆发式增长的今天,无线通信模块的选择成为硬件开发者面临的首要难题。面对市面上琳琅满目的蓝牙、Wi-Fi和私有协议模块,如何根据项目需求选择最具性价比的解决方案?本文将…...

为什么AI Coding、Skills、Agent智能体都偏爱Markdown?

为什么AI Coding、Skills、Agent智能体都偏爱Markdown? 更多问题讨论和资料获取,请关注文章最后的微信公众号 从ChatGPT的输出到GitHub Copilot的提示,从Claude的记忆存储到智能体的工作流配置——Markdown无处不在。这不是巧合,…...

Pencil:重新定义设计与开发的边界

🎨 Pencil:重新定义设计与开发的边界 更多问题讨论和资料获取,请关注文章最后的微信公众号 当"设计即代码"成为现实,前端开发者的工作流正在经历一场革命 📖 什么是 Pencil? 如果你是一名前端开…...

手把手教你用51单片机实现蓝牙+WiFi双模控制智能小车(附OLED显示速度)

从零构建51单片机智能小车:双模无线控制与速度显示实战指南 引言 想象一下,当你坐在沙发上,用手机就能遥控一台自制的小车在房间里自由穿梭,同时还能实时查看它的行驶速度——这种极客般的体验其实并不遥远。基于51单片机的智能…...

Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南

Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 你是否曾经因为AI图像编辑工具操作复杂而头疼?是否厌倦…...

Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南

Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南 在 Windows 系统上搭建 PySpark 开发环境,对于数据科学家和开发者来说既是一个必经之路,也是一场充满挑战的冒险。不同于 Linux 或 macOS 系统&a…...

FanControl深度应用指南:从噪音溯源到智能散热系统搭建

FanControl深度应用指南:从噪音溯源到智能散热系统搭建 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

3个AI脚本让Illustrator设计效率提升300%:从重复劳动到创意爆发

3个AI脚本让Illustrator设计效率提升300%:从重复劳动到创意爆发 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 作为设计师,你是否每天花费40%以上时间在重复…...

告别WoMic:用VB-Audio Virtual Cable和TCP Socket自建无线麦克风(含参数配置避坑指南)

无线音频传输方案重构:VB-Audio与TCP Socket的工程实践 在音频处理领域,虚拟麦克风技术一直是个既实用又有趣的话题。许多开发者最初接触这一领域是通过WoMic这样的解决方案,但随着项目复杂度提升,人们往往需要更灵活、更可控的自…...

【开发工具】Trae IDE 解决 Windows 下 C 工程无法跳转定义问题

1. 概要 👋 作为 Trae IDE 使用者,在 Windows 环境打开本地 C 工程时,习惯用 Ctrl 鼠标左键 快速跳转函数 / 变量定义却失效,仅能做文本匹配,无法精准定位语义定义。核心原因是 Trae 依赖 LSP(语言服务器协…...

PTA编程题‘Person抽象类’避坑指南:变量命名冲突、多态指针数组与输出格式化的那些坑

PTA编程题‘Person抽象类’避坑指南:变量命名冲突、多态指针数组与输出格式化的那些坑 在C面向对象编程的实战中,抽象类和派生类的设计看似简单,却暗藏诸多陷阱。许多初学者在完成PTA/LeetCode这类编程题时,往往因为一些看似微不足…...

AutoUnipus:重新定义U校园学习效率的智能解决方案

AutoUnipus:重新定义U校园学习效率的智能解决方案 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台上堆积如山的网课任务而焦虑吗?每天花费…...

three-tile: 一个为Three.js应用注入真实地形的开源LOD模型库

1. three-tile究竟是什么? 第一次看到three-tile这个名字,很多人会误以为它又是一个WebGIS框架。但实际使用后你会发现,这个开源库的定位非常独特——它本质上是一个专为Three.js设计的LOD地形模型库。所谓LOD(Level of Detail&am…...

计算机毕业设计springboot众筹系统 基于SpringBoot的校园项目众筹融资平台设计与实现 高校创新创业众筹服务与资金管理系统构建研究

计算机毕业设计springboot众筹系统(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样…...

uniapp圆环进度条组件实战:从零到一打造个性化数据展示

Uniapp圆环进度条组件实战:从零到一打造个性化数据展示 在移动应用开发中,数据可视化是提升用户体验的关键因素之一。圆环进度条作为一种直观的数据展示方式,广泛应用于健身追踪、学习进度、任务完成度等场景。Uniapp作为跨平台开发框架&…...