电流式传递
原来设想从底层改造,像函数调用一样,所有算法返回一个值,跟lisp一样。if整体,任何改变触发条件部分,如果条件缓存与上次相同,则不计算(vue的条件语句优化),现在看来有问题。if语句有三块,a\b\c,分别受影响,如果只影响a,则选择b或c的结果,上一次a置为b,这次c受影响,a不受影响。a受影响但返回值跟上次一样,a的缓存结果也不受影响(层层缓存,看来可行)。层层缓存是并列影响,即其中任何一个改变都会造成改变。而if语句则是a真选b的结点,a假选c的结果。如果a上次选的b,而b又发生了改变,if需要同步为b。如果a计算了但没改变,是否会触发使if的缓存重赋值为b?
基于流与缓存值的语言,电流不变就是缓存值,电流改变就是修改缓存值,缓存值修改造成所有观察结点修改。这里需要,值是常不变构造好后便不允许破坏修改,结构体复合结点只是一种字符串的便利表达,因为常不变址传递对空间更优,而且不变跟触发变化时一样,只是说实现上利用了缓存减少CPU计算,但就是在if条件语句——不能做到绝对优化,不知道调了多少次,对调用次数不太关心,所以有react与vue的相似。
有基本的+-*/等函数,没有自定义函数/类?
DOM与动画
而且结合dom事件,dom触发并没改状态。只是单纯调用。于是可分为没参调用与有参调用。有参调用可能还是多参。dom事件是观察者模式,多个观察者接受响应。而vue的computed是视图同步,也可以像react一样,直至做到底层界面刷新。关心某数据受哪些数据影响,并跟随改变,而且是任何一个改变都改变,但if语句——改变发生在上一次未执行的分支,则不改变。与动画有矛盾。dom按钮的点击,当不是boolean的时候,没有状态改变,对调用次数很关心,必须将其转化成副作用的,比如计数缓存或布尔缓存,能随时恢复之前的状态。总之函数调用转化成次数的副作用(或布尔)。
无数个太阳
vue模式就是无数个太阳,computed受关注者的影响,缺点就是单线程,每次都要重新统计。
一个唯一太阳
另一种就是全局只有一个太阳,main函数向后发散影响,多线程,中间的传递常不变,或层层缓存,这种结果是react模式,树的局部副作用,或叶到根副作用重新回收计算。功耗大,但逻辑一致,大对象需要用享元来复用。
在web中,后端一次生成DOM,一个因生成多个结果副作用。但未来要持续交互,因果转承,传统的DOM事件编程。
太阳的核心:构造后不能改变,影响扩展到未来,作为未来结构体的局部引用。临时定义函数延迟影响。其实DOM事件是临时定义函数,影响总要写到什么地方——数据库,又从数据库查询生成局部的太阳——则根源处太阳什么时候回收?内存中总在生成结构体而无销毁?