Hacker News 中文摘要

RSS订阅

微型C编译器 -- Tiny C Compiler

文章摘要

TCC是一个极小的C语言编译器,具有体积小、速度快的特点,支持直接编译执行C代码和动态库调用,接近ISOC99标准,包含内存安全检查功能,还能作为动态代码生成的后端。虽然作者已停止开发,但TCC仍因其轻量高效而适用于各种场景。

文章总结

TCC:微型C语言编译器

概述 TCC(Tiny C Compiler)是一款轻量级、高性能的C语言编译器,由Fabrice Bellard开发。虽然作者已不再维护该项目,但开发者仍可通过邮件列表获取最新信息。

核心特性 1. 体积小巧:x86平台可执行文件仅约100KB,包含C预处理器、编译器、汇编器和链接器,适合救援盘等空间受限环境 2. 编译迅速:直接生成x86代码,无字节码开销。经测试编译Links Browser项目(76,936行代码)时,速度比GCC 3.2快9倍 3. 功能全面:支持直接调用C动态库,兼容ISOC99标准,可自编译 4. 安全增强:提供可选的内存边界检查功能 5. 便捷使用:支持直接编译执行C源码(无需单独链接/汇编),内置完整C预处理器和类GNU汇编器 6. 脚本支持:通过添加"#!/usr/local/bin/tcc -run"头注释,可直接执行C脚本 7. 动态编译:通过libtcc库支持动态代码生成

性能数据(2.4GHz Pentium 4测试): - TinyCC 0.9.22:2.27秒,859,000行/秒,29.6MB/秒 - GCC 3.2 -O0:20.0秒,98,000行/秒,3.4MB/秒

资源 - 下载地址:GNU Savannah仓库 - 文档:提供在线文档 - 邮件列表:开发者交流社区 - 许可证:GNU LGPL协议

(注:原文中大量重复的URL链接和已失效的测试报告链接已作精简处理,保留核心功能描述和关键性能数据)

评论总结

以下是评论内容的总结:

  1. 对TCC的怀念与现状

    • 用户感慨TCC已停止维护多年,但仍对其轻量级特性表示赞赏
    • "Even in the era of terabyte NVMe drives my eyes water when I install MSVC"(rustyhancock)
    • "Sad but not surprised to see it's no longer maintained"(rustyhancock)
  2. 活跃的分支与镜像

    • 多个用户指出存在维护中的分支,支持RISC-V等新特性
    • "There is an actively maintained fork with RISC-V support"(haunter)
    • "unofficial mirror which has updates"(pbohun)
  3. 教育与应用场景

    • 有用户提到大学课程强制使用TCC,也有开发者用于语言项目
    • "required to use for my courses...GCC was forbidden"(throwatdem12311)
    • "do fast native-code generation for language projects"(olivia-banks)
  4. 技术特点与挑战

    • 代码存在特殊实现细节,编译难度较大
    • "switch statement with an post-increment operator"(fjfaase)
    • "uses the ## operator where the result is the name of a macro"(fjfaase)
  5. 相关资源与扩展

    • 提及更小的C编译器(512字节)和Guix引导项目
    • "fits within the 512 bytes"(senfiaj)
    • "Used in the impressive Guix bootstrap"(gnufx)
  6. 幽默与误认

    • 用户调侃AI生成编译器的梗,也有混淆TCC与LCC的情况
    • "The Latest AI just zero-shotted an entire C compiler"(kimixa)
    • "mixed it up with LCC which was used in Quake 3"(markus_zhang)
  7. 开发建议

    • 有用户询问编译器开发入门资源
    • "good resource for getting started writing a compiler?"(imwally)