理解人造的计算机世界,尝试认识CLR

类型定义表 和 字段定义表
CLR为什么是类型定义表、字段定义表、方法定义表、方法参数表?为什么不把“类型定义表、字段定义表”合并?
可能是因为这样:CLR面向的是两种用户,开发人员和计算机。对于开发人员来说一切都是资源,都是树形的,而对于运行时来说(运动)是需要通路的,是需要联通的,是需要图的。
开发人员算作主体,在主体看来一切空间都是资源,主体的努力都是为了对资源进行合适的分类,朝着有利于支持资源的运动(变化)的方向去分类。
下面是Product类型和Customer类型,这两个分类节点下都有个Name子节点:
public class Product{
public string Name{get;set;}
}

public class Customer{
public string Name{get;set;}
}
这两个类型中的相同类型的Name属性在CLR看来是相同的字符串类型的,但在主体看来不是。
一棵正树 和 一棵倒树
在主体看来,它们一个是产品名称一个是客户名称,在主体看来它们是不同类型的节点,而在运行时看来它们是相同类型的节点。主体沿着正树的方向观察,计算机沿着倒树的方向观察。
在CLR中这个相同类型的Name节点既出现在Product类型节点下又出现在Customer类型节点下,违反了构造定律了吗?违反了树形结构了吗?没有。这些int、string、bool等基本类型是两个世界的分界线,在主体看来这些基本类型是自己看到的树上的叶子节点,然而对于运行时来说它们是靠近根节点的节点(根节点是0 1)。世界有两棵树,一个是正树,一个是倒树,一棵是静态的资源树,一棵是动态的运动树。这些基本类型节点是主体世界和运行时世界的分界线。
构造定律可以用来作为衡量事物是否良好的模型
在主体的角度看去,一切依旧是树形结构,它们一个是产品名称一个是客户名称,依旧没有违反构造定律,一个string下挂20个字节,一个字节下挂8个位,一个位下挂一对0 1,在主体看类,每一个产品名称和客户名称是不同的,产品名称下挂的char[]和客户名称下挂的char[]是不同的,产品名称和客户名称下挂的每一对0 1都是不同的。
但是在运行时看来它们可以是相同的。
所以在运行时可以构建这样的通路:
Product product = new Product(){Name="product1"};
Customer customer = new Customer();
customer.Name = product.Name;// 通路
因为权限引擎是站在用户主体这个角度观察世界的,所以没有字段表,只有Clatalog表。类型表和字段表是合二为一的,它们都是Catalog。

静态资源树(空间)和动态运动树(栈/时间)
程序员使用C代码书写出来的内容是棵树,是棵静态的资源树。这棵树从程序员的角度看是正的,从机器的角度看是倒的。程序员构造一棵资源树,机器通过消耗时间在这棵树上去构建回路从而产生运动。
人们在利用世界的不均
世界是不均匀的,人们是使用不均匀的物质构建的那棵资源树,所以在那棵树上不同的位置的速率是不同的(光速不变,光速永远单位时间穿越等量的空间,是因为空间不均匀,那棵树是用不均匀的空间构建出来的),人们通过打时间差的方式来从这些运动中得到好处(时间已经过去了一万亿年,一万亿年后的状态与我何干。)。
人类分工的两级分层结构
程序员看到的是一棵树,最终用户看到的也是一棵树,但最终用户看到的那棵树和程序员看到的那棵树在细节上往往是有差别的,但是整体上是大致一致的。权限引擎的最终用户应该不仅仅是程序员,所以权限引擎关注于构建一棵在最终用户看来良好的树。除非站在最终用户和计算机之间的程序员有足够的理由,程序员不应偏离最终用户看到的树去实现。
建造者应分神进入复杂的问题空间中去
所有的资源都是场,空间是场,物质是空间的不均匀,是被主体(也是场)可以感知到的变化(场是变化,主体可以感知到与自己的变化率不等的空间)。主体将自己可以认知到的问题的复杂度分作两类:1 比自己复杂,对于这种问题主体应将自己分神进入问题之中去;2 复杂度不高,问题可以被主体轻而易举处理,对于这种问题主体能够站在问题外面解决它而不用分神进入问题中去。
建造者面对的是比自己复杂的问题,需要进入问题空间中去分解问题,使用者面对的是简单的问题空间,无需分神进入问题空间中去。创建者的价值是使用者处理问题时提高的效率。比如对于硬件和IT建造者来说手机是个复杂的问题空间,需要分神进入问题空间中去分解问题,但是对于使用者来说手机只是个玻璃塑料金属的费电的盒子。

Catalog是用来把整个系统中的资源按照树形结构划分出一个个不交差的子集用的。资源是空间,Catalog是对资源进行单元划分,所有的资源是个集合,所有的划分方式会是个幂集。
Catalog的每一个根节点定性了一棵树,不是只有一棵树,而是有很多树,是一片森林。我们的系统是一棵树,我们的系统这棵树只是Catalog森林中的一棵树。这片森林也有根,只是这个根可能不在我们的系统内,这个根在我们的系统外。Catalog上不封顶下不封底,可以认为用户也是Catalog森林中的一棵树,用户树也是个层级结构,但最高的用户必须是人类(如果继续对70亿人划分层级的话,最高级的人必须出自东方,没有理由),在人类之上不容许再有主体。这片Catalog森林的终极根节点到底是什么?是零,是空,是无。
Catalog是空间,这是它的本质。Function是运动定律,Function改变空间,空间的变化是时间。Catalog的意义很深刻,它接近这个世界的本质。一切存在都是Catalog上的节点。银河系是个节点(银河系的父节点不说了),太阳系是个节点,地球是个节点,中国是个节点,北京是个节点,人民大会堂是个节点,大会堂座位的第二排是个节点,第二排左边数第三个桌子是个节点,桌子上的茶杯是个节点,茶杯中的水是个节点,水中的每一个分子是个节点……再往下不说了。上不封顶下不封底。行为是运动,Function用来在树上建立回路从而产生运动。tree是没有任何回路的稳定结构,function不停的在tree的局部建立起回路,运动完成立即又断掉了,建立回路然后断掉,在哪断掉呢?在某个空间地点断掉,连连断断这个过程中tree在变换。叫通路吧。就是物理上说的电路那样的通路。光有通路还是不行的,还需要不等。两边的电压相等的话建立起通路也没有用,运动不了,幸好世界是不等的,世界在不同节点的变化率是不等的,水比土流动的快,土比水在空间上更稳定,从而我们利用这种不等的世界。我们排列这个不等的世界,从有目的的排列中去获得好处。一下子理解不了没有关系,我理解了很久才搞懂了一些,文档写出来的不一定全部正确,一定程度上正确就可以了,大家理解后记得一起去书写它,一起表述它,一起把控它的方向,确保走对路线,面向当前的主体、时间和空间。
[该贴被anycmd于2015-02-26 18:19修改过]