让我的不可移植 transputer C 编译器重新可移植
来源:nanochess.org — 51 分 · by nanochess
📋 概述
Oscar Toledo G. 翻出一张软盘,里面是他 1998 年用 DJGPP 编译的 transputer C 编译器——那是为 AMD Am29000 生成代码前的一个中间版本,已经去掉了 Small-C 残留、具备正规词法分析、ANSI C 语法与完整预处理器。他想在 M1 MacBook Air 上重新编译它,问题立刻暴露:当年代码把整数和指针混用(都是 32 位),文件句柄用 int 而不是 FILE *,函数也没有原型,而今天指针是 64 位。更深层的麻烦来自 Small-C 血统:没有 struct 关键字,所有结构都借用 char 字节池拼出来,字符按两个字节切分(为 8080 处理器),后扩到 32 位平台变成四个字节,把 64 位指针塞回 32 位整数根本不可能。他的目标是只做足够改动让它在现代 64 位平台编译,同时仍能用它自举编译 transputer 版本。
🔑 核心要点
- 起点是 1998 年的老代码:用 DJGPP 编译的 transputer C 编译器,本为过渡到 Am29000 而准备。
- 它本身相当完整:正规词法分析、ANSI C 语法与完整预处理器。
- 移植痛点一是类型:整数与指针混用,文件句柄用 int 而非 FILE *,函数没有原型。
- 移植痛点二是历史包袱:Small-C 没有 struct,结构体都靠 char 字节池手工拼。
- 字节宽度是硬伤:原本为 8080 两字节切分,扩到 32 位后变四字节,64 位指针无法再塞回去。
- 目标很克制:只改到能在 64 位平台编译,同时仍能自举编译 transputer 版本。
💡 金句
旧程序无法在现代 64 位系统上编译,这不是第一次了。但与其让这个编译器只作为只能在模拟器里跑的奇观,不如让它在你现在的笔记本上跑起来。剧透一下:这并不容易。
👍 0
👎 0
← 返回 Hacker News 首页