尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

B语言的前世今生:bext-lang/b编译器为何要复活C语言的祖先?

B语言的前世今生:bext-lang/b编译器为何要复活C语言的祖先? B语言的前世今生bext-lang/b编译器为何要复活C语言的祖先【免费下载链接】bCompiler for the B Programming Language implemented in Crust项目地址: https://gitcode.com/gh_mirrors/b8/bB语言是C语言最直接的祖先它诞生于上世纪60年代末的贝尔实验室比C语言还要早三年。如今开源项目 bext-lang/b 用 Rust 系语言 Crust 重新实现了一款现代 B语言编译器试图让这门被历史遗忘的编程语言在新硬件上重新跑起来。本文将带你完整回顾 B语言的历史脉络、它与 C 语言的血缘关系以及这款编译器究竟有哪些值得一玩的亮点。B语言是什么一门比C语言更古老的编程语言1969年肯·汤普森Ken Thompson在贝尔实验室设计了 B 语言。它的灵感来自马丁·理查兹Martin Richards在1967年开发的 BCPL 语言——B 正是 BCPL 名称的进一步简化。B 语言有几个鲜明的时代烙印面向字而非字节早期机器以字word为基本存储单位B 语言不区分整数、浮点等类型数据本质上都是机器字。语法极简函数定义、{}代码块、printf风格输出等写法今天看来依然眼熟——因为后来者都继承了它。依赖硬件特性指针和数组的语义与 PDP-7、PDP-11 等机器的内存模型深度绑定。正是用 B 语言汤普森写下了 UNIX 操作系统的早期原型。可以说B 语言是 UNIX、C 语言乃至整个现代系统软件谱系的起点。B语言与C语言父子关系是如何建立的B 语言虽然开创了 UNIX但它的无类型 面向字设计在现代硬件上越来越别扭数据单元变大、寻址困难、移植性差。1972年丹尼斯·里奇Dennis Ritchie在 B 的基础上设计了 C 语言。C 语言的名字本身就是答案——C 就是 B 的后继者就像字母表里顺理成章的下一步。C 保留了 B 的语法骨架函数、花括号、表达式风格加入了类型系统、结构体和更强的指针能力最终取代 B 成为 UNIX 的主力语言并一路演化为今天无处不在的 C/C。这条血脉清晰地写进了计算机史BCPL → B → C → C → Java / Go / Rust …所以当你想彻底搞懂 C 语言甚至现代语言的为什么长这样回溯 B 语言往往是绕不开的一课。为什么要复活B语言复古编程的乐趣既然 B 语言早已被 C 取代为什么还有人专门写一个新的 B语言编译器bext-lang/b 项目给出了很坦诚的答案它并不追求实用而是有趣——适合娱乐性编程Recreational Programming和历史研究。具体来说价值集中在三点教育价值B 语言足够小语法规则一晚上就能学完是理解编译器原理、操作系统起源的最佳入门标本。复古编程情怀在一台 2020 年代的电脑上亲手编译运行 1969 年的语言本身就是极客式的浪漫。工程挑战让一门面向字、无类型的老语言适配现代 ABI 和多平台后端对编译器开发者而言是相当硬核的练习场。bext-lang/b编译器用Rust家族重写B语言编译器bext-lang/b 的项目定义是用 Crust 实现的 B 语言编译器。Crust 是 Rust 语言的一个极简子集/重实现强调不依赖标准库、贴近裸机与老语言 新工具链的组合相得益彰。它的架构采用经典的前后端分离设计前端词法分析src/lexer.rs、中间表示 IRsrc/ir.rs等负责把源码翻译成平台无关的中间代码后端src/codegen/目录下的各 codegen 模块负责把 IR 翻译成具体平台的汇编或字节码。最让人眼前一亮的是它的多目标支持一个编译器可以输出到完全不同的平台x86_64 平台Linux / Windows / Darwin见src/codegen/gas_x86_64/aarch64ARM 64 位平台见src/codegen/gas_aarch64/Uxn 虚拟机一个极简可移植的 8 位虚拟机输出.rom文件见src/codegen/uxn/MOS 6502雅达利、苹果 II、FC 红白机同款传奇处理器见src/codegen/mos6502.rs。更有趣的是codegen 是可插拔的任何符合格式的 Rust 模块放进src/codegen/目录就会被自动识别社区已经贡献了 .NET/Mono、MSVC 等第三方后端。想学编译器后端开发这里就是一本活教材。快速上手B语言编译器5分钟体验教程想亲手跑一段 B 语言程序依赖只有两个Rust 工具链 系统自带的 C 编译器GCC/Clang/mingw-w64 均可。在项目根目录执行$ make $ ./build/b -run ./examples/hello_world.b一段经典的 B 语言 Hello World 长这样见examples/hello_world.bmain() { extrn printf; printf(Hello, World\n); }extrn关键字声明外部函数这在 B 语言里是标配写法。项目还准备了从简单到复杂的几十个示例examples/目录从fib.b斐波那契、fizzbuzz.b到donut.b旋转甜甜圈、mandelbrot.b曼德勃罗分形甚至还有用 B 写的贪吃蛇snake.b足够你玩上一整个下午。B语言编译器支持哪些现代扩展特性bext-lang/b 在忠于历史的基础上还做了不少现代化扩展完整清单见docs/bext.md顶层 extrn 声明让外部函数在整个全局作用域可见内联汇编__asm__在 B 代码里直接嵌入汇编语句方便调用系统调用Naked 函数不生成函数序言/尾声的裸函数适合编写极简入口变参函数标注__variadic__适配不同平台对变参调用约定的差异。这些特性让复古与实用巧妙共存既能感受 1969 年的原汁原味又能安全地触达现代硬件能力。写在最后B语言编译器值不值得一玩如果你满足下面任一条件bext-lang/b 都值得一试好奇C 语言的祖先长什么样想亲手写一段上古代码想入门编译器开发需要一个麻雀虽小、五脏俱全的参考项目是复古编程 / 极简主义爱好者喜欢在 6502、Uxn 这类古董平台上折腾想理解语言设计中的取舍类型系统、内存模型、可移植性从何而来。获取源码非常简单$ git clone https://gitcode.com/gh_mirrors/b8/b项目自带的测试套件tests/目录与tests.json覆盖了词法、语法、调用约定等方方面面配合btest工具可以一键回归。这既是一部活着的编程语言史也是一份极佳的编译器学习材料——毕竟只有把历史写进代码里历史才算真正被复活。【免费下载链接】bCompiler for the B Programming Language implemented in Crust项目地址: https://gitcode.com/gh_mirrors/b8/b创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表