wat formatter 性能优化
¶ (#使用-arena)使用 arena arena 允许我们在一段连续的内存空间中分配对象,并且在 arena 销毁时一次性释放所有对象而不是像传统的那样在
理解 rowan,成为 rowan,超越 rowan
¶ (#rowan-简介)rowan 简介 rowan 是由 rust-analyzer 团队开发的无损语法树库。所谓「无损」,即语法树是 CST 而不是 AS
WAT 解析器性能优化:重写后提速 350%
WAT(WebAssembly文本格式)解析器性能提升350%的真实优化记录。作者亲手重写了 wasm-language-tools 中的 WAT 解析器,从 parser combinator 库改为手写实现,并分享了多项具体优化技巧:预创建并复用常用 token 和节点(利用 Arc 和 LazyLock 避免重复分配)、用字节前缀匹配替代字符串比较来识别关键字、用 get_unchecked 跳过 UTF-8 边界检查、自定义轻量 Token 类型延迟创建昂贵的 GreenToken、复用单 Vec 配合 drain 操作减少大量临时分配开销。附 benchmark 对比:旧解析器约 59µs,新解析器约 13µs。有完整代码示例与实现思路,适合 Rust/WebAssembly 开发者深入参考。
Rust 增量计算方案选型
写 wasm-language-tools 这个 language server 前所做的技术选型。
Raffia与Malva的故事
Raffia 为何而生?Malva 开发过程遇到了怎样的麻烦?
ECMAScript 三种严格相等判断语义
¶ (#介绍)介绍 ECMAScript 有三种严格(即不会执行类型转换)相等判断的语义,分别是: •
isNaN 与 Number.isNaN 的区别
位于全局的 isNaN 与 Number.isNaN 虽然函数名字一样,但具体行为是有差别的: • isNaN 会对传入的参数执行类型转换,转换为数字类型后再去判断;
TypeScript 的内置 NoInfer 类型
TypeScript 新特性抢先看:新的内置类型 NoInfer。它与 Uppercase 等类型都属于 marker type(即 lib.d.ts 里的实现只有一个 intrinsic</
pnpm 的 resolution-mode 配置
pnpm 有一个名为 resolution-mode 的配置项[1] (#fn1)(在.npmrc 文件中配置),但无论是 resol
core-js 版本问题
Babel 和 SWC 都有 core-js 相关的选项,用于精确控制要注入的 polyfill。对于 Babel,它在 @babel/preset-env 的选项下
Object.hasOwn 与 hasOwnProperty 的差异
尽管 Object.hasOwn 被作为 Object.prototype.hasOwnProperty 的替代品,但实际上两者对于参数的 normalize 在顺序上是有差别的: • O
安装 Linux 后要调整的东西
最近新组了一台电脑,安装了 Linux 后遇到了一些以前没有注意或没有碰到的问题。 ¶ (#Baloo-占用大量硬盘读写)Baloo 占用大量硬盘读写
在浏览器里跑 C 语言写的程序?可行是可行……
折腾 WebAssembly 的坑不是一般的多。
2022 年每日一学
¶ (#2022-01-17)2022-01-17 如果在同一个 webpack 配置文件中以数组的形式导出多份配置时,webpack 并不会按照数组中的顺
2021 年每日一学
¶ (#2021-12-13)2021-12-13 在使用 Fetch API 进行文件上传时,不能手动设置头部的 Content-Type</
参与 SWC 贡献时学到的那些奇怪 class 语法
作者在参与 SWC(高性能 JavaScript/TypeScript 编译工具)开源贡献过程中,遇到了 JavaScript class 语法中一些不常用但很精妙的特性。文章以实际踩坑经历切入,揭示了 class 语法在编译器底层实现中的特殊用法,包括 private field 的底层行为、super 调用的边界情况、以及一些规范层面的细节。这类知识通常在日常业务开发中不会碰到,但在工具链贡献、元编程或框架开发中非常实用。有真实贡献背景支撑,不是泛泛的语法教程。