天天看點

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架構而已。預計以後也會支援越來與多架構的。