开源矿工的开发耗费了我很多精力,到今天已经整出了10万行代码,但是缺乏文档和注释,不是因为刻意不添加注释,而是因为添加的注释会让人不知所云。可能大部分开发者不熟悉开源矿工的开发模式,需要先有个铺垫,后续的文字就是用来做这个铺垫的。开源矿工不是OO也不是过程,它是面向数据编程,它是系统编程。

一,从0开始

我们相信所有的系统都是从0开始的

我们相信,所有的系统都是从0开始的。

所谓从0开始就是从虚无开始,软件系统一定也是从0开始的。0可以称作Void、Virtual什么的,Void已经被编程语言占用了,那么我们用Virtual吧。

我们相信,所有的系统在空间结构上都是树形的,软件系统肯定不例外。

树是一个奇妙的结构,只要你愿意你所掌握的一切知识都是树形,你未掌握的知识也是树形。不做多说,开源矿工系统在空间结构上和行为结构上都要有Root(根)概念。开源矿工有根,构建开源矿工的编程语言有根,开源矿工所生存的运行时环境也有根,下层的事物我们不做追究,开源矿工作为生存在操作系统时空中的一个小小的应用系统来说只感知自己所需要感知的环境即可。

我们相信,所有的词汇都应该按照望文生义理解

你望文生义出来的意思就是本真的意思,凡是不能望文生义的或者望文生义出的意思和联想不一致的语言文字载体都已经被前人丢弃或者迟早被后人丢弃。我们不使用不能望文生义的词汇。

从源代码的VirtualRoot类型开始。望文生义,这是虚无,这是根。这是第一个出现的东西,它处在开源矿工的最底层,所有上层建筑都建立在它之上。它下面肯定也有东西,但那是编程语言和运行环境的世界,我们的世界从VirtualRoot开始。

VirtualRoot

VirtualRoot是个静态类型,它不是被我们构建而生的,有世界的时候它就已经在那里了,它是从0开始的0,它是整个世界的根。VirtualRoot根上挂载的事物也全都是静态的在世界开始的时候就已经在那里的事物,直接挂载在VirtualRoot上的事物有:

  1. JsonSerializer 它是粉碎机,它是重建器,它安装在系统的出入口处,开源矿工内部的物体流出系统前会被它打碎成下层系统的物体,下层原子世界不需要我们关注;外部系统的事物在进入我们的系统后首先会被它重建成我们的世界里事物的样子。我们的系统只有一个入口和一个出口,这唯一的出入口就是VirtualRoot,是根。
  2. MessageDispatcher 推进器、动力源,或者其它什么名字,照此理解就可以了,开源矿工系统内部运动的动力之源就是它,至于它的动力又是来自CPU这种下层世界的事物又超出我们的世界之外去了。
  3. CommandBus 命令电车,它由MessageDispatcher驱动,MessageDispatcher不是装在它里面的引擎,MessageDispatcher是电。它运载命令,命令是一种消息,消息是一种空间结构体。
  4. EventBus 事件电车,它由MessageDispatcher驱动,MessageDispatcher不是装在它里面的引擎,MessageDispatcher是电。它运载事件,事件是一种消息,消息是一种空间结构体。

Message

上面知道VirtualRoot上挂在的CommandBus和EventBus分别是运载命令和事件的,而命令和事件是两种不同类型的消息。消息是什么?消息是消息的收发方所协定的承载信息的空间结构体,空间结构体是什么?就是一段树枝,树枝的枝杈相对位置和长短编码了能被收发方所理解的信息。

Command

事情发生前的消息。

Event

事情发生后的消息。

Path

路径,消息所运动的路径。

二,认识系统内的空间和时间

域是空间场所

通过上一部分我们知道所有的词汇都应该是通过联想望文生义的,那么作用“域”的域指的就是地域、场所、空间单元、资源组织结构,不管这个词出现在什么领域,不管这个词出现在人类知识树的什么节点它指的意思都是空间场所。

域是组织结构单元

通过上一部分我们知道所有的系统在空间结构上都是树形,树是一种构造规律,它是对集合的有序带偏移量的分层排列。域就是集。

域中的成员也是域

