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架构而已。预计以后也会支持越来与多架构的。

目录
相关文章
|
1月前
|
人工智能 NoSQL 数据库
开发者们自己的Plan B
“人无远虑,必有近忧。”这句话对开发者同样适用。在技术日新月异的今天,开发者面临巨大压力,制定Plan B尤为重要。实际工作中,如应用服务需两台机器分散压力、确保故障时迅速接管,服务器、数据库主备模式等都是Plan B的体现。开发者应利用业余时间提升技术水平,学习新语言和框架,保持竞争力,立于不败之地。
|
自然语言处理 测试技术 Go
从句覆盖 (clause coverage)
从句覆盖 (clause coverage) 是自然语言处理中的一种技术,用于评估一个机器翻译系统或文本摘要系统是否能够准确地翻译或摘要一个句子或从句。
92 7
|
C++
汇编 -- c++/c 多函数调用
汇编 -- c++/c 多函数调用
52 0
函数调用的预编译
函数调用的预编译
75 0
|
分布式计算 Scala Spark
Spark expression Codegen 之code代码块
Spark expression Codegen 之code代码块
265 0
Spark expression Codegen 之code代码块
|
Python
Python编程:Built-in Functions内建函数小结
Python编程:Built-in Functions内建函数小结
206 0
|
关系型数据库 C语言 PostgreSQL
PostgreSQL 开启with-llvm(JIT)后,新增插件异常(clang: Command not found)处理
标签 PostgreSQL , llvm , clang , jit 背景 PostgreSQL 11版本开始引入了对JIT的支持,在OLAP类型的SQL有比较大的性能提升。 如果你使用的是YUM安装的PG,clang可能没有加入,在后期编译其他插件时可能遇到类似的报错: 比如pg_hint_plan插件 git clone https://github.
2999 0
重构——38以卫语句取代嵌套条件表达式(Replace Nested Conditional with Guard Clause)
以卫语句取代嵌套条件表达式(Replace Nested Conditional with Guard Clause):函数中的条件逻辑使人难以看清正常的执行路径;使用卫语句表现所有特殊情况
3827 0

热门文章

最新文章