Hacker News 中文摘要

RSS订阅

阿姆斯特丹编译器套件 -- Amsterdam Compiler Kit

文章摘要

该项目是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


注意事项

  1. 库支持有限:C库符合ANSI标准,其他语言功能类似。
  2. 平台差异:各平台支持详情见plat/<平台名>/README
  3. 文件格式:ACK使用专属.o格式,不兼容其他编译器。
  4. 历史代码:仓库包含部分已弃用的旧组件,仅部分可构建。

免责声明

ACK虽经严格测试,但现代环境可能存在兼容性问题。开发者鼓励用户通过邮件列表反馈问题或贡献修复。项目采用BSD许可证,详情见Copyright文件。

维护者
David Given(GitHub: davidgiven)
dg@cowlark.com
2025年4月17日

评论总结

以下是评论内容的总结:

  1. 项目状态疑问

    • 有用户关注项目是否已停止更新(最后更新在2022年)
    • 引用:"Looks cool, last post in 2022 though? Is it feature complete?"
  2. 工具链功能与限制

    • 该项目是针对老旧平台的工具包,包含多种语言支持,但依赖现有平台的其他工具(如GCC、Lua等)
    • 引用:"A kit for targeting several old or old-ish platforms... relies on a lot from an existing platform"
  3. 命名疑问

    • 有用户对项目名称"Amsterdam"的来源表示好奇
    • 引用:"Why the name amsterdam?"
  4. 硬件支持不足

    • 用户指出项目支持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"
  5. 历史意义

    • 该项目是最早支持多前端、中间语言和通用后端的编译器工具包之一,早于LLVM和ACK
    • 引用:"One of the first widely used compiler toolkits with multiple frontends... predating it when diving into compiler literature"
  6. 与GCC的渊源

    • 该项目曾因许可证问题促使Richard Stallman创建GCC,但现已采用BSD许可证
    • 引用:"spurred Richard Stallman to create GCC... under a 3-clause BSD license"
  7. 怀旧与教育意义

    • 有用户提到该项目在教学中被使用,引发怀旧情绪
    • 引用:"Graduated from the VU so we where tought about the ack and minix in our first CS classes"