Plan9的C編譯器


Plan9的C編譯器有什么特別

對於分布式操作系統來說,需要能在那么多種CPU上進行運行,C編譯器是尤其重要的。試想一下,如果你寫了一個標准C的程序,需要在AMD64,ARM,Intel 86-32,MIPS,Motorola這么多CPU架構上都能運行,不是一個簡單的事情。

plan9的C編譯器要做的就是這么一個事情。How to Use Plan9 C Compiler http://doc.cat-v.org/plan_9/4th_edition/papers/comp 就是這么一篇文章詳細說了Plan9的C編譯器。

 

首先當然要給不同的CPU架構的不同的地方注冊不同的信息。

Plan9的C編譯器分為依賴系統的文件和不依賴系統的文件。依賴系統的文件有兩個<ureg.h>和<u.h>。不同的CPU架構實質上不同的地方就在於寄存器和尋址方式。ureg.h就定義了不同的寄存器,u.h就定義了不同的尋址方式。

PS:在Go源碼中的include文件夾下你會看到這兩個文件。

其次是不同CPU架構的編譯器名字

Plan 9 C Compiler http://doc.cat-v.org/plan_9/4th_edition/papers/compiler 這篇文章中有說到。其實Plan9的C 編譯器實際上就包括了多個編譯器,它給每個CPU架構起了一個單字母或者數字的名字,比如5是ARM,6是AMD64,8是Intel86-32。然后給編譯器,匯編器,鏈接器分別取名c,a,l。於是就出現了8c,8l,8a這樣的工具。

Buffer IO

操作系統的文件操作有兩種:buffer IO和非buffer IO。buffer IO就是讀取文件前都先將文件讀取到內存中,然后從內存再輸出或者從輸入到內存中。由於內存的讀寫速度比磁盤快,所以Buffer IO是比非buffer IO快,但是有的不足是有可能會掉數據,這個也是由於內存中的數據是非持久化的。

標准的C庫中是沒有buffer IO的,於是plan9就有了一個<bio.h>專門負責buffer IO的功能。

PS: 在Go的inlude文件夾下你也會看到bio.h

Rune的概念

Rune是“字符”的概念。世界上的所有語言的字符在Unicode編碼中已經分配了不同的編碼,而且也有不同的字節長度。英語是1個字節長度,中文是3個字節長度。在plan9中不是使用char來表示字符,是使用rune來表示字符。字符是使用單引號來進行表示,比如"你"和'你'這兩個是代表不同的含義,單引號的是你這個中文字符,雙引號代表將你這個中文字符當作三個UTF-8的字符串。

Go和Plan9

Go語言的目標也是跨平台,和Plan9的目標是一樣的,並且作者是同一個,所以Go的編譯器和Plan9幾乎是一樣的,只是實現地並沒有那么多CPU架構而已。預計以后也會支持越來與多架構的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM