这个系列每一篇都很短,主要用于将开源矿工架构和源代码中的每一个值得说明的概念都描述出来,因为开源矿工的源代码上的注释实在太少,不是因为刻意不添加注释而是因为它的源代码组织结构和运行时景象和大部分程序员平时所掌握的不太匹配,添加的注释会让人不知所云。
所以决定先有这个系列,先熟悉一下抽象的大致轮廓再去接触开发就像是带着地图去那里行走不至于迷路,后续会添加注释,添加的注释往往会是一些表地点的名词和表运动的动词往往不是完整的句子。
数据结构
在上一篇我们知道域是地域,是资源组织结构,其实就是空间,就是计算机领域所说的数据结构。在第0篇我们信仰所有的系统在空间结构上都是树形,之所以用“坚信”、“信念”这样的词是因为我们不想证明它,我只在意这个断言能否帮助我节能高效的工作。现在我们将具体化,将树形构造定律幻化到计算机领域的数据结构,我们认为:一个位是一个具有一个分叉的树,一个字节是一个具有8个分叉的树,一个int32是一个具有4个字节分叉的树……,由性别(2个位表示男、女、未知)、年龄、姓名组成的Person数据结构是由底层树组成的高层树。并且为了概念的完整性我们认为一个位也有两个枝杈,位的两个枝杈是0和1,它们是最小的不可分割的粒子,计算机世界是离散的世界正是因为到了01后不再可以分割。
现在当我们再次说开源矿工系统是一棵树的时候,在空间结构上可能就是在说开源矿工的根、树枝、叶子等数据结构了。
系统内外的界定
上一篇我们还说树是添加了偏移量的集合,既然是集合那一定有内外。我们认为在空间维度树的根是最大的集合、叶子是最小的集合,在行为维度叶子是最大的集合,根是最小的集合,也就是说我们认为当我们用相对静止的眼光看系统的时候我们在关注空间,当我们以运动、变化的眼光看系统的时候我们在关注时序。在前篇我们也多次提到边界、域就是地域边界,当我们认一个方向树的边界有两端,在操作系统看来开源矿工是个进程(资源树),操作系统的进程概念是比开源矿工更大的概念,涵盖的空间更大所以是更大的集合。在一棵更大的树中进程可以被看作开源矿工的根,但这超出了我们的系统进入到域外世界去了。前篇我们还提到原子也超出我们的世界了,原子只是个比喻,这里的原子指的是bit、和由bit组成的bool、int等,因为它们在我们的世界来说没有意义,币种、矿池、内核等才是我们的世界的事物,币种矿池内核等数据结构中被我们取了名称的属性(或者叫字段)也是我们的世界的事物,而属性是由bool树、int树、byte树组成的,这里的bool、int、byte、bit等概念也不属于我们的世界,它们就是我们说的原子世界,它们是计算机行为的根,因为计算机在运行时只认它们,所以说在运行时这个时序维度或者叫运动维度根是bit。两头的世界我们都不关心,它们都是我们的外。
外属性 —— 需要感知的外部事物
通过上一段我们认知到开源矿工的生存环境在我们的系统树外,组成开源矿工空间结构体的int、bool、bit也在我们的系统树外。开源矿工系统需要感知自己的生存环境,感知外部世界就是摆动自己的域内世界从而建立和域外世界的对应关系。开源矿工需要感知的外部世界的事物我们就称作外属性。它们是:计算机名、物理内存、虚拟内容、BIOS信息、显卡、驱动、文件系统等信息。
内属性 —— 本系统内的一切事物
开源矿工的内属性是什么?可以认为开源矿工系统内的一切事物都是内属性。开源矿工展示给用户的一切都是它的内属性,只展示给开发人员的事物也是它的内属性。开源矿工内部建立的对外部世界事物的对应也是它的内属性,只有当我们在开源矿工域外比如在QQ系统中说计算机名、物理内存等外部事物的时候它们才是和开源矿工没有关系的外属性。
为什么我们要感知那么多外部世界,因为只要我们感知了所有需要感知的外部事物,就是说只要我们的系统内部具有和所需认知的外部世界的对应关系,这样我们就能更好的适应生存环境,比如我们要支持无盘运行只需摆动开源矿工系统内部的一个参数即可。