百科问答小站 logo
百科问答小站 font logo



Tiny C Compiler是个怎样的编译器?有人更新吗? 第1页

  

user avatar   rednaxelafx 网友的相关建议: 
      

Tiny C Compiler(TCC)原本是Fabrice Bellard大神用C语言实现的一个C语言编译器。它自身体积非常,编译/链接速度非常,生成的代码质量一般,可以自举(自己可以编译自己)。就如另外那个答案所说,这些特点在官网上都写得很清楚。

官方网站:

TCC : Tiny C Compiler

,官方文档:

Tiny C Compiler Reference Documentation

顺带:Fabrice Bellard大神的另一个好玩的项目,

Javascript PC Emulator

,里面的Linux镜像里就带有TCC。于是TCC在浏览器里也可以玩。

虽然Fabrice大神已经不维护TCC好多年,但还是有不少有爱的人在持续更新它的。

Git repo在此:

Public Git Hosting - tinycc.git/summary

<- 可以看到就今天都还有人在更新呢。

题主对小型C语言编译器感兴趣的话,请跳这个传送门:

有哪些关于c4 - C in four function 编译器的文章? - RednaxelaFX 的回答

我在那个回答里简单比较了C4与TCC、LCC等小型编译器的异同,也提到了一些资料链接(包括某本国内出的书)。欢迎参考。

简单介绍TCC的话,它跟上面说的C4类似,都是“单趟编译器”(one-pass compiler)——它的预处理(tccpp.c)、词法分析(tccpp.c)、语法分析(tccgen.c)、类型检查(tccgen.c)、代码生成(<arch>-gen.c)、汇编(其实直接生成了机器码,不经过汇编)、链接,全部都是在一趟里完成的。

由于是单趟编译器,TCC的编译流程中没有使用任何“中间表示”(intermediate representation,IR)。

TCC的预处理器、词法分析器与语法分析器都是手写的而不是生成的。

其中,语法分析器是典型的递归下降式(recursive descent),在语句层面与表达式层面都是。

整个编译流程基本上都是由语法分析所带动的。这种做法也叫做语法制导翻译(syntax-directed translation)。这是单趟编译器的典型做法。

代码生成使用的是基于栈的代码生成思路。这跟C4(特别是能生成x86机器码的C4x86)也是相似的。TCC在代码生成的过程中还做了很少量的优化,例如常量折叠。

顺带放个新传送门:

tcc -O2会做什么? - 编程语言与高级语言虚拟机杂谈(仮) - 知乎专栏



  

相关话题

  为什么编程语言中没有一种 if,来判断大概率为真(或假)的情况,来提升 CPU 分支预测的速度呢? 
  这段 Java 代码中的局部变量能够被提前回收吗?编译器或 VM 能够实现如下的人工优化吗? 
  在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’? 
  为什么很多编程语言采用花括号区分 block 而非缩进? 
  请问从技术角度来看是鸿蒙操作系统,木兰编程语言,方舟编译器哪个技术水平更高一些? 
  埃式筛为什么只要筛到根号n就好了? 
  最快的 atoi、atof 实现是什么样的? 
  如何直接跳出深层递归而不是一层一层跳出? 
  编程中,有哪些好的习惯从一开始就值得坚持? 
  如果你是一个C++面试官,你会问哪些问题? 

前一个讨论
大家都见过哪些让你虎躯一震的代码?
下一个讨论
如何解决用手机拍摄显示器时出现纹路的问题?





© 2024-11-25 - tinynew.org. All Rights Reserved.
© 2024-11-25 - tinynew.org. 保留所有权利