【问题标题】:small c compiler for educational purpose [closed]用于教育目的的小型 c 编译器 [关闭]
【发布时间】:2013-11-28 13:08:45
【问题描述】:

是否有任何遵循 ansi c 扩展的小型 c 编译器,但它的 LOC 仍然少于 10,000。基本上'正在尝试将这样的小型编译器移植到称为 xv6 的此类教育 OS 内核之一。谢谢。

【问题讨论】:

  • 永远不明白教别人一些他们在现实世界中永远不会使用的东西的概念
  • 如果你有一个在 xv6 中运行的汇编器和一个链接器(或者如果你可以移植 NASM 或在 xv6 上实现它的一个很小的子集),移植我的SmallerC 应该相当容易。最近有很多改进,现在编译器可以在 DOS、Windows 和 Linux 上自托管,并且可以交叉编译到这 3 个平台。它还实现了大部分标准库(除了那些需要不受支持的语言特性的函数(例如浮点、按值传递/返回结构、完整的预处理器))。
  • 所以,虽然Smaller C 仍然依赖 NASM(或 YASM)来编译从 C 代码生成的汇编代码,但它现在可以使用带有简单包装器的 FASM(参见 Smaller C 中的 n2f.c)将 NASM 语法转换为 FASM 语法和布局。 FASM 是自己编写的。这意味着现在移植 Smaller C 和 FASM 应该很容易,只需教 FASM 和 Smaller C 库使用 xv6 系统调用就可以了。

标签: c compiler-construction xv6


【解决方案1】:

我认为这是不可能的。您可以尝试类似 https://github.com/alexfru/SmallerC 的东西,这是一个非常小的 C 子集编译器。(有关该语言,请参阅 wiki)

或者看 pcc,但那要大得多。

【讨论】:

  • 现在 Smaller C 大约是 8-9KLOC。我希望尽快添加对结构的支持,这将添加更多行。但是还需要一个汇编器和一个链接器(我不确定 xv6 是否自带)。仅这些将使其大于 10KLOC。如果你投入一个体面的预处理器......我们正在寻找〜15KLOC,给予或接受。这是 ANSI C 的一个子集。
  • 刚刚添加了对 struct 和 union 的基本支持。现在大约 10 KLOC。
【解决方案2】:

事实证明,xv6 迫切需要一些改进才能托管一个像样的 C 编译器,或者只是一个汇编器和一个链接器:

  • 更大的最大文件大小(目前上限约为 64KB)
  • 寻找
  • 在上下文切换时保存/恢复 FPU 状态

可能还需要一些其他小的改进。

链接:

【讨论】:

    【解决方案3】:

    我知道的最小的是 TCC http://bellard.org/tcc/,它有大约 30 000 个 LOC。

    【讨论】:

    • xv6 本身就是 10K LOC。 :)
    • @erbdex 很难击败 10 KLOC,除非它是 ioccc.org 的条目。 :) 我刚刚在 Smaller C 中添加了对 struct 和 union 的支持,代码约为 10 KLOC(仍然缺少枚举、typdef、浮点、一些位、普通预处理器及其自己的汇编器和链接器)。
    猜你喜欢
    • 2011-06-28
    • 1970-01-01
    • 2015-01-28
    • 2020-09-23
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2010-09-12
    • 2011-11-29
    相关资源
    最近更新 更多