描述域之前我们需要先描述出域中的成员,它们是:币种、内核、矿池 等。每一个成员是一个体,这个体是空间结构体,而空间结构体是一段树枝,所以说你可以认为每一个成员是一段树枝。这一篇我们在从域的角度描述问题,域是集,而树是有序集,所以一段树枝就是一个域,而币种、内核、矿池等空间结构体是一段段的树枝,所以说域中的成员也是域。就像房间里有柜子,柜子里有抽屉,抽屉里有盒子,盒子里有手机,手机空间里的东西超出了我们的世界进入到未知的域外世界去了我们不关心。房间外面有楼,楼外面有地球,地球外面又到域外世界去了也和我们没关系。

人的思维是被观察者域的域外维度

人的思维没有尺寸,它可以进入天体也可以进入原子,因为它根本可以不在木星上或原子内,它是在被观察者外部的世界,它是在观察者自己的内部世界建立的一种和外部世界的对应关系。人的思维可以进入天体也可以进入原子,这种进入运动是人脑内部在自己的内部世界的运动而并非真的进入了外部世界。

运动 —— 我们需要准确认知自己当前所处的观察者位置

通过“事情发生的场所”这句话我们知道重点在于“事情”,在于“发生”,在于“变化”,在于“运动”。 我们的思维没有尺寸,它可以在自己构建的对外部世界的映射的内部世界里任意行走。但我们需要准确认知自己当前被自己投射到了哪里。 “发生”是一种变化,是运动。空间一但变化就产生了时许概念,顺序一旦产生就有了前后、里外、长短等概念。观察者和参照点随之而生。 空间是一种相对静止的存在,就像人有五肢,我们可以将人体看作一棵树,头、双手、双脚5肢的相对位置在这棵树上来说是固定的相对静止的,当我们说人体5肢之间的关系是静止的时候我们将自己放在了这个树的域中,此时作为观察者的我们进入了这段树枝的世界,我们要准确的认知此时自己无法从树枝的一个枝丫跳进树外然后再由树外到达另一个枝丫,我们必须在树上运动,所以这段树枝的相对关系是静止的。观察者和参照点随运动而生,我们必须准确认知自己作为观察者当前所处的位置和观察的方向,我们必须能够意识到作为观察者的自己有没有变换位置。

开源矿工这棵系统树内部划分有5大域

开源矿工这棵系统树内部划分有5大域。这5大作用域是:币种集、矿池集,内核集、币种x内核集、矿池x内核集。我们说开源矿工内部有这5大域,而不是说总共只有这5大域,因为开源矿工这棵树作为一个整体也是域啊,系统内部的每一个对象也是域啊,而是说这5大域是值得显式化描述的5大域。请记住它们,它们是:币种集、矿池集,内核集、币种x内核集、矿池x内核集。

三,界定系统的内外

识别系统的内外

这个系列每一篇都很短,主要用于将开源矿工架构和源代码中的每一个值得说明的概念都描述出来,因为开源矿工的源代码上的注释实在太少,不是因为刻意不添加注释而是因为它的源代码组织结构和运行时景象和大部分程序员平时所掌握的不太匹配,添加的注释会让人不知所云。 所以决定先有这个系列,先熟悉一下抽象的大致轮廓再去接触开发就像是带着地图去那里行走不至于迷路,后续会添加注释,添加的注释往往会是一些表地点的名词和表运动的动词往往不是完整的句子。

数据结构

在上一部分我们知道域是地域,是资源组织结构,其实就是空间,就是计算机领域所说的数据结构。在第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系统中说计算机名、物理内存等外部事物的时候它们才是和开源矿工没有关系的外属性。

为什么我们要感知那么多外部世界,因为只要我们感知了所有需要感知的外部事物,就是说只要我们的系统内部具有和所需认知的外部世界的对应关系,这样我们就能更好的适应生存环境,比如我们要支持无盘运行只需摆动开源矿工系统内部的一个参数即可。

转载于:https://www.cnblogs.com/ntminer/p/10966222.html

开源矿工 - 记一个完整的软件是如何开发和运行的相关推荐

  1. 如何构建一个完整的To B应用开发平台

    作者丨荣多君 1前言 互联网时代演进到现在,在 5G 和 IOT 的影响下,整个人类社会实现全产业数字互联的愿景变得逐渐清晰,某个行业通过行业标准的制定,采用同一套标准,甚至同一套软件,通过行业领域能 ...

  2. 一个完整的软件项目开发流程,软件过程,软件生命周期

    一.开发流程图 1.需求分析 结构化分析 面向对象分析 2.原型设计 结构化设计 面向对象设计 3.程序开发 结构化开发 面向对象开发 4.程序测试 二.软件生命周期 软件分析 1.问题定义 确定好要 ...

  3. 一个完整的软件项目开发流程是怎样的呢

    原文链接 个人理解 web开发的基本流程就是,产品经理根据客户(申总)拿出来<需求调研>,产品经理进行<业务梳理>看具体要实现那几个页面,都有那些功能等等,然后产品经理就开始用 ...

  4. python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码

    会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...

  5. 软件设计师--系统开发与运行

    1.数据流图摆脱系统的物理内容,在逻辑上描述系统的功能.输入.输出和数据存储.是系统逻辑模型的重要组成部分 2.数据流图主要由实体.数据存储.处理过程和数据流四部分组成.在顶层数据流图中,将系统描述成 ...

  6. 开源矿工的备用矿池设计与实现

    开源矿工的备用矿池设计与实现 本文基于内核自有的备用矿池功能实现开源矿工的备用矿池,以后可能会脱离具体内核实现备用矿池. 设计和实现备用矿池的功能时充分体现了为什么开源矿工会有10多万行代码. 备用矿 ...

  7. 开源矿工的备用矿池设计与实现 —— 抽象,阅读有难度

    开源矿工的备用矿池设计与实现 本文基于内核自有的备用矿池功能实现开源矿工的备用矿池,以后可能会脱离具体内核实现备用矿池. 设计和实现备用矿池的功能时充分体现了为什么开源矿工会有10多万行代码. 备用矿 ...

  8. python用什么软件编程-python开发用什么编辑器

    工欲善其事必先利其器,估计大部分的pythoner都是从python IDE开始了python之路.有很多的python IDE工具可以用,但是要从中选出一个用着趁手的IDE却是一项艰巨的任务. 你可 ...

  9. 微信UI在线聊天源码 聊天系统PHP采用 PHP 编写的聊天软件,简直就是一个完整的迷你版微信

    介绍: DuckChat 是一套完整的私有即时通讯(instant message)解决方案,含服务器端程序.客户端(含 iOS.Android.PC 等)程序.通过 DuckChat,站点管理员可以 ...

  10. 计算机主机系统构成,一个完整的计算机系统通常是由()构成。A.硬件B.主机C.软件D.操作系统...

    一个完整的计算机系统通常是由()构成.A.硬件B.主机C.软件D.操作系统 更多相关问题 [判断题] 灭火救援业务训练是公安消防部队官兵进行技.战术的训练活动.() [单选] <劳动合同法> ...

最新文章

  1. C#下用P2P技术实现点对点聊天
  2. Web Api单元测试写法
  3. 详解死机的原因和预防方法
  4. 如何正确地从IntelliJ构建jar?
  5. Android之本地数据存储(一):SharedPreferences
  6. linux磁盘分配方案,安装Linux系统磁盘分配方案.doc
  7. android gpuimage显示的缩放和剪裁模式
  8. python 类-Python 变量类型
  9. build FLTK 1.1.7 with gcc 2.95.3 on Fedora7
  10. 图书《图像并行处理技术》简介
  11. sysfs API总结
  12. dcdc芯片效率不高的原因_研学丨燃料电池车的典型效率及能耗
  13. 关于html中利用jQuery选择子节点方法总结——待续
  14. 排序算法专题-冒泡排序
  15. 数据访问组件SqlHelper
  16. [C/C++]Windows下的getch函数实现
  17. 常用APDU指令错误码
  18. Ubuntu 关闭 onboard (屏幕键盘应用)开机自启
  19. 7、Horizon 虚拟桌面登录
  20. タイトル キャッスルファンタジア ~エレンシア戦記~リニューアル 艾伦西亚战记(艾伦希亚战记)日文攻略

热门文章

  1. Java加密压缩文件
  2. 软件开发中的成本意识
  3. Mozilla FireFox 爆JAR URI处理跨站脚本漏洞 可偷窃Google帐户
  4. 配置Nginx——在线生成配置文件
  5. Vue报错: Maximum call stack size exceeded
  6. WebStorm介绍
  7. extern C的思考
  8. c++ Protobuf中set_allocated引起的double free core dump
  9. sap字段及描述底表_SAP各模块字段与表的对应关系.
  10. 未处理sqlexception中value_类 java.sql.SQLException 的使用 (Java Platform SE 6)