考虑降准.
不能降息的原因是去杠杆.
所以只能降准.
降准释放的是流动性.
那么这个流动性的目的是什么呢?
考虑之前货币基金的快赎限额.
货基的一般标的是国债央票和一些短期债券.
赎回限额就意味着一定时期内资金总量的稳定性.
也就是投资标的成分的构成稳定性.
如果对标的是国债央票之类的货币性工具的话,那实际上只是政策导向就能基本解决的问题.
因为基本上就是利率的变动导致的变化.
而在目前利率不能往下的情况下,原则上来说是不会又什么变化需要对应的.
那么对应的应该就是这里风险级别高一些的债券.
如果发生一些异常的赎回活动,那么对应的就是这些债券的市场行为.
从基金的角度说就是需要卖出.
而对应的就是债务方的清偿压力.
因此,如果把限额的目的定义为债券稳定性的话.
换句话说就是为债券市场提供流动性支持.
而降准提供的流动性可能也就是另外一种方式而已.
反过来说,就是债券市场这块可能又一些比较不稳定或者隐性的风险性在里面.
央行发文的一个关键词是债转股.
字面意就是债券换股权.
对债务人来说,就相当于变相的债务清偿机制.
而债权人角度也只是一个财务记账名义的变更.
这似乎是一个很完美的解决方案.
不需要很复杂的系统性设计.
也不用担负触发系统性风险的问题.
问题是市场的反应.
如果市场不认可的话,那么股权价值就会降低.
对应的就是实际上的财务变更前的债务default.
所以某种程度上来说,这是在以国家信用为基础准备的对不良债务做的bailout准备.
另外一点就是提到的对小微企业的贷款融资.
这里可能存在的一个操作空间就是对于一些起来来说,不仅又bailout支持,可能还有定向的宽松支持.
这可能不是一个很好的设计.
或者说至少在目前来说,即使是定向宽松也不能保证不会对去杠杆过程产生什么负面影响.
除非是加息,提高利率.
但是单提高利率的话,也只是表面上得提升了交易成本.
而实际上,由于不动产的低流动性特征和目前的政策,维持价格水平趋势反而是一个相对容易的事情.
因为成交量放在那.
高利率就意味着高融资成本.
这个可能可以以某种政策定向缓解.
加息的另一个结果可能就是现金流动性的降低.
因为对应的是基本收益率的提高.
系统性紧缩带来的是消费的降低.
对应的是整体乘数效应的减少.
经济增长的下滑,甚至衰退.
所以,加息可能并不是一个应该马上使用的方法.
再考虑税收.
定向的减税/抵扣,尤其是针对消费性的方面的话.
也就是某种程度上的消费路径设计.
那么这里就有一个比较有趣的问题了.
给定一个消费budget,以及消费graph.
那么就存在一个算法去使得某个reward函数最大化.
而税收就是其中的regular/activate function.
所以至少从路径上来说,还处在一个相对可控的环节.
还可以通过一种市场化的计划经济方式去做一些尝试.
如果它不work呢?
那就意味着消费路径并没有按照设想中的方式展开传播.
这样的话,大概只能从semi-supervise的市场经济走向supervise的计划经济了.
人为的重构整个消费流通graph.
而这个的经验,对于一线城市来说,并不陌生.
尽管不让人舒服.
but, it works.
2018-06-24
2018-06-23
classloader的一些问题
前段时间写个东西遇到个情况.
大致是java中,class A extends B的话.
原则上来说A isinstanceosf B应该是返回true的.
类似的isassinablefrom应该也是返回true的.
而实际上的结果却是不预期.
这是个比较有趣的设计.
因为在jvm的实现当中,class的namespace其实是以classloader和class name共同定义的.
类似与一个classloader::class_name的定义.
实现上是klass的lookup是在symboltable的dictionary中通过hash(class_name) & classloader_data定位的.
所以这里实际上是隐式的classloader的naming isolation问题.
从隔离角度来说,这么做也不算难理解.
而且在这种情况下来说,是可以做一些比较tricky的保护机制的.
比如一些受限的class的访问.
在classloader的隔离机制下,即使能够想办法初始化出一些forbidden的类.
然后在调用的时候还是可以通过类型检查拒绝掉一部分的.
但是这样就带来一个问题.
从语义上来说,A extends B是不带有这种隔离信息暗示的.
当A B由不同的classloader定义,或者是不同的classloader环境的时候,类型系统就比较混乱了.
因为字面上的qualified name并没有完全reveal出namespace的区别.
这样的话,在写程序的时候就有比较大的心智负担.
尤其当涉及不同的classloader的instane之间做交互的时候.
而这里又有另外一个诡异的情况.
考虑来自不同classloader的A和B,且名义上A extends B.
那么,如果做cast肯定是有问题的.
但是如果做method invoke/function call的时候,又可能是没问题的.
因为在运行时或者说bytecode层面是没有type check的.
而如果这两个不同classloader的关于B的bytecode是兼容的,或者说涉及到的signature是相同的话,是没问题的.
因为算出来的dispatch table/offset是一致的.
但是如果是不兼容的,自然就又会导致运行时错误.
而顺着这个思路,对于一些restrict的环境,如果能够构造跟protected的class兼容的dispatch table的话.
理论上来说就是绕过这些限制.
比如一些加密场景.
即使密钥是安全可靠的话,也可能可以通过替换的方式绕过校验.
尤其对于校验接口是传入non primitive类型的情况.
因为这种情况下,instance的method invoke也不算是reliable的.
反过来说,如果能够完全控制某些上下游的所有涉及instance的classloader情况的话.
那至少从语法/语义层面上不存在明显的漏洞.
但这是一个相对难覆盖的问题.
因为如果能够约束class以及其所属的classloader的情况的话,也就意味这runtime是一种可追踪的情况.
如若不是的话,则无法保证某个时间点不回存在classloader泄露/逃逸的情况.
所以,在这种情况下,其实本身就已经是又一个sandbox机制去保证audit了.
有没有classloader其实关系不大.
那么为什么要设计这么一种问题比较明显的机制呢?
一种可能就是为了保证builtin class的integrity.
毕竟有个bootstrap/system classloader.
但不提供这个机制的话,也并不是不能保证完整性.
因为问题的关键不是谁load,而是load的是什么.
核心是是什么怎么定义.
类似go的method receiver和protocol的定义就比较好.
实际上就是脱离了类型这种比较古板的定义.
而是通过具有什么行为来定义区别同类.
实际上,抛开类型检查的语法和一些编译期的检查之外,运行时也基本上就是这么做的.
如果去掉这种类型系统的话,代价就是类似动态类型语言,缺少编译期的约束提醒.
以及可能对java生态更重要的类型系统的可追溯性.
这个是很多IDE和工具链所依赖的.
而如果去掉classloader的绑定的话,又为一些malicious的应用提供了一些方便.
或者从纯粹语言的角度来说,这就意味着名义上同一类型的instance,可能有着不同的行为.
而如果从contract的层面去约束class定义的话,那就意味着对于同名的class具有不同行为的场景予以拒绝.
所以,允许这种怪异行为的原因是为了使这种场景合理化么?
大概是类似于jsp这种需要code hot reload的场景.
于是一个可能比较安全的做法就是尽量去做类型的cast和从属关系判断.
非要这么做的话,可能就是需要自己做字面的递归回溯比较了.
这样至少是遵从字面语意的.
大致是java中,class A extends B的话.
原则上来说A isinstanceosf B应该是返回true的.
类似的isassinablefrom应该也是返回true的.
而实际上的结果却是不预期.
这是个比较有趣的设计.
因为在jvm的实现当中,class的namespace其实是以classloader和class name共同定义的.
类似与一个classloader::class_name的定义.
实现上是klass的lookup是在symboltable的dictionary中通过hash(class_name) & classloader_data定位的.
所以这里实际上是隐式的classloader的naming isolation问题.
从隔离角度来说,这么做也不算难理解.
而且在这种情况下来说,是可以做一些比较tricky的保护机制的.
比如一些受限的class的访问.
在classloader的隔离机制下,即使能够想办法初始化出一些forbidden的类.
然后在调用的时候还是可以通过类型检查拒绝掉一部分的.
但是这样就带来一个问题.
从语义上来说,A extends B是不带有这种隔离信息暗示的.
当A B由不同的classloader定义,或者是不同的classloader环境的时候,类型系统就比较混乱了.
因为字面上的qualified name并没有完全reveal出namespace的区别.
这样的话,在写程序的时候就有比较大的心智负担.
尤其当涉及不同的classloader的instane之间做交互的时候.
而这里又有另外一个诡异的情况.
考虑来自不同classloader的A和B,且名义上A extends B.
那么,如果做cast肯定是有问题的.
但是如果做method invoke/function call的时候,又可能是没问题的.
因为在运行时或者说bytecode层面是没有type check的.
而如果这两个不同classloader的关于B的bytecode是兼容的,或者说涉及到的signature是相同的话,是没问题的.
因为算出来的dispatch table/offset是一致的.
但是如果是不兼容的,自然就又会导致运行时错误.
而顺着这个思路,对于一些restrict的环境,如果能够构造跟protected的class兼容的dispatch table的话.
理论上来说就是绕过这些限制.
比如一些加密场景.
即使密钥是安全可靠的话,也可能可以通过替换的方式绕过校验.
尤其对于校验接口是传入non primitive类型的情况.
因为这种情况下,instance的method invoke也不算是reliable的.
反过来说,如果能够完全控制某些上下游的所有涉及instance的classloader情况的话.
那至少从语法/语义层面上不存在明显的漏洞.
但这是一个相对难覆盖的问题.
因为如果能够约束class以及其所属的classloader的情况的话,也就意味这runtime是一种可追踪的情况.
如若不是的话,则无法保证某个时间点不回存在classloader泄露/逃逸的情况.
所以,在这种情况下,其实本身就已经是又一个sandbox机制去保证audit了.
有没有classloader其实关系不大.
那么为什么要设计这么一种问题比较明显的机制呢?
一种可能就是为了保证builtin class的integrity.
毕竟有个bootstrap/system classloader.
但不提供这个机制的话,也并不是不能保证完整性.
因为问题的关键不是谁load,而是load的是什么.
核心是是什么怎么定义.
类似go的method receiver和protocol的定义就比较好.
实际上就是脱离了类型这种比较古板的定义.
而是通过具有什么行为来定义区别同类.
实际上,抛开类型检查的语法和一些编译期的检查之外,运行时也基本上就是这么做的.
如果去掉这种类型系统的话,代价就是类似动态类型语言,缺少编译期的约束提醒.
以及可能对java生态更重要的类型系统的可追溯性.
这个是很多IDE和工具链所依赖的.
而如果去掉classloader的绑定的话,又为一些malicious的应用提供了一些方便.
或者从纯粹语言的角度来说,这就意味着名义上同一类型的instance,可能有着不同的行为.
而如果从contract的层面去约束class定义的话,那就意味着对于同名的class具有不同行为的场景予以拒绝.
所以,允许这种怪异行为的原因是为了使这种场景合理化么?
大概是类似于jsp这种需要code hot reload的场景.
于是一个可能比较安全的做法就是尽量去做类型的cast和从属关系判断.
非要这么做的话,可能就是需要自己做字面的递归回溯比较了.
这样至少是遵从字面语意的.
订阅:
博文 (Atom)
爽文
去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...
-
最近尝试了下海淘. 当然,方向上来说是从国内到新加坡. 先是买了个iPhone,算上运费和双重征税,到手比官方还是便宜个一两百新的. 换算回来也不多事10%的纯粹价格因素差异. 当然,之类有电商促销的因素. 也有比较基准是新加坡Apple Store售价的原因. 但如果同样比较A...
-
这两天看完了Netflix版的三体. 某种程度上来说,完成度还是不错的. 尽管开始的时候对于第一集片头有些争论,但整体如果带入当下去看的话,还是有些梗的. 比如三体对于地球科技的发展速率的担忧,由此衍生的智子. 以及现有力量对比上的压倒性优势. 如果带入中美关系以及各自的历史阶段...
-
前几天Sora出来后才仔细看了下diffusion,发觉确实算挺取巧的. 按照naive的intuition或者说不那么现代的方式的话,可能需要segmentaion为基础的composite的方式去生成图片,即使扯点deep learning/network的,可能也是类似一些...