Login
Create new posts
所以说 codegen 才是正道吗?看了 typegraphql 的文档之后,感觉我之前自制的 GraphQL/sequelize decorator 系统就是一坨翔。
我设想的方案是写一些 TS def,设计一套 decorator,然后基于这套 decorator 生成 sequelize schema 和 GraphQL schema。这种内存中生成 schema 的缺陷在于有 bug 不好调试,因为你不知道生成出来的是什么东西。此外就是 runtime 生成会带来一些奇怪的循环依赖问题,我花了很多时间和精力处理这些东西,若可以绕过则是极好的。
Codegen 没有这些问题。它的根本优势在于预编译自由得多,可以做各种处理(不像运行时编译只能基于有限的且不可靠的 type metadata 做),而且生成的内容是固定的、可见的,甚至可以(也应该)check in 到 repo 里。这对于大型项目开发无疑是重要的。
而且几年不写前端,现在的方案(指 typegraphql-prisma
)已经可以进化到这么好用、这么细粒度了。可以自定义 expose 哪些 field 就不说了,甚至可以细化到某个 method 的权限管理,真是颇有点当年 rails 框架 conventional over configuration 的风范了,只不过这一次更牛,是 type safe 的。
说到这里更不得不佩服 TypeScript 的远见卓识。有 TypeScript 无敌类型系统的加持,这样的方案才得以运行,其他语言则只能望洋兴叹了。
弱反射原理 mathbb{P}{M_t ge a} = 2mathbb{P}{B_t ge a},其中 M_t = sup_{sin[0,t]}B_s 是布朗运动 B_t 在 [0,t] 内达到的最大值。 它可以写作mathbb{P}{B_t ge a}=dfrac{1}{2}mathbb{P}{M_t ge a},这个在直观上很容易理解,因为 B_t ge a 必然有 M_t ge a,而 M_t 第一次到达 a 之后,后续任何点大于或小于 a 的概率都是 1/2。 强反射原理 给定标准布朗运动 B_t,假设 s 是个停时,那么
begin{equation} B'_t= begin{cases} B_t & text{if } t le s 2B_s-B_t & text{if } t > s end{cases} end{equation}
仍是标准布朗运动。 这实际上就是「第一次到达 a 之后,后续任何点大于或小于 a 的概率都是 1/2」的严格表述。所以后者可以推出前者。
感觉跟 Brownian motion 或者说 Wiener process 的 reflection principle 有关?
找到了相关文章 Formalising Real Numbers in Homotopy Type Theory,让我来看一看。
怎么用类型系统表述戴德金分割呢?
textbf{} extbf{}
我现在懂了,就是戴德金分割
不成立。现在的语法也有这样的歧义
他怎么错误了
虎哥居然还在回复,神奇
还活着!!
Create new posts