考虑一种调用风格.
Promise.costly(()->receive())
.transform((packet)-> mmap.transferFrom(packet))
.sidekick(()->logging.info("saved"))
.catching((exception)->logging.error("save fail",exception))
.addListener((channel)->channel.close())
这里大致是对CompletableFutre和guava对ListeningFuture的一些包装.
稍微链式了一下,以及改动了点语义.
大致涵盖的几个data flow是.
一个正常情况下的receive packet -> save -> close.
一个sidekick是在正常receive之后的并行log部分.
一个是receive exception情况下的catching部分.
以及不管是正常还是异常情况下都并行触发的addListener部分.
最终返回的reference的value是跟transform返回的签名一致.
也就是除了transform,其他都是旁路性质.
这点跟completable是不太一样的.
虽然底层实际用的就是completable future.
这么做的原因主要是不想总是try catch.
或者像go一样检查返回值.
而且为了简单,lambda的声明都是带throw的对应的functional的版本.
所以实现上是把最初的exception一路propagate过来的.
这点跟completable/listening都算一致的.
问题主要是这个compute graph的trigger或者说traversal方式.
或者说transform这些callback的调用应该是同步还是异步的问题.
因为底层实际上就是Comp了table future.
所以实际上就是thenApply之类的调用的.
如果同步的话,实现上是会当场back trace的.
也就是当一个这个graph当中的一个stage完结之后会尝试看依赖项目是否也是可以执行.
这里的一个好处就是execution path可能尽可能地总体时间短.
因为基本上算是instant的.
这样的话,几率上来说对cache可能也会有点好处.
但这样的话为什么不直接写成正常的平坦的workflow呢.
而且可以没有那些基本的代价开销.
一个理由可能就是整体流程比较长.
或者存在一些不太确定的blcoking的部分.
所以通过这种人工的方式拆分出time slice.
某种程度上来说跟go的goroutine/chan/syscall调用时候隐切换是类似思路.
通过一种人为的软调度去提高throughput.
但是同时带来的一个问题就是可能latency相对会高一些.
因为是每个execution context的slice都会被切分并在不同的实际被queue或者stack.
所以,即使是说用async的方式处理stage.
但同样地还有是用first in first out还是last in first out的形式.
像Stream API的parallel使用的common pool就是forkjoin pool的last in first out.
这个在某种程度上来说是兼顾througput和latency的一个选择.
毕竟stack的距离可能没有queue的距离来得远,每个切换的数据访问的差异可能相对没那么大.
至少意图上来说,是有一定的cache friendly的.
但是这里同样会有个问题.
比如
LongStream.range(0,regions).paralle()
.mapToObject((region)->file.map(region))
.flatmap((region)->region.pages())
.map((page)->crc.update(page))
.collect()
这类flatmap的stream generation.
可能隐式地来说,会有一个形式上的synchronize point.
因为pipeline的某个节点是generator,而generate的动作可能又是有一定开销的.
比如这里的mmap,基本上手受限于磁盘的.
这样的话forkjoin thread的local queue/stack就应该都是这些相对比较耗时的task.
也就是说,对于其他task来说,除了enqueue/dequeue和queue work load的影响之外.
还收到来自未来的运行时的不预期的一些开销因素.
所以相对来说,LIFO的不确定性比较高.
另外一点就是对于原生Future这类从设计一开始就没有考虑callback的wrap方式.
guava的actor暴露的是一个ListenInPool的选择.
也就是扔到一个你提供的线程池里blocking get,然后再回调.
在实现的时候开始也采用了类似的做法.
类似Promise.costly就是在一个cache thread pool.
而对应的Promise.light才是在一个forkjoin pool里.
一个不太好的情况就是类似之前go的syscall造成的大量thread的问题.
把future listen在一个cache thread pool的问题就是可能某个瞬间产生大量future的话,会意外地尝试非常多的thread.
当然,一个思路就是限制thread数量.
但是引入cache pool的原因就是想避免一些意外bug或者intended的不会返回的future耗尽thread的问题.
折中的办法是先把future queue起来.
然后类似早期go的net poller,定期的poll遍历touch一下.
代价就是有额外的这个poll的delay.
另外一个模仿点就是timeout.
基本上就是select timeout channel的future形式.
scheudle一个delay的future cancle.
可能本质上来说,就是在各种模仿.
毕竟人类.
2019-01-13
2018-12-30
潘达斯奈基
黑镜:潘达斯奈基有几个可能还蛮有意思的剧情点.
不过也可能是因为身处文明古国,并不是接触的实际交互流程导致的错觉.
第一个是明星制作人科林的loop性质以及潜在的上帝视角.
loop的剧情点一个是第一见面对bug的既视感的反应.
一个是主角办公室路演对的不同分支以及明显的wrong choice的提示.
其他一些零零碎碎的包括各种背景录音带和跳楼分支场景.
按照惯常ACG剧情走向基本就是高阶分支脚本的关键线索人物了.
不过在看的版本貌似并没有这方面的过多发展.
这点的另外一个可能有意思的思路就是影片本身的一个概念.
影片的一个主题分支也是宣传的点,即使交互式体验.
或者说上帝视角.
这里就不得不说虽然不是中美合拍,但是概念有点类似的若干年前的一本叫S的书.
该书的一个概念是在一层故事视角上,通过在书里面的两种手写笔迹注解和各页夹杂的各种零碎书签资料来构造第二层虚拟故事.
造成的一种交互体验就是在读第一层故事的时候,由于仿真的第二层手写体造成了跟第二层故事主人同时间的体验.
理念上有点类似弹幕带来的弱时间同场感.
而科林的上帝感来自于,某些口吻完全可以代替正在观影的观众的立场/角度.
但本身又是剧情一个无法完全抽离的角色环节.
所以,这种游离不定感有时候容易让人很难衡量自己是沉浸在哪一层剧情里.
尤其考虑剧中的一个剧中剧背景.
也就是剧中的潘达斯奈基的作者戴维斯.
它的轨迹和主角,或者说主角和它的轨迹其实是类似的.
尤其肢解结局.
精神不稳定,有偏执工作动力,在沉溺平行世界/分支选择之后,抽离不开 .
于是,如果把观众看主角的轨迹,和科林看主角的轨迹,以及主角看戴维斯的轨迹放在一起比较的话.
基本上算是属于同一体验的视角了.
所以在这里反推每一层级对下一层级的看法/做法,以及下一层级对上一层级的反应,就很容易顺延回剧情构造试图表达的目的了.
比如戴维斯纪录片里反复提到的free will的概念.
这个元素相关的还有以前预告片里的PAC的概念以及对应的PAC的类乌托邦分支的传统黑镜剧情套路.
和这个剧情元素有关的另一个疑似梗或者故意留的小技巧伏笔就是PAC剧情里相关的程序carsh的镜头.
这里的error message是function not define.
如果拔高一点的话,这个剧情题材的目的是指向某种社会管制和压力的.
而剧情本身却并没有对这个当初的宣传点做过多的展开.
那么,如果把游戏本身指向为影片,那么undefined function就是指向剧情本身的一个反身的暗喻和揶揄了.
第二个是分支这个概念.
这个概念是影片本身和里面的游戏共有的一个概念.
所以,如果把片中的对游戏的终结评论当作对影片本身的评论来说,也不会有太多的违和感.
这里的态度有几个,一个是差评,一个是好评,一个是话题性议论.
基本上就是所有可能的实际处境了.
这里如果以作者角度来看的话.
可能就比较有意思了.
黑镜这个冠名系列从第一季之后,基本上续集都会遭受或多或少的批评.
因为本身来说,黑镜的剧情套路是很常态的,结局的观感情绪走向观众自己是能预料到的.
这就造成了一种预期偏差带来的失落感.
但是这个系列的另外一个特色就是剧情的合理推演外延.
因此,虽然说可能觉得结局不过如此,但是剧情的推演在设定之下的合理性是没什么太大问题的.
那么从创作者的角度来说,就有一个比较尴尬的立场.
一个是你得从一个显得平常的角度找到一个评记/讽刺点.
然后再构造一个以不太令人游离的设定把这种点戏剧化突出冲突性.
而构造冲突的一般是解决的反转或者出乎意料性.
但是这点在当下来说是比较具有挑战性的.
现在很难想出一个完全出于意料的结局设定.
而如果做不到这点的话,就很容易被认为是流俗.
于是,顺着这个思路,反问一下如果把能想到的戏剧性结局都放在一个片里会怎么样.
届时观众会怎么评价,或者更直白地说如何去批评剧情设定和结局的完美程度.
这是一个有点恶趣味但是也难免稍显无奈的想法.
像这部片的除了剧情之外的其他框架.
比如人物关系,时代,社会设定甚至很多镜头都是完全一致的.
但是按照分支关系来说,把它重新剪接成不同风格的故事也是可以的.
至少本身剧情大纲就有一个可以是传统的反乌托邦剧情,PAC相关的.
一个可以是精神病人的社会压力,来自父亲和医生的不正当处理.
或者结合里面纪录片的对正常人的精神扭曲,吃人社会题材之类的.
这样的话,就会有一种反思.
就是,当一部片是什么题材的时候,决定它的具体是那一部分.
或者是那些关键镜头/场景.
如果能分离出来这些特质,再用这种思路去重新对待以前的批评会怎么样.
这可能是某种私心或者说调戏?
最后是交互方式本身.
这个如果不考虑拍摄成本的话,其实算是一种算法驱动的东西.
像传说中的PornHub对时间线的统计和产品点.
加上坊间传说的Netflix本身的算法驱动的制作都市传说.
把这两个比较玄幻的东西放在一起的话,就是既然你可以说剧情节奏剧本是算法构建的.
那么分支点就算是一个更快速的feedback了.
而且还有另一层就是潜在的UGC的DRM.
考虑可能同一时期的热门选型本身会构成一些列的外延社交互动.
这本身可以作为是内容的一个不可分割的一部分.
这样即使影片本身是可被复制的,但是内容的被消费的实际内涵是有限定的.
关键可能是在于如何制造这种可控的内涵消费.
就像弹幕.
片源可以是谁都能有.
但是用户群和产生的观影感受却可能是unique的.
不过也可能是因为身处文明古国,并不是接触的实际交互流程导致的错觉.
第一个是明星制作人科林的loop性质以及潜在的上帝视角.
loop的剧情点一个是第一见面对bug的既视感的反应.
一个是主角办公室路演对的不同分支以及明显的wrong choice的提示.
其他一些零零碎碎的包括各种背景录音带和跳楼分支场景.
按照惯常ACG剧情走向基本就是高阶分支脚本的关键线索人物了.
不过在看的版本貌似并没有这方面的过多发展.
这点的另外一个可能有意思的思路就是影片本身的一个概念.
影片的一个主题分支也是宣传的点,即使交互式体验.
或者说上帝视角.
这里就不得不说虽然不是中美合拍,但是概念有点类似的若干年前的一本叫S的书.
该书的一个概念是在一层故事视角上,通过在书里面的两种手写笔迹注解和各页夹杂的各种零碎书签资料来构造第二层虚拟故事.
造成的一种交互体验就是在读第一层故事的时候,由于仿真的第二层手写体造成了跟第二层故事主人同时间的体验.
理念上有点类似弹幕带来的弱时间同场感.
而科林的上帝感来自于,某些口吻完全可以代替正在观影的观众的立场/角度.
但本身又是剧情一个无法完全抽离的角色环节.
所以,这种游离不定感有时候容易让人很难衡量自己是沉浸在哪一层剧情里.
尤其考虑剧中的一个剧中剧背景.
也就是剧中的潘达斯奈基的作者戴维斯.
它的轨迹和主角,或者说主角和它的轨迹其实是类似的.
尤其肢解结局.
精神不稳定,有偏执工作动力,在沉溺平行世界/分支选择之后,抽离不开 .
于是,如果把观众看主角的轨迹,和科林看主角的轨迹,以及主角看戴维斯的轨迹放在一起比较的话.
基本上算是属于同一体验的视角了.
所以在这里反推每一层级对下一层级的看法/做法,以及下一层级对上一层级的反应,就很容易顺延回剧情构造试图表达的目的了.
比如戴维斯纪录片里反复提到的free will的概念.
这个元素相关的还有以前预告片里的PAC的概念以及对应的PAC的类乌托邦分支的传统黑镜剧情套路.
和这个剧情元素有关的另一个疑似梗或者故意留的小技巧伏笔就是PAC剧情里相关的程序carsh的镜头.
这里的error message是function not define.
如果拔高一点的话,这个剧情题材的目的是指向某种社会管制和压力的.
而剧情本身却并没有对这个当初的宣传点做过多的展开.
那么,如果把游戏本身指向为影片,那么undefined function就是指向剧情本身的一个反身的暗喻和揶揄了.
第二个是分支这个概念.
这个概念是影片本身和里面的游戏共有的一个概念.
所以,如果把片中的对游戏的终结评论当作对影片本身的评论来说,也不会有太多的违和感.
这里的态度有几个,一个是差评,一个是好评,一个是话题性议论.
基本上就是所有可能的实际处境了.
这里如果以作者角度来看的话.
可能就比较有意思了.
黑镜这个冠名系列从第一季之后,基本上续集都会遭受或多或少的批评.
因为本身来说,黑镜的剧情套路是很常态的,结局的观感情绪走向观众自己是能预料到的.
这就造成了一种预期偏差带来的失落感.
但是这个系列的另外一个特色就是剧情的合理推演外延.
因此,虽然说可能觉得结局不过如此,但是剧情的推演在设定之下的合理性是没什么太大问题的.
那么从创作者的角度来说,就有一个比较尴尬的立场.
一个是你得从一个显得平常的角度找到一个评记/讽刺点.
然后再构造一个以不太令人游离的设定把这种点戏剧化突出冲突性.
而构造冲突的一般是解决的反转或者出乎意料性.
但是这点在当下来说是比较具有挑战性的.
现在很难想出一个完全出于意料的结局设定.
而如果做不到这点的话,就很容易被认为是流俗.
于是,顺着这个思路,反问一下如果把能想到的戏剧性结局都放在一个片里会怎么样.
届时观众会怎么评价,或者更直白地说如何去批评剧情设定和结局的完美程度.
这是一个有点恶趣味但是也难免稍显无奈的想法.
像这部片的除了剧情之外的其他框架.
比如人物关系,时代,社会设定甚至很多镜头都是完全一致的.
但是按照分支关系来说,把它重新剪接成不同风格的故事也是可以的.
至少本身剧情大纲就有一个可以是传统的反乌托邦剧情,PAC相关的.
一个可以是精神病人的社会压力,来自父亲和医生的不正当处理.
或者结合里面纪录片的对正常人的精神扭曲,吃人社会题材之类的.
这样的话,就会有一种反思.
就是,当一部片是什么题材的时候,决定它的具体是那一部分.
或者是那些关键镜头/场景.
如果能分离出来这些特质,再用这种思路去重新对待以前的批评会怎么样.
这可能是某种私心或者说调戏?
最后是交互方式本身.
这个如果不考虑拍摄成本的话,其实算是一种算法驱动的东西.
像传说中的PornHub对时间线的统计和产品点.
加上坊间传说的Netflix本身的算法驱动的制作都市传说.
把这两个比较玄幻的东西放在一起的话,就是既然你可以说剧情节奏剧本是算法构建的.
那么分支点就算是一个更快速的feedback了.
而且还有另一层就是潜在的UGC的DRM.
考虑可能同一时期的热门选型本身会构成一些列的外延社交互动.
这本身可以作为是内容的一个不可分割的一部分.
这样即使影片本身是可被复制的,但是内容的被消费的实际内涵是有限定的.
关键可能是在于如何制造这种可控的内涵消费.
就像弹幕.
片源可以是谁都能有.
但是用户群和产生的观影感受却可能是unique的.
2018-10-09
由一个基本逻辑谈起
一个定义.
A=>B := !A||B .
考虑给定A=>C,C=>B.
如何得出A=>B.
即
(A=>C)&&(C=>B) => (A=>B)
因为(A=>C) => (!A || C)
(C=>B) => (!C || B)
那么,当C := true的时候
(A=>C)&&(C=>B) => (!A||C) && (!C||B)
->
(A=>C)&&(C=>B) => B --- F.1A
当C := false的时候,类似地.
(A=>C)&&(C=>B) => !A --- F.1B
于是,不管C取值为何,则有
(A=>C)&&(C=>B) => !A || B
->
(A=>C)&&(C=>B) => (A=>B) --- F.2
这里有几个有意思的地方.
F.1A/1B是通过带入归纳出来的.
那么,用X_1,X_2,...X_N分别表示上面的A,B,C.
考虑有这么一个代数空间S,是由
X_N和诸如=>,&&,||等算子构成的.
把S考虑为一个有向图的话.
则诸如A=>C)&&(C=>B) => (A=>B)
就可以看作是这个S当中的某两个vertext/代数表示存在edge.
那么一个代数系统就是这个S的一个有向联通的子集.
在这个视角下考虑F.2的意义.
F.2并不是经过某个有向图的基础/基本替换/变换得到的.
也就是,在原有的图基础上,这两点本来是不直接关联的.
是穷举归纳使得这两点产生了一种直接联系.
或者这么考虑.
(!A||C) && (!C||B) 实际上是
(!A||true) && (false||B)
和
(!A||false) && (true||B)
的两条有向路径.
它们存在一个共同的交点(!A||B).
那么换个思路考虑值代入的形式.
即是.
(!A||C)&&(!C||B)有50%的概率走P1路径.
另外50%的路径走P2路径.
而P1 P2的延展方向上存在一个共同vertxt (!A||B).
扩展一下的话.
就是对于一个f(x_n...,c).
c值服从某种分布.
可能存在一个变换是
f(x_n...,c) => g(x_n...)
或者更一般地.
f(x_n...) => g(x_m...)
其中x_m \subseteq x_n.
也就是说,一组高维向量可能存在一个较低维度的向量的代数演算系统描述.
其实就是一组高维描述向低维的投影变换.
考虑神经网络的分类.
看作是feature先高维化,然后低维投影到一个演算系统区域的过程.
如果它是准确的.
那么说明feature张成的有效维度应该是>=m的.
而实际上对于一个特定问题,m其实是未知或者说无从可知的.
对于张成的维度来说,就有几种结果.
大于等于和小于.
大于等于是没什么问题的.
小于的话,则肯定是有缺陷的.
因为如若不是的话,那么原问题的多余维度就是无意义的.
那么,如何确保或者知道张成维度是不是满足呢?
考虑f(x_n...) => g(x_m...)成立的条件并不在于m维的具体取值.
因为本来做的就是拟合/推测/推导一个代数系统.
它成立的核心在于额外的n-m维度的充分概率描述.
也就是c的准确的取值概率分布.
或者说,对于特定的x_m来说,x_{n-m}是充分穷举的.
就像前面例子的C的代入归纳一样.
如果存在一个这样的代数变换的话,那么对于C的穷举路径之间就必然会有一个交点.
C的取值越充分,那么这个交点的准确性就越高.
相对地,如果在做张成维度的时候,如果x_{n-m}各个维度的可取值越多的话.
那么计算可能就越复杂.
因为需要归纳搜索的路径就越多.
这么想的话,如果把每一层网络的非线性变换局限在二值分类上面,可能更容易有相对合理的可解释的结果?
A=>B := !A||B .
考虑给定A=>C,C=>B.
如何得出A=>B.
即
(A=>C)&&(C=>B) => (A=>B)
因为(A=>C) => (!A || C)
(C=>B) => (!C || B)
那么,当C := true的时候
(A=>C)&&(C=>B) => (!A||C) && (!C||B)
->
(A=>C)&&(C=>B) => B --- F.1A
当C := false的时候,类似地.
(A=>C)&&(C=>B) => !A --- F.1B
于是,不管C取值为何,则有
(A=>C)&&(C=>B) => !A || B
->
(A=>C)&&(C=>B) => (A=>B) --- F.2
这里有几个有意思的地方.
F.1A/1B是通过带入归纳出来的.
那么,用X_1,X_2,...X_N分别表示上面的A,B,C.
考虑有这么一个代数空间S,是由
X_N和诸如=>,&&,||等算子构成的.
把S考虑为一个有向图的话.
则诸如A=>C)&&(C=>B) => (A=>B)
就可以看作是这个S当中的某两个vertext/代数表示存在edge.
那么一个代数系统就是这个S的一个有向联通的子集.
在这个视角下考虑F.2的意义.
F.2并不是经过某个有向图的基础/基本替换/变换得到的.
也就是,在原有的图基础上,这两点本来是不直接关联的.
是穷举归纳使得这两点产生了一种直接联系.
或者这么考虑.
(!A||C) && (!C||B) 实际上是
(!A||true) && (false||B)
和
(!A||false) && (true||B)
的两条有向路径.
它们存在一个共同的交点(!A||B).
那么换个思路考虑值代入的形式.
即是.
(!A||C)&&(!C||B)有50%的概率走P1路径.
另外50%的路径走P2路径.
而P1 P2的延展方向上存在一个共同vertxt (!A||B).
扩展一下的话.
就是对于一个f(x_n...,c).
c值服从某种分布.
可能存在一个变换是
f(x_n...,c) => g(x_n...)
或者更一般地.
f(x_n...) => g(x_m...)
其中x_m \subseteq x_n.
也就是说,一组高维向量可能存在一个较低维度的向量的代数演算系统描述.
其实就是一组高维描述向低维的投影变换.
考虑神经网络的分类.
看作是feature先高维化,然后低维投影到一个演算系统区域的过程.
如果它是准确的.
那么说明feature张成的有效维度应该是>=m的.
而实际上对于一个特定问题,m其实是未知或者说无从可知的.
对于张成的维度来说,就有几种结果.
大于等于和小于.
大于等于是没什么问题的.
小于的话,则肯定是有缺陷的.
因为如若不是的话,那么原问题的多余维度就是无意义的.
那么,如何确保或者知道张成维度是不是满足呢?
考虑f(x_n...) => g(x_m...)成立的条件并不在于m维的具体取值.
因为本来做的就是拟合/推测/推导一个代数系统.
它成立的核心在于额外的n-m维度的充分概率描述.
也就是c的准确的取值概率分布.
或者说,对于特定的x_m来说,x_{n-m}是充分穷举的.
就像前面例子的C的代入归纳一样.
如果存在一个这样的代数变换的话,那么对于C的穷举路径之间就必然会有一个交点.
C的取值越充分,那么这个交点的准确性就越高.
相对地,如果在做张成维度的时候,如果x_{n-m}各个维度的可取值越多的话.
那么计算可能就越复杂.
因为需要归纳搜索的路径就越多.
这么想的话,如果把每一层网络的非线性变换局限在二值分类上面,可能更容易有相对合理的可解释的结果?
2018-10-04
奇点
考虑下最低工资标准.
如果把它定义为一个劳动者所能生存的最低收入水平的话.
那么对应地,一定程度上就等价于基本的物资价格水平.
因为如果不是的话,一旦工资水平高于affordable的话.
那么劳动者就有动力购买高于基本生活水准的东西.
或者对与同一物品的价格有较高的价格容忍度.
前者是很多最低工资标准理论所设想的.
在有了充余之后,会把剩余作为一种资深投资,用于比如再教育或者技能培训之类的.
因此这些理论的立足点是,最低工资的必要性有助于提神整体生产力水平.
这个观点是否有效正确先不管.
看第二种情况.
也就是对于物价容忍度的提神.
假设原来的最低工资标准是w1.
此时对应的某物品的消费水平价格是p1.
它是此时的供应s1和需求水平d1的均衡值.
那么,当最低工资标准从w1提升到w2之后.
就相应的会有d2>d1.
在s1不变的情况下,就会推动均衡点使得新的p2>p1.
也就是价格水平的上涨.
因为最低工资标准锚定的一揽子商品对应的应该是基本的生存消费品.
因此,这个价格水平的上升的一个合理外推就是基本物价水平的上升.
也就是通俗意义上的价格通胀.
先不考虑w2-w1的差额补偿delta的来源是什么.
价格水平上涨带来的就是账面利润的提升.
相应的乘数效应和上下游产业链关系的话.
就有可能是整体经济的盈余状况的提升.
用凯恩斯的角度来说,就是一个不依靠信贷扩张实现的消费拉动生产关系.
也就是说,是一个非利率传导的货币流动性策略效果.
但是这里没有考虑差额补偿dealt的来源问题.
它可能是直接来源于生产成本的提升.
也就是对应的最低工资的直接薪资成本.
在这种情况下,跟前面论述的过程恰好是相反的.
因为实际的是利润水平的降低带来的负传导作用.
但也可以不是.
因为这里存在一个隐性的比例关系.
或者说一个比较复杂的代偿关系图.
虽然工资成本是由企业承担,但这里并没有限制企业不能也是补偿对象.
所以,如果企业这部分负担成本也能转嫁出去的话,那么理论上来说还是有可能是正向反馈的.
比如政府的直接负担,或者以收税手段减扣等作为转移支付.
在进入税收范畴之后,就相对简单地变为一个项目转移的问题.
最简单的比如从高额收入税中提取转移到最低工资标准的浮动.
这里是存在一个可解可能的比例换算关系的.
所以,最低工资标准的提升是有可能在不触及利率的情况下,对消费生产作出影响的.
那么,它会不会倒逼利率,甚至说让利率手段失效呢?
凯恩斯框架内,消费拉动生产的利率表现是宽松信贷.
也就是低利率.
于是,如果央行的目的是反向的信贷紧缩,比如加息的话会怎样.
加息的直接影响是融资成本的上升.
隐含的是资本回报率的期望值也会上升.
这个最低工作标准的正反馈情况并不冲突.
形式上来说,是一个加息加减税的操作.
而实际上来说,也不一定是减税.
因为它可能只是一个项目到另外一个项目的计算腾挪.
总和可能并没有变化.
改变的只是分配方式.
而反观货币宽松策略的话.
本质上来说,是通过对一个等式做的借项放大.
相当于给一个博弈策略的总和修改增加了一个所谓的外部附加价值.
也就是从类似amplify(x) -> amplify(x+delta)的概念偷换.
它理论上是可以不改变当前的经济流向形态,而只是单纯增加之间的flow的强度的.
尽管实际上,因为各个节点的临界值的不同可能会产生不同形态的重构.
好的表现就是新技术新产业的形成.
坏的方面也自然就是新技术新产业的奔溃造成的不稳定图的奔溃.
有点类似neural network propagate.
税收表的重分配的话.
更像是古典的fine tune/handcraft的外科手术式操作.
当然,理解成一个policy/reward过程也不是不可以.
所不同的是,形式上来说相对可控.
因为从税收角度来看的话,这个图的一个特点是.
基本上所有节点都会跟政府这个节点有直接连接.
或者可以建立直接连接.
也就是说,对于任意的其他两个节点,都可以通过这个超级节点做一个代偿均衡.
从而在总量不变的情况下,做某种形式的协调/和谐博弈.
当然,如果最低工资标准提神带来的代偿不是通过税收/或者政府来做的.
那事情可能就更有趣一些.
因为像有些行业,因为自身的特殊性,可能涉及的客户和上下游产业并不比一个政府来得狭窄.
在形态上来说,如果把政府/央行架构下的经济图看成一个完整的图的话.
那么这些行业甚至于行业内的某个巨头自身的架构就是一个相对庞大的子图.
在这个子图里,代偿均衡一样是可以成立的.
但是当把这个局部均衡放回全图看的话,就不一定是期望的那样.
一个例子就是所谓的fake news的影响.
这是一种蛮有趣的变化或者说趋势.
因为它跟传统的分权,或者民主代表制度有相似的地方.
但维度上却不太一样.
它不再是一个简单的一维的政治代表意见.
实际上来说,它更像是一种反复.
因为原本的代议制解决的问题就是为了把多方多层次的不同利益先聚合成一个逻辑主体再往上合并归溯的.
而现在因为信息流通的便利性和多样性,每个人都能直接或者间接地发表或者接收各种意见.
于是对于同一个事件就会有各种不同形式的隐含上下文指向.
在这种情况下的投票就变成了,每个单个个体的黑盒或者说bias的决策过程了.
一个简单的理解就是说,两个人对于同一选项的相同投票表态并不一定具有相同的上下文指向.
甚至于可能是可以允许互相冲突的.
于是,实际上的这种集体决策就是无意义的.
因为互相并不能确定各自的利益诉求是否一致.
是一个相对来说,无序的过程.
反过来说,这里就存在一个比较有趣的思路了.
因为作为一个特定行业特定领域的信息产生方.
对于接收方来说,就是拥有一种隐性上下文的植入能力.
这样的话,对于公司c来说.
就存在一种植入或者说影响方式.
f(h(x)) -> vote的变换.
其中h(x)是对于外部来说,并不一定可见的黑盒或者隐性上下文约束/植入.
一个例子就是一些热门事件里较早期出现的热门观点.
作为一个个体,可能很难对一个既成的主流挂念作出拒绝表示.
尽管这个主流观点不一定是honest的.
所以这就是一些现在很难以用一个词确切形容的事的感受.
或者说interesting?
因为这可能是一个古怪而又多层次的社会秩序/文化道德重组的时间点.
尤其有些东西,可能并不是不能技术上解决.
而是在纠结应该不应该这么解决.
以及不管怎么解决,所带来的社会成本的冲击.
还有来自离经叛道者的无法忽视的参与.
如果把它定义为一个劳动者所能生存的最低收入水平的话.
那么对应地,一定程度上就等价于基本的物资价格水平.
因为如果不是的话,一旦工资水平高于affordable的话.
那么劳动者就有动力购买高于基本生活水准的东西.
或者对与同一物品的价格有较高的价格容忍度.
前者是很多最低工资标准理论所设想的.
在有了充余之后,会把剩余作为一种资深投资,用于比如再教育或者技能培训之类的.
因此这些理论的立足点是,最低工资的必要性有助于提神整体生产力水平.
这个观点是否有效正确先不管.
看第二种情况.
也就是对于物价容忍度的提神.
假设原来的最低工资标准是w1.
此时对应的某物品的消费水平价格是p1.
它是此时的供应s1和需求水平d1的均衡值.
那么,当最低工资标准从w1提升到w2之后.
就相应的会有d2>d1.
在s1不变的情况下,就会推动均衡点使得新的p2>p1.
也就是价格水平的上涨.
因为最低工资标准锚定的一揽子商品对应的应该是基本的生存消费品.
因此,这个价格水平的上升的一个合理外推就是基本物价水平的上升.
也就是通俗意义上的价格通胀.
先不考虑w2-w1的差额补偿delta的来源是什么.
价格水平上涨带来的就是账面利润的提升.
相应的乘数效应和上下游产业链关系的话.
就有可能是整体经济的盈余状况的提升.
用凯恩斯的角度来说,就是一个不依靠信贷扩张实现的消费拉动生产关系.
也就是说,是一个非利率传导的货币流动性策略效果.
但是这里没有考虑差额补偿dealt的来源问题.
它可能是直接来源于生产成本的提升.
也就是对应的最低工资的直接薪资成本.
在这种情况下,跟前面论述的过程恰好是相反的.
因为实际的是利润水平的降低带来的负传导作用.
但也可以不是.
因为这里存在一个隐性的比例关系.
或者说一个比较复杂的代偿关系图.
虽然工资成本是由企业承担,但这里并没有限制企业不能也是补偿对象.
所以,如果企业这部分负担成本也能转嫁出去的话,那么理论上来说还是有可能是正向反馈的.
比如政府的直接负担,或者以收税手段减扣等作为转移支付.
在进入税收范畴之后,就相对简单地变为一个项目转移的问题.
最简单的比如从高额收入税中提取转移到最低工资标准的浮动.
这里是存在一个可解可能的比例换算关系的.
所以,最低工资标准的提升是有可能在不触及利率的情况下,对消费生产作出影响的.
那么,它会不会倒逼利率,甚至说让利率手段失效呢?
凯恩斯框架内,消费拉动生产的利率表现是宽松信贷.
也就是低利率.
于是,如果央行的目的是反向的信贷紧缩,比如加息的话会怎样.
加息的直接影响是融资成本的上升.
隐含的是资本回报率的期望值也会上升.
这个最低工作标准的正反馈情况并不冲突.
形式上来说,是一个加息加减税的操作.
而实际上来说,也不一定是减税.
因为它可能只是一个项目到另外一个项目的计算腾挪.
总和可能并没有变化.
改变的只是分配方式.
而反观货币宽松策略的话.
本质上来说,是通过对一个等式做的借项放大.
相当于给一个博弈策略的总和修改增加了一个所谓的外部附加价值.
也就是从类似amplify(x) -> amplify(x+delta)的概念偷换.
它理论上是可以不改变当前的经济流向形态,而只是单纯增加之间的flow的强度的.
尽管实际上,因为各个节点的临界值的不同可能会产生不同形态的重构.
好的表现就是新技术新产业的形成.
坏的方面也自然就是新技术新产业的奔溃造成的不稳定图的奔溃.
有点类似neural network propagate.
税收表的重分配的话.
更像是古典的fine tune/handcraft的外科手术式操作.
当然,理解成一个policy/reward过程也不是不可以.
所不同的是,形式上来说相对可控.
因为从税收角度来看的话,这个图的一个特点是.
基本上所有节点都会跟政府这个节点有直接连接.
或者可以建立直接连接.
也就是说,对于任意的其他两个节点,都可以通过这个超级节点做一个代偿均衡.
从而在总量不变的情况下,做某种形式的协调/和谐博弈.
当然,如果最低工资标准提神带来的代偿不是通过税收/或者政府来做的.
那事情可能就更有趣一些.
因为像有些行业,因为自身的特殊性,可能涉及的客户和上下游产业并不比一个政府来得狭窄.
在形态上来说,如果把政府/央行架构下的经济图看成一个完整的图的话.
那么这些行业甚至于行业内的某个巨头自身的架构就是一个相对庞大的子图.
在这个子图里,代偿均衡一样是可以成立的.
但是当把这个局部均衡放回全图看的话,就不一定是期望的那样.
一个例子就是所谓的fake news的影响.
这是一种蛮有趣的变化或者说趋势.
因为它跟传统的分权,或者民主代表制度有相似的地方.
但维度上却不太一样.
它不再是一个简单的一维的政治代表意见.
实际上来说,它更像是一种反复.
因为原本的代议制解决的问题就是为了把多方多层次的不同利益先聚合成一个逻辑主体再往上合并归溯的.
而现在因为信息流通的便利性和多样性,每个人都能直接或者间接地发表或者接收各种意见.
于是对于同一个事件就会有各种不同形式的隐含上下文指向.
在这种情况下的投票就变成了,每个单个个体的黑盒或者说bias的决策过程了.
一个简单的理解就是说,两个人对于同一选项的相同投票表态并不一定具有相同的上下文指向.
甚至于可能是可以允许互相冲突的.
于是,实际上的这种集体决策就是无意义的.
因为互相并不能确定各自的利益诉求是否一致.
是一个相对来说,无序的过程.
反过来说,这里就存在一个比较有趣的思路了.
因为作为一个特定行业特定领域的信息产生方.
对于接收方来说,就是拥有一种隐性上下文的植入能力.
这样的话,对于公司c来说.
就存在一种植入或者说影响方式.
f(h(x)) -> vote的变换.
其中h(x)是对于外部来说,并不一定可见的黑盒或者隐性上下文约束/植入.
一个例子就是一些热门事件里较早期出现的热门观点.
作为一个个体,可能很难对一个既成的主流挂念作出拒绝表示.
尽管这个主流观点不一定是honest的.
所以这就是一些现在很难以用一个词确切形容的事的感受.
或者说interesting?
因为这可能是一个古怪而又多层次的社会秩序/文化道德重组的时间点.
尤其有些东西,可能并不是不能技术上解决.
而是在纠结应该不应该这么解决.
以及不管怎么解决,所带来的社会成本的冲击.
还有来自离经叛道者的无法忽视的参与.
2018-09-09
垄断与溢价平价
考虑一个扩张市场.
采用的是价格倾销策略.
那么,无论最后剩下来的是谁,结论都没什么太大区别.
因为这隐含的条件就是,低价策略可行.
引申的意义就是,只要有合适资本支持,同样策略可以达到同样的效果.
反过来也就是说,作为一个临时的寡头.
在不改变策略的前提下,最优的做法就是方式别人用同样的倾销方式获取市场.
而这个对于一个既定的垄断企业来说,并不算一件难事.
从体量上来说,垄断结构越完整,市场覆盖面越大,后来挑战者的门槛就越高.
也就越不可能出现竞争对手.
这是一个近乎完美的闭环策略.
但这里又一个隐含假设.
就是消费是价格敏感的.
也就是说,这里假定的是,后来进入者必须在价格上面相对于垄断者有优势才具有存活性.
这里的价格包括两部分,一个是字面的价格,一个是依存在里面的成本.
垄断企业除了在定价权上面有着优势之外.
额外地可能更具具体结构形态的不同在成本规模上也相较于后来者具有优势.
所以纯粹的价格站是利率率或者说现金流持续性周期的比拼.
但这是基于价格preference的假定.
当消费者把价格因素抛弃之后.
垄断依靠的一些计算基本就无效化了.
形式上来说,价格优先的垄断形态计价是
price = cost + profit
而依靠低价策略的话.
price = cost + profit - discount.
也就是说,在扩张期依靠的是一些潜在的折价销售获得的交易成立可能性.
在建立垄断结构之后的话,因为有了定价权重新变成
price = cost + profit.
这里如果把市场前期的低价策略和后期的主权定价结合在一起考虑的话.
形式上上来说就相当于在倾销阶段,消费者除了票面的价值支付之外,额外地附带了一个类期权概念.
或者说债务.
也就是
price + debt = cost + profit - discount
->
price = cost + profit - discount + option.
形式上的,后期的垄断额外收益来源于早期低价策略的一个期权/信用偿还.
类似于信用卡或者说各种白条的隐性负债/增值条款.
然后以life time value的形式拉长看这个等式.
左侧price就是消费者的支付价格.
右侧则是对应的交易平价成本.
那么价格倾形式的垄断就相当于 discount远远小于option或者说option远远大于discount的情况.
这样话就相当于
price = cost + profit + option, discount << option 但从general的形式来说,这个等式的存在并不强求discout << option. 也就是从形态上来说,是允许存在一个较低的price平价取值的. 即存在 price_x = cost + profit - discount_x + option_x < cost + profit - discount + option. ->
option_x - discount_x < option - discount ~>
option_x < option_y 但这样显得不是很rational. 或者它让目标函数变得有些诡异/不可解释. 因为不再是简单的minimize/maximize了. 在实际,对于一个交易如果不是纯粹的价格优先. 或者说愿意给出一定溢价的,通常对接的可能是产品形象服务或者其他什么. 当然也有可能是一些强买强卖或者信息不对称产生的被动溢价. 于是稍微修改一下平衡条件. price + premium = cost + profit - discount + option + goodwill. ->
price = cost + profit - discount + option + goodwill - premium
假定对于一个给定的商品而已,内在的价值和利润是固定的.
则可以简单表述为
price-cost-profit = - discount + option + goodwill - premium
->
revenue = - discount + option + goodwill - premium
这里revenue和profit的解释性区分在于,而profit是一种在给定条件下的合理/理性/基本利润空间.
于是revenue就是消费者额外的被动利润贡献/支出.
从消费者的立场而言,理性的平价关系是这个时候revenue=0
即对于一个商品支付了内在价值和合理的对于商家的利润之外,不再需要支付其他.
于是有
0 = - discount + option + goodwill - premium
再考虑商家采取的不是价格倾销等通过复杂价格的策略的话.
则有折价和垄断行权为零
即discount =0,option = 0
->
0 = goodwill - premium
->
premium = goodwill.
也就是商誉和支付溢价等值.
这个解的现实解释就是,用户愿意支付的溢价跟商家的"商誉"相关.
也就是在一个市场竞争的交易配对当中,如果允许交易存在溢价.
或者说在形式化计算的过程中,加入溢价平衡项,使得其符合经典的纯粹理性市场形态的话.
单纯的价格策略并不会直接导致垄断的形成.
换句话说,垄断的形成与否,多多少少跟个人的交易形态和信仰有关.
价格优先的自然会按照价格优先的范式计算结果.
就好比说雪崩的时候没有一片雪花是无辜.
采用的是价格倾销策略.
那么,无论最后剩下来的是谁,结论都没什么太大区别.
因为这隐含的条件就是,低价策略可行.
引申的意义就是,只要有合适资本支持,同样策略可以达到同样的效果.
反过来也就是说,作为一个临时的寡头.
在不改变策略的前提下,最优的做法就是方式别人用同样的倾销方式获取市场.
而这个对于一个既定的垄断企业来说,并不算一件难事.
从体量上来说,垄断结构越完整,市场覆盖面越大,后来挑战者的门槛就越高.
也就越不可能出现竞争对手.
这是一个近乎完美的闭环策略.
但这里又一个隐含假设.
就是消费是价格敏感的.
也就是说,这里假定的是,后来进入者必须在价格上面相对于垄断者有优势才具有存活性.
这里的价格包括两部分,一个是字面的价格,一个是依存在里面的成本.
垄断企业除了在定价权上面有着优势之外.
额外地可能更具具体结构形态的不同在成本规模上也相较于后来者具有优势.
所以纯粹的价格站是利率率或者说现金流持续性周期的比拼.
但这是基于价格preference的假定.
当消费者把价格因素抛弃之后.
垄断依靠的一些计算基本就无效化了.
形式上来说,价格优先的垄断形态计价是
price = cost + profit
而依靠低价策略的话.
price = cost + profit - discount.
也就是说,在扩张期依靠的是一些潜在的折价销售获得的交易成立可能性.
在建立垄断结构之后的话,因为有了定价权重新变成
price = cost + profit.
这里如果把市场前期的低价策略和后期的主权定价结合在一起考虑的话.
形式上上来说就相当于在倾销阶段,消费者除了票面的价值支付之外,额外地附带了一个类期权概念.
或者说债务.
也就是
price + debt = cost + profit - discount
->
price = cost + profit - discount + option.
形式上的,后期的垄断额外收益来源于早期低价策略的一个期权/信用偿还.
类似于信用卡或者说各种白条的隐性负债/增值条款.
然后以life time value的形式拉长看这个等式.
左侧price就是消费者的支付价格.
右侧则是对应的交易平价成本.
那么价格倾形式的垄断就相当于 discount远远小于option或者说option远远大于discount的情况.
这样话就相当于
price = cost + profit + option, discount << option 但从general的形式来说,这个等式的存在并不强求discout << option. 也就是从形态上来说,是允许存在一个较低的price平价取值的. 即存在 price_x = cost + profit - discount_x + option_x < cost + profit - discount + option. ->
option_x - discount_x < option - discount ~>
option_x < option_y 但这样显得不是很rational. 或者它让目标函数变得有些诡异/不可解释. 因为不再是简单的minimize/maximize了. 在实际,对于一个交易如果不是纯粹的价格优先. 或者说愿意给出一定溢价的,通常对接的可能是产品形象服务或者其他什么. 当然也有可能是一些强买强卖或者信息不对称产生的被动溢价. 于是稍微修改一下平衡条件. price + premium = cost + profit - discount + option + goodwill. ->
price = cost + profit - discount + option + goodwill - premium
假定对于一个给定的商品而已,内在的价值和利润是固定的.
则可以简单表述为
price-cost-profit = - discount + option + goodwill - premium
->
revenue = - discount + option + goodwill - premium
这里revenue和profit的解释性区分在于,而profit是一种在给定条件下的合理/理性/基本利润空间.
于是revenue就是消费者额外的被动利润贡献/支出.
从消费者的立场而言,理性的平价关系是这个时候revenue=0
即对于一个商品支付了内在价值和合理的对于商家的利润之外,不再需要支付其他.
于是有
0 = - discount + option + goodwill - premium
再考虑商家采取的不是价格倾销等通过复杂价格的策略的话.
则有折价和垄断行权为零
即discount =0,option = 0
->
0 = goodwill - premium
->
premium = goodwill.
也就是商誉和支付溢价等值.
这个解的现实解释就是,用户愿意支付的溢价跟商家的"商誉"相关.
也就是在一个市场竞争的交易配对当中,如果允许交易存在溢价.
或者说在形式化计算的过程中,加入溢价平衡项,使得其符合经典的纯粹理性市场形态的话.
单纯的价格策略并不会直接导致垄断的形成.
换句话说,垄断的形成与否,多多少少跟个人的交易形态和信仰有关.
价格优先的自然会按照价格优先的范式计算结果.
就好比说雪崩的时候没有一片雪花是无辜.
2018-08-12
税制相关
下雨没事,就简单画了下个税的一些曲线关系图.
本来预期会是一个带衰减抑制形态的曲线的.
类似sigmoid或者其他一些log/e指数形态.
但实际拉长之后还是一条相当平滑的直线.
即使考虑各个征收区段的不连续关系的话,总体还是很平滑的.
从图形上来说只是简单地把梯度降低了而已.
本质上还是一个准线性的关系.
然后是看了下收入没增长1%对应的实际增长会是多少.
拉下来的话,幅度不会超过千分之2,而且对于20w左右之后的,反而有一个比较明显的回升.
即超过20w之后,实际的每1%增长幅度更接近与1%.
这个应该说是跟设计初衷背离的.
因为个税的目的应该是一种类平均性策略.
保障社会总体的收入在一个可比的平坦区间内.
所以形态上来说,应该是收入越高,衰减越厉害.
一阶二阶应该都是有这种抑制作用.
马太效应的一个核心点就在于资源丰富程度造成的可用手段多寡的区别.
一个比较陡峭或者说跨度比较大的收入水平分布的话,就更容易造成可用工具的区分和隔离性.
从而进一步地巩固这种分布形态.
因为工具本身也是有一定供需关系的.
如果层级越多,每个阶层能变动的方式就越多.
而反过来,只要有任何一个上升变化途径阻塞或者出现供需矛盾的话.
整个层级流向就可能割裂了.
因此对于这个优化函数来说,目标应该是保障曲线分布的平坦性/flat.
另外一个是应税金额的抵扣项.
就个税来说五险一金是在抵扣项目当中的.
而五险一金的性质是一种公共保险/储蓄.
是一种某种形态的社会共同基金.
名义上来说,这个都是归属于个人财产收入的.
所以理论上来说,在重个税的前提下,通过这类公共基金提供的合法避税项目做一些定向诱导是可行的.
因为名义上来说,它能减少个人因为所得税而造成的税务支持.
只不过以另外一个明目存在在社会共同基金下面.
而这个共同基金不考虑实际政策和规约管束的话,形式上就是另外一种国家融资手段.
面向的是全体社会成员.
它跟直接税收的区别在于,税收是一种某种形态的服务管理支出.
而抵税项目更像是一种贴现借款.
不仅不是一种支出,而是一个有息投资.
实际中的问题一是回报率.
二是赎回限制.
一的本质还是因为的二的流动性约束.
二存在的原因应该是为了减少形成一种逃税通道.
所以需要有锁定期和赎回条件约束.
这个可能可以以罚息或者其他更直接的数值手段去规避掉这类规则漏洞.
然后剩下的就是基金本身的收益率市场竞争性了.
这么看的话,现代税收可能更像一种主动的价格歧视策略.
目的定位可能不是直接的无偿征收和统一管理分配.
而是一个市场化的投资投票方式.
通过给定的避税渠道间接选择社会分配发展方式的一种形式.
本来预期会是一个带衰减抑制形态的曲线的.
类似sigmoid或者其他一些log/e指数形态.
但实际拉长之后还是一条相当平滑的直线.
即使考虑各个征收区段的不连续关系的话,总体还是很平滑的.
从图形上来说只是简单地把梯度降低了而已.
本质上还是一个准线性的关系.
然后是看了下收入没增长1%对应的实际增长会是多少.
拉下来的话,幅度不会超过千分之2,而且对于20w左右之后的,反而有一个比较明显的回升.
即超过20w之后,实际的每1%增长幅度更接近与1%.
这个应该说是跟设计初衷背离的.
因为个税的目的应该是一种类平均性策略.
保障社会总体的收入在一个可比的平坦区间内.
所以形态上来说,应该是收入越高,衰减越厉害.
一阶二阶应该都是有这种抑制作用.
马太效应的一个核心点就在于资源丰富程度造成的可用手段多寡的区别.
一个比较陡峭或者说跨度比较大的收入水平分布的话,就更容易造成可用工具的区分和隔离性.
从而进一步地巩固这种分布形态.
因为工具本身也是有一定供需关系的.
如果层级越多,每个阶层能变动的方式就越多.
而反过来,只要有任何一个上升变化途径阻塞或者出现供需矛盾的话.
整个层级流向就可能割裂了.
因此对于这个优化函数来说,目标应该是保障曲线分布的平坦性/flat.
另外一个是应税金额的抵扣项.
就个税来说五险一金是在抵扣项目当中的.
而五险一金的性质是一种公共保险/储蓄.
是一种某种形态的社会共同基金.
名义上来说,这个都是归属于个人财产收入的.
所以理论上来说,在重个税的前提下,通过这类公共基金提供的合法避税项目做一些定向诱导是可行的.
因为名义上来说,它能减少个人因为所得税而造成的税务支持.
只不过以另外一个明目存在在社会共同基金下面.
而这个共同基金不考虑实际政策和规约管束的话,形式上就是另外一种国家融资手段.
面向的是全体社会成员.
它跟直接税收的区别在于,税收是一种某种形态的服务管理支出.
而抵税项目更像是一种贴现借款.
不仅不是一种支出,而是一个有息投资.
实际中的问题一是回报率.
二是赎回限制.
一的本质还是因为的二的流动性约束.
二存在的原因应该是为了减少形成一种逃税通道.
所以需要有锁定期和赎回条件约束.
这个可能可以以罚息或者其他更直接的数值手段去规避掉这类规则漏洞.
然后剩下的就是基金本身的收益率市场竞争性了.
这么看的话,现代税收可能更像一种主动的价格歧视策略.
目的定位可能不是直接的无偿征收和统一管理分配.
而是一个市场化的投资投票方式.
通过给定的避税渠道间接选择社会分配发展方式的一种形式.
2018-08-05
InvokeDynamic的一些问题
之前一个想法.
就是Java里实现类似go的interface的形式约束.
即可以后期规约出一个interface然后把一个object cast过去.
类似new Anycast().adopt(object).newInstance(Interface.class)的用法.
最简单的方式当然就是Invocationhandler的Proxy方式.
但这里有个问题就是interface的default method.
因为default method的作用可以是用来定义一个control flow template.
比如Stream API的collector.
通过暴露一些可实现的流程细节,在给定的流程框架内适应.
而proxy的实现实际上通过实现给定interface的所有方法做到的.
这也意味这default method被事实上override了.
这里有几种可能的方法.
一个就是实现一个带有default method的instance.
但由于实际上各个abstract method归属的this/method receiver不同.
所以实际上也并不能够达到目的.
另外一个思路是method handler.
因为invocation handler里给出了proxy object的instance.
所以在lookup能拿到method handler的前提下,就能bind到method receiver.
而这个的问题也就正在于lookup的限制性.
并不是像老一辈的reflection API一样是相对很随意的.
lookup对interface和method的访问性约束比其他要严格许多.
正如public要求或者同package之类的.
所以在proxy的框架内,实现还是有一定的局限性.
那么考虑绕过proxy,直接自己生成的方式.
操作bytecode的话就相对简单很多.
对于abstract的,直接stub就行.
而default method跳过便是.
因为本意就是要default.
既然动用到了生成字节码的方式的话,那么就还有另外一个思路.
就是stub的方式.
可以是走invoke dynamic.
这里有一个好处是bind method的时候,从API层面来说会简洁很多.
因为直接findVirtual就可以了.
而且不用为default method做特例处理.
因为default method也是可以直接bind到的.
唯一的问题是invoke dynamic的bootstrap method是没有instance上下文的.
也就是说没有this之类的概念.
理由要理解起来也很简单.
因为method handler更像是一个语言层面的code reference.
invoke dynamic做的是late binding就类似于把相关的代码实现剪切过来.
也就是类似运行时的instruction的copy & paste.
只是代码块的复制的话自然也就没什么this的概念.
因为从calling convention来说,method receiver是第一个push到栈上的参数.
是属于parameter的范畴.
并不在实际的代码逻辑内.
所以在bootstrap method里是找不到这些东西的.
一个折中的办法是通过static field去做dereference.
因为static field的访问是没有什么receiver的概念的.
也就是在bootstrap method里是有办法访问到的.
唯一要考虑的方式就是如何寻址的问题.
因为如果这个generated class是共享的,那么就需要在bootstrap method里找到一个唯一确定的"this"的方式.
比如,如果这个this的寻址是通过一个static map/set来实现的.
就需要保证任何时候这个map/set里只有一个唯一确定的元素.
也就是需要在外部this的注册以及bootstrap的调用的时候考虑锁相关的问题.
还有就是这个map/set里元素的引用处理问题.
因为如果不考虑的话,GC至少会有一个strong reference在这里.
所以这个可能是个比较复杂且不容易对的方案.
另外一个方式是generated class是实际上的singleton.
这样的话static field就是实际上的instance field.
既能够在bootstrap method里resolve.
也能把reference规约到instance本身的生命周期里去.
唯一的问题就是对于这类instance如果有比较多的需求的话.
对应的就会产生很多基本雷同的class.
所以invoke dynamic这系就有一个很微妙的设计上的冲突,或者说问题.
因为它基于的method handler/callsite的概念是相对于面向纯粹指令性的.
并没有太多的语言语法层面的约束定义.
用一个可能不太确切的词形容就是纯functional的,并不是OOP的.
当时要让它在语言或者说runtime层面能够跑起来的话,有必须是依赖classloader去define生效的.
当然,不是说method handler不能直接invoke.
而是method handler的构造离不开class.
就像很诡异的.
method handler对应的原则上来说是一段执行代码.
没有this,没有method receiver,只是纯粹的function.
但是你在语言侧面你又没办法把一段哪怕是static的code block或者method直接转换成method handler.
而还是需要通过lookup的方式去获取.
而lookup本身又非常地具有局限性.
一个比较实际的例子就是anonymous class.
因为anonymous class实际上是final类protected的access.
所以并不是能够随时随地自由地通过lookup转换成method handler.
就像自身的lambda机制.
实际上是通过在当场对每一lambda生成对应的相互独立的invoke dynamic bootstrap handler做到的.
而这,也恰恰就是为什么lambda没有"this"的原因.
因为从语法层面上来说,lambda跟形式类似的anonymous class实际上是完全不同的两个东西.
而且另外一点就是,method handler貌似是没有什么异常概念的.
这个也好理解,因为是code reference.
但是lambda却在语法层面保留了exception.
于是这里就有一个相对分裂的地方.
一方面因为实现的原因,没有this概念.本质上是完全不同的东西,只是具有类型使用形态.
另一方面为了保持折中形态的类似性,引入了从实现层面上来说完全没有意义的exception声明的语法一致性约束.
仿佛就是一种应该保留的没有保留,而不应该保留的偏偏保留了下来的感觉.
所以有时候感觉这是一个很别扭的实现.
一个试图表征纯粹指令集合的东西,却摆脱不了class的约束.
一个本来就是把method receiver当作参数传递的实现,却在callsite里抹掉了痕迹.
一个明明为了实现简明抹去了exception的method handler,却在lambda的语法层面做了保留.
在加上lookup本身的各种限制.
感觉鸡肋了很多.
或者说,给人的感觉是一个比较糟糕的补丁方式.
就是Java里实现类似go的interface的形式约束.
即可以后期规约出一个interface然后把一个object cast过去.
类似new Anycast().adopt(object).newInstance(Interface.class)的用法.
最简单的方式当然就是Invocationhandler的Proxy方式.
但这里有个问题就是interface的default method.
因为default method的作用可以是用来定义一个control flow template.
比如Stream API的collector.
通过暴露一些可实现的流程细节,在给定的流程框架内适应.
而proxy的实现实际上通过实现给定interface的所有方法做到的.
这也意味这default method被事实上override了.
这里有几种可能的方法.
一个就是实现一个带有default method的instance.
但由于实际上各个abstract method归属的this/method receiver不同.
所以实际上也并不能够达到目的.
另外一个思路是method handler.
因为invocation handler里给出了proxy object的instance.
所以在lookup能拿到method handler的前提下,就能bind到method receiver.
而这个的问题也就正在于lookup的限制性.
并不是像老一辈的reflection API一样是相对很随意的.
lookup对interface和method的访问性约束比其他要严格许多.
正如public要求或者同package之类的.
所以在proxy的框架内,实现还是有一定的局限性.
那么考虑绕过proxy,直接自己生成的方式.
操作bytecode的话就相对简单很多.
对于abstract的,直接stub就行.
而default method跳过便是.
因为本意就是要default.
既然动用到了生成字节码的方式的话,那么就还有另外一个思路.
就是stub的方式.
可以是走invoke dynamic.
这里有一个好处是bind method的时候,从API层面来说会简洁很多.
因为直接findVirtual就可以了.
而且不用为default method做特例处理.
因为default method也是可以直接bind到的.
唯一的问题是invoke dynamic的bootstrap method是没有instance上下文的.
也就是说没有this之类的概念.
理由要理解起来也很简单.
因为method handler更像是一个语言层面的code reference.
invoke dynamic做的是late binding就类似于把相关的代码实现剪切过来.
也就是类似运行时的instruction的copy & paste.
只是代码块的复制的话自然也就没什么this的概念.
因为从calling convention来说,method receiver是第一个push到栈上的参数.
是属于parameter的范畴.
并不在实际的代码逻辑内.
所以在bootstrap method里是找不到这些东西的.
一个折中的办法是通过static field去做dereference.
因为static field的访问是没有什么receiver的概念的.
也就是在bootstrap method里是有办法访问到的.
唯一要考虑的方式就是如何寻址的问题.
因为如果这个generated class是共享的,那么就需要在bootstrap method里找到一个唯一确定的"this"的方式.
比如,如果这个this的寻址是通过一个static map/set来实现的.
就需要保证任何时候这个map/set里只有一个唯一确定的元素.
也就是需要在外部this的注册以及bootstrap的调用的时候考虑锁相关的问题.
还有就是这个map/set里元素的引用处理问题.
因为如果不考虑的话,GC至少会有一个strong reference在这里.
所以这个可能是个比较复杂且不容易对的方案.
另外一个方式是generated class是实际上的singleton.
这样的话static field就是实际上的instance field.
既能够在bootstrap method里resolve.
也能把reference规约到instance本身的生命周期里去.
唯一的问题就是对于这类instance如果有比较多的需求的话.
对应的就会产生很多基本雷同的class.
所以invoke dynamic这系就有一个很微妙的设计上的冲突,或者说问题.
因为它基于的method handler/callsite的概念是相对于面向纯粹指令性的.
并没有太多的语言语法层面的约束定义.
用一个可能不太确切的词形容就是纯functional的,并不是OOP的.
当时要让它在语言或者说runtime层面能够跑起来的话,有必须是依赖classloader去define生效的.
当然,不是说method handler不能直接invoke.
而是method handler的构造离不开class.
就像很诡异的.
method handler对应的原则上来说是一段执行代码.
没有this,没有method receiver,只是纯粹的function.
但是你在语言侧面你又没办法把一段哪怕是static的code block或者method直接转换成method handler.
而还是需要通过lookup的方式去获取.
而lookup本身又非常地具有局限性.
一个比较实际的例子就是anonymous class.
因为anonymous class实际上是final类protected的access.
所以并不是能够随时随地自由地通过lookup转换成method handler.
就像自身的lambda机制.
实际上是通过在当场对每一lambda生成对应的相互独立的invoke dynamic bootstrap handler做到的.
而这,也恰恰就是为什么lambda没有"this"的原因.
因为从语法层面上来说,lambda跟形式类似的anonymous class实际上是完全不同的两个东西.
而且另外一点就是,method handler貌似是没有什么异常概念的.
这个也好理解,因为是code reference.
但是lambda却在语法层面保留了exception.
于是这里就有一个相对分裂的地方.
一方面因为实现的原因,没有this概念.本质上是完全不同的东西,只是具有类型使用形态.
另一方面为了保持折中形态的类似性,引入了从实现层面上来说完全没有意义的exception声明的语法一致性约束.
仿佛就是一种应该保留的没有保留,而不应该保留的偏偏保留了下来的感觉.
所以有时候感觉这是一个很别扭的实现.
一个试图表征纯粹指令集合的东西,却摆脱不了class的约束.
一个本来就是把method receiver当作参数传递的实现,却在callsite里抹掉了痕迹.
一个明明为了实现简明抹去了exception的method handler,却在lambda的语法层面做了保留.
在加上lookup本身的各种限制.
感觉鸡肋了很多.
或者说,给人的感觉是一个比较糟糕的补丁方式.
订阅:
博文 (Atom)
难而正确
这两天梁文锋的四小时讲话挺火的. 大致看了下有点挺有意思的. 一个是谈到对sota模型的理解. 按照讲话时间一个月前的话,应该指的是fable/mythos的激活参数量. 大概在800B左右. 这里比较有意思的是他关注的不是总参数量,而是激活量. 换个角度来说,目前scaling...
-
从未对雪有过什么幻想. 于是,当这雪终究下下来了,也没什么特别的兴奋. 只是,由于是南方人,也就姑且好奇了一番. 望了望着属于别处的风景. 也许是因为昨晚下过雨,也或许是本来就会如此. 冰混着点积水,倒是怀念起阳光灿烂的日子了. 面对着这未知的...
-
去看了长安的荔枝. 前半段还可以,尤其像荔枝林里不知道是笑还是哭的几个镜头表演算是相当出色了. 结合人物背景的那种对目标的绝望与对当下人际环境的希望的交叉矛盾心理. 后半段就有些过滤潦草了. 如果说整片是对于一骑红尘妃子笑,无人知是荔枝来的解构的话. 带入民生潦倒涂炭这点是没问题...
-
看完了一部未完成的电影. 这部片片子比较有意思的是一开始那段自嘲. 秦昊关于既然拍了也播不了,只是私下小圈子里自嗨的事情又什么意义的质问. 片里导演也 讪讪地承认生活的现实. 到这里其实沿着原有的思路,把补拍和一些意外穿插进去,可能还是一个不错的文艺片. 至少于戏里戏外的导演来说...