天天看点

Plan9的C编译器Plan9的C编译器有什么特别Buffer IORune的概念Go和Plan9

对于分布式操作系统来说,需要能在那么多种cpu上进行运行,c编译器是尤其重要的。试想一下,如果你写了一个标准c的程序,需要在amd64,arm,intel 86-32,mips,motorola这么多cpu架构上都能运行,不是一个简单的事情。

首先当然要给不同的cpu架构的不同的地方注册不同的信息。

plan9的c编译器分为依赖系统的文件和不依赖系统的文件。依赖系统的文件有两个<ureg.h>和<u.h>。不同的cpu架构实质上不同的地方就在于寄存器和寻址方式。ureg.h就定义了不同的寄存器,u.h就定义了不同的寻址方式。

ps:在go源码中的include文件夹下你会看到这两个文件。

其次是不同cpu架构的编译器名字

操作系统的文件操作有两种:buffer io和非buffer io。buffer io就是读取文件前都先将文件读取到内存中,然后从内存再输出或者从输入到内存中。由于内存的读写速度比磁盘快,所以buffer io是比非buffer io快,但是有的不足是有可能会掉数据,这个也是由于内存中的数据是非持久化的。

标准的c库中是没有buffer io的,于是plan9就有了一个<bio.h>专门负责buffer io的功能。

ps: 在go的inlude文件夹下你也会看到bio.h

rune是“字符”的概念。世界上的所有语言的字符在unicode编码中已经分配了不同的编码,而且也有不同的字节长度。英语是1个字节长度,中文是3个字节长度。在plan9中不是使用char来表示字符,是使用rune来表示字符。字符是使用单引号来进行表示,比如"你"和'你'这两个是代表不同的含义,单引号的是你这个中文字符,双引号代表将你这个中文字符当作三个utf-8的字符串。

go语言的目标也是跨平台,和plan9的目标是一样的,并且作者是同一个,所以go的编译器和plan9几乎是一样的,只是实现地并没有那么多cpu架构而已。预计以后也会支持越来与多架构的。