[hellogcc] Re: [hellogcc] Re: [hellogcc] Re: [hellogcc] 新听说一个 cosy compiler

  • From: Triple Yang <triple.yang@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Wed, 10 Aug 2011 19:02:52 +0800

从功能上说,as和ld是“广义”编译器的一个部分。一个“狭义”编译器只能把高级语言翻译成汇编。比如说,我们从gcc官网上下载的源码包是一个狭义编译器,as和ld包含在另一个工具集binutils中。

在工具软件开发者看来,汇编器和编译器可以没有任何直接的关系。一般是处理器设计者定义了指令集(包含相应的助记符)的文档,汇编器根据该文档在支持该指令集的基础上,会有一些高级的扩展功能(如label,宏汇编等等)。狭义编译器把高级语言翻译成助记符,其中往往也包含着一些汇编扩展功能支持的特性,这可能是编译器和汇编器最重要的联系。在这个意义上,汇编器又分为两个阶段:预处理和汇编,前者负责处理汇编扩展功能。

链接器负责目标文件的链接,它以汇编器的输入为输出,它和指令集有关的部分大概仅在于重定向。链接器主要是和目标文件格式有关。

总结起来就是:1. 狭义编译器主要是与高级语言和指令集相关,但它生成助记符时需要了解汇编器对扩展功能的支持,否则可能需要加入一次汇编预处理;2.
汇编器主要是与指令集和目标文件格式有关;3. 链接器主要是与指令集和目标文件有关。

现在几乎没有高度耦合的“广义”编译器存在,这些功能部件都是分开的。从底层到高层看,是汇编器对编译器提供下层支持,而不是反过来。

在上面的基础上,我回答你的问题:
1.
cosy是帮助开发者实现一个狭义编译器的工具软件,自然不包含as和ld,因为这两个功能部件是和处理器密切相关的底层软件,它们更多的是与处理器设计相关(许多处理器设计软件支持自动生成可用的汇编器和链接器,但是自动生成编译器比较困难,大概还没有实际用途)。

2. cosy支持全部c90和大部分的c99特性,所以在一个合理移植的C语言(标准以及适当扩展的)库的基础上,编译linux
kernel应该没有问题,根本的限制大概在于硬件是否支持全部的操作系统特性(如内存分页等)。

3. 如果内核可以编译,广大的应用软件应该没有原则上的困难,只是一个工程实践转化为现实性的过程。

(咿呀呀,写了好多!)
2011/8/10 Liu <proljc@xxxxxxxxx>

> 2011/8/8 Triple Yang <triple.yang@xxxxxxxxx>:
> > 是一种compiler designer, 卖得好贵的,试用过oem的express版本,不错。老欧洲几十年的积累不是随便盖的。
> AS和LD也是他们自己的么?
> 兼容gcc程度如何?
> 能不能编译出来运行正确的Linux Kernel,GNU Libc,Xorg,QT/GTK,KDE/Gnome等广大人民群众使用的软件啊?。
>  >
> > 2011/8/8 Liu <proljc@xxxxxxxxx>
> >>
> >> http://www.ace.nl/
> >>
> >
> >
>

Other related posts:

  • » [hellogcc] Re: [hellogcc] Re: [hellogcc] Re: [hellogcc] 新听说一个 cosy compiler - Triple Yang