文章摘要
该项目是Amsterdam Compiler Kit(ACK)的GitHub仓库,由davidgiven维护。ACK是一个编译器工具包,支持多种编程语言和目标平台。仓库获得了588个星标和76个分支,表明其在开发者社区中有一定关注度。
文章总结
阿姆斯特丹编译器工具包(ACK)简介
项目概述
阿姆斯特丹编译器工具包(ACK)是一个完整的编译器工具链,包含多种语言的编译器前端、代码生成器、支持库及构建工具,支持从源代码到多平台可执行文件的完整流程。当前版本为V6.2+,由Vrije Universiteit Amsterdam于1987-2005年开发,后由David Given维护至2025年。
核心功能
支持语言
- ANSI C(兼容K&R C)、Pascal、Modula-2、Basic。
目标平台
- 经典系统:CP/M(i80)、MS-DOS(16/32位)、Minix(m68000)、PDP-11 Unix。
- 现代系统:Linux(x86、m68k、MIPS、PowerPC)、macOS(x86/PPC)、Raspberry Pi GPU。
- 字节码:EM22中间代码。
安装指南
环境需求
- ANSI C编译器(默认GCC)、Flex/Yacc、GNU Make、Lua(含posix库)、Python 3.4+。
- 约1GB磁盘空间。
安装步骤
1. 编辑Makefile调整配置(如安装路径PREFIX和目标平台PLATS)。
2. 执行make进行构建(支持并行编译)。
3. 运行sudo make install完成安装(默认路径/usr/local)。
使用说明
主要命令
通过ack调用编译器链,常用选项:
- -m<平台>:指定目标平台(如linux386)。
- -O:启用优化(最高6级)。
- -c:生成.o目标文件;-c.s:生成汇编文件。
文件扩展名关联
- .c:C语言;.p:Pascal;.mod:Modula-2;.bas:Basic。
- 若文件首字符为#,非C语言文件也会调用C预处理器。
示例
bash
ack -mlinux386 -O examples/paranoia.c
注意事项
- 库支持有限:C库符合ANSI标准,其他语言功能类似。
- 平台差异:各平台支持详情见
plat/<平台名>/README。 - 文件格式:ACK使用专属
.o格式,不兼容其他编译器。 - 历史代码:仓库包含部分已弃用的旧组件,仅部分可构建。
免责声明
ACK虽经严格测试,但现代环境可能存在兼容性问题。开发者鼓励用户通过邮件列表反馈问题或贡献修复。项目采用BSD许可证,详情见Copyright文件。
维护者
David Given(GitHub: davidgiven)
dg@cowlark.com
2025年4月17日
评论总结
以下是评论内容的总结:
项目状态疑问
- 有用户关注项目是否已停止更新(最后更新在2022年)
- 引用:"Looks cool, last post in 2022 though? Is it feature complete?"
工具链功能与限制
- 该项目是针对老旧平台的工具包,包含多种语言支持,但依赖现有平台的其他工具(如GCC、Lua等)
- 引用:"A kit for targeting several old or old-ish platforms... relies on a lot from an existing platform"
命名疑问
- 有用户对项目名称"Amsterdam"的来源表示好奇
- 引用:"Why the name amsterdam?"
硬件支持不足
- 用户指出项目支持Raspberry Pi GPU,但缺乏对现代架构(如x86-64、Aarch64)的支持
- 引用:"It's interesting that they have a Raspberry Pi GPU backend, but neither an ARM backend nor any modern ISA"
历史意义
- 该项目是最早支持多前端、中间语言和通用后端的编译器工具包之一,早于LLVM和ACK
- 引用:"One of the first widely used compiler toolkits with multiple frontends... predating it when diving into compiler literature"
与GCC的渊源
- 该项目曾因许可证问题促使Richard Stallman创建GCC,但现已采用BSD许可证
- 引用:"spurred Richard Stallman to create GCC... under a 3-clause BSD license"
怀旧与教育意义
- 有用户提到该项目在教学中被使用,引发怀旧情绪
- 引用:"Graduated from the VU so we where tought about the ack and minix in our first CS classes"