10

宣告叛变:一切皆非 js 和 web

 3 years ago
source link: https://zhuanlan.zhihu.com/p/388670095
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

宣告叛变:一切皆非 js 和 web

✅趴在床上娇喘,❎隔着网线叫唤

大家好,俺是 132,最近一直在搞其他语言的工具,比如 esbuild,swc 等等,搞得我真的头大,但好在确实让我有了新的思考,一切值得

web 已经无事可做

这也是现在所有主流框架的状态,比如 fre,vue,react,他们在 runtime 的算法基本上都做到极限了,一定程度上讲,很难找到突破了

甚至社区内很多反对的声音,大多数人都觉得,真的需要 concurrent mode 吗?这是不是过度设计?

每当看到这些声音,我都想喊一句,如果不过度设计,那还有什么可做?

后来,我开始做小程序,小程序是一种类似于 RN、flutter 的架构,虽然它画图的地方是 webview,但双线程的本质是一模一样的

这也是国内移动端前端架构的标配,比如 weex,kraken 等等

这也是 fre,vue3 这些框架无法“再次伟大”的原因之一,因为至少在中国,至少在移动端,已经不再需要纯 h5 的架构了

一入编译深似海

因为做小程序的原因,和别人不同的是,除了双线程的安排之外,我写的更多的是编译器,比如 wean,asta

在这个过程中,我看了很多编译原理的文章,看了很多别人编译的代码,也学到了很多,我开始尝到了编译的甜头

虽然 web 已经没有算法可做了,但是编译器还大有可为

我能想到很多很多这方面的安排和算法,其实还是很有成就感的,比如快 100 倍的 wean,快十倍的 parcel2……

当然,关键是,这个过程是完全可移植的,我不需要 js 做,我可以用 go 做,可以用 rust 做,不再对 web 和 node 有执念

鱼与熊掌不可兼得

那么问题来了,有人问,那你给 fre 写个编译器不就好了,就像 vue3 一样,语法糖长得像 svelte,但是实际上还是编译为 h 函数,走 vdom

或者就像 solid 一样,搞个静态 jsx 也成?

答案是,当然,不可以。

我认为鱼与熊掌不可兼得,这是我平时造轮子的经验

写代码其实和画画也是一样的,不可能每个地方都是细节,必须有虚有实

当我想做一个算法的时候,必须保证它的心智模型是简单的,它的“整体”是没有复杂化的

当我想做编译器的时候,我就不想在 runtime 做太多事情了,因为这会增加额外的复杂度,心智负担,维护量

不过,我之所以不喜欢 jsx,还要另外一个很重要的原因:

function App() {
  const [count, setCount] = useState(0)
  return <div>
      <h1>{count}</h1>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
}

就这段代码,你怎么做双线程嘛,这种 js 和 jsx 交织在一起的代码,是做不了双线程的

必须把 js 和 jsx 拆开,分开不同的线程跑

这也是我不喜欢 hooks api 或者 composition api 的原因之一

使用 rust,而不是 js

当然这才是重点,因为 esbuild 和 swc 慢慢地被人接受,加上 wasm 的兴起,未来在 js 中使用其他语言将屡见不鲜

过去我们在 js 中做编译,基本上都是依赖 acorn 或 babel,它们真的很慢,尤其是很多更喜欢操作 AST 而不是字符串,这样更容易写出来复杂度很高的代码了

我之前在国外发表了一些小程序的言论,有个很赞的团队,他们在写一个 jsx-lite 的 rust 替代品,每天在群里看他们讨论,感觉还挺有意思的

总结

好嘛,简单说,我心目中的下一代前端框架就是

使用 rust 写的,双线程的,svelte native

我确实叛变了,我开始不喜欢 fre 了,这不是因为 fre 不够好,而是我觉得 web 没戏了,js 也没戏了……

致敬那些曾经在 web 和 js 做出努力的人,也致敬我自己

江湖路远,我们换个地方,再贱!


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK