04-05 微信群聊天记录整理

#1

工业聚 11:12 dan 制作的最新版 react 生命周期方法图表

工业聚 11:12 https://twitter.com/dan_abramov/status/981712092611989509

工业聚 11:24 react 面试新问题:1)为什么要删除 will* 生命周期;2)为什么 getDerivedStateFromProps 是静态方法;3)getSnapshotBeforeUpdate 的用途是什么?4)suspend 的实现机制是什么? Mot 11:24 哈哈 Mot 11:24 可以可以

工业聚 11:26 现在问这个,应该很难招到人;6 个月后问,可以找到优秀的 react 开发。

Heaven 11:35 1,2,3 官方博客都差不多写完了,4 的话 youtube 上播放量才 3w

工业聚 11:38 前面的估计,算上了国内和国际的技术时差

Heaven 11:40 技术时差这个词有点意思 Mot 11:45 你们都开始用异步react部署了嘛 Mot 11:45 一个都答不上

Jason²⁰¹⁸ 11:48 跟不上节奏了 司徒正美 11:49 6个月公司倒闭撒花 dyf 11:49 升不上

Jason²⁰¹⁸ 11:50 还以为看完dan 的几篇文章能吃老本吃个几年

chenyong 11:51 不做异步感觉不到这种细微的 api 差别

chenyong 11:52 以前做 time travelling debugger,勉强远碰到这种区分的需求

工业聚 11:55 我做完 react-imvc 之后,也以为相对完备,可以用几年不过时。结果 react v16 不断挑战旧有最佳实践,我[捂脸]

工业聚 11:56 还得想着什么时候,根据新的最佳实践,升级一下

chenyong 11:56 越是遇到精细的场景越是需要对概念有明确的区分

chenyong 11:57 浏览器只有挂载,服务端渲染把渲染区分开,说不准移动端还会产生奇怪的区分

Heaven 11:57 我觉得这个怼得很好,应该发在知乎上

chenyong 11:59 编译器把代码转化成适合 machine 的样子 [奸笑]

工业聚 12:11 self-explainatory 的代码只是一个理想情况下的幻觉

工业聚 12:16 代码只是某些 idea 具体的一个实现片段,出于性能、异常处理、模块化、代码风格等多方面的考虑,代码的形态恰好符合人类理解偏好的概率,不高

工业聚 12:16 就像之前我在分享时说的,梯度下降有个负号,均方误差求导后也有一个负号,在代码上就可以不写这两个负号,减少计算,提升性能。但只看源码,它看起来是梯度上升和错误求导

工业聚 12:19 源码同时服务于机器和人类两个目标,而这两个目标并不总是一致。如果想要更好地服务于人类理解这个目标,自然语言+伪代码会比可运行源码+注释更友好

工业聚 12:19 源码跟机器和人类的关系,倒有点类似基因的利益跟个体的利益的关系

工业聚 12:20 个体跟 Ta 的基因,在大部分情况下,利益是一致的。在少部分场景里,利益不一致,盲从本能,就牺牲了个体自身的长期福祉

工业聚 12:21 恰好,这些少部分场景,覆盖了部分人生关键选择。

工业聚 12:21 斯坦诺维奇在《机器人叛乱》书里详细介绍了,基因跟我们自身在某些方面的冲突跟解决方案(他称之为广义理性)

工业聚 12:23 他举了一个经典例子"做爱带套",是一个人类个体跟基因诉求利益不一致时的理性行为

工业聚 12:49 Introducing React Apollo 2.1 A new render prop API, improved docs, and more! https://dev-blog.apollodata.com/introducing-react-apollo-2-1-c837cc23d926 司徒正美 12:51 那是一个next.js吗

工业聚 12:52 比 next.js 更庞大,next.js 的功能是同构,提供 SSR 的能力

工业聚 12:52 apollo 是 graphql + react + ajax/fetch + state-manager 等包办的全家桶

工业聚 12:53 突然注意到,react 的 render props 跟 callbag 在某方面很像

工业聚 12:54 把 render props 编译为 js 后是,createElement(type, props, (data) => xxx)

工业聚 12:59 群魔乱舞[捂脸],Mutation 组件内部把 this.props.children 全部 pipeline 起来,然后把 graphql + store 作为 source,让整个模式变成 reactive 的

工业聚 13:02 Get started with WebAssembly — using only 14 lines of JavaScript https://medium.freecodecamp.org/get-started-with-webassembly-using-only-14-lines-of-javascript-b37b6aaca1e4

东东- 17:50 没人试玩rust吗。

东东- 17:50 我试了下neno。 还不错。

东东- 19:38 Haskell ?

工业聚 22:31 @

Kpaxqin “When using monads, Haskell allows us to write code with imperative semantics while keeping the advantages of functional programming.”

工业聚 22:32 imperative 语义的代码,跟函数式不完全冲突。所以 Immer 的 producer 里的副作用修改 state,可以做相同的理解~

工业聚 22:32 只要 immer 返回的 state 可以 keeping the advantages of functional programming

工业聚 22:33 https://en.wikibooks.org/wiki/Haskell/Understanding_monads/IO

KpaxQin 23:02 这里我目前还是持不同观点哈,手机打字不太好说清楚,简单说就是haskell中io monad本身是为了处理side effect才存在的。他仍然提倡的是pure functional,然后通过lift处理副作用(这篇文章里也多次表达过这个观点,手机不方便摘录),也就是说让更多的逻辑用pure functional 的方式表达,才是the advantages of FP ,即使是monad也是围绕这个目标在转,do notation等也是一样。而immer目前的问题是我看不到他的“必要性”(当然可能是我的眼界问题),他解决的是状态的问题,这个问题域里没有副作用,本身是pure FP style发挥的最佳舞台,却把imperative 那套拿了回来

工业聚 23:13 do notation 的 imperative 语义,就是为了迎合开发者的理解偏好。处于相似的目的,用 imperative/mutable 的风格去代替 immutbale 的,我觉得理由是一致

KpaxQin 23:14 do notation的使用域非常有限吧

KpaxQin 23:14 换个说法,既然是为了迎合开发者的理解偏好,为什么不让imperative风格扩散呢

工业聚 23:15 扩散有失控的风险,需要有节制地引入 imperative 语义

工业聚 23:16 不然都用 >>= + lambda function 一层层写了~

工业聚 23:16 immer 里也把 imperative 限制在 producer 函数里

KpaxQin 23:19 这就是我担心immer的地方……还是那个“必要性”。do处理monad,这里是有场景的必要性的,用不到副作用就用不到do,想用、爱用都不行

KpaxQin 23:19 而immer处理的问题本身没有引入imperative的必要性

KpaxQin 23:20 扩散的风险就让我非常敏感了

工业聚 23:22 必要性术语技术决策层面,跟 immer 里的 fp 性质判定,是两回事

工业聚 23:25 我的看法是,immer 里的 imperative 的 state mutation 写法,不会改变它是 immutable/fp 的性质

工业聚 23:25 就像 Promise 用 new 关键字实例化,也不会改变它属于 monad 的特征

工业聚 23:27 至于开发者强行利用 js 的灵活性,破坏 immer 库的设计目的,或者滥用 immer 而带来其它问题,则是另外的要解决的新问题