一个52000+行代码文件给我的启示

2024-08-29 18:56:53 浏览数 (2)

重型 JS 项目的性能问题一向很难,我们文档技术团队在 review 各大开源 JS 仓库性能实践的时候注意到:TS 源码的 checker.ts 这个文件相当暴力,它将 TS 完整类型系统全部逻辑 5.2 万行全部写在一个 TS 文件里,而文件大小则达到了惊人的 2.92 MB —— 这相当有趣,为什么?本文将带你从源码出发,分析背后的现象本质。

//////////

《如意、悟净、悟能——操作系统界的“黑神话”特性》「鹅厂程序员面对面」今晚7:30直播精彩继续,预约观看有机会抢鹅厂周边好礼!

大名鼎鼎的 checker.ts 这个文件我很久以前就知道了, 在 GitHub 上直接打不开:GitHub - microsfot/GitHub: ./src/compiler/checker.ts

好,腾讯云 Cloud Studio 启动:

腾讯云云端开发环境 Cloud Studio (https://ide.cloud.tencent.com/)是基于浏览器的在线IDE,为开发者提供了一个稳定的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能使用。其功能包含代码高亮、自动补全、Git 集成、终端等 IDE 的基础功能,同时支持实时调试、插件扩展等,并内置多种前后端与AI开发模板,可以帮助开发者快速完成各种应用的开发、编译与部署工作。

00.五万行 all-in-one 的 checker.ts

这个文件很暴力,类型系统全部逻辑 5 万行 all-in-one file ,是 TS 源码维护者不会写代码吗?显然并不是,我翻了一些资料和读了下其中的实现,稍微震撼了一下,将相关思考细节记录在本文。

01.低配版 named parameters

众所周知,JS 各种规范都推荐你用一个对象来传递多个参数,然后在函数里解构 —— 多数时候这没什么,但是在 TS compiler 里,任何浪费都会被极限放大,因此他们用了这种低配版用注释的方式来表示 named parameters (这行还是 anders 老爷子写的,C# 之父 《编程领域的传奇!C#、TypeScript 之父!全世界最顶尖的程序员之一》。

(https://cloud.tencent.com/developer/article/1751937)

何为 named parameter 呢?其实就是带名字标签的函数,调用的时候可以指定标签来传参数,这个在其他语言里是基操,比如 moonbit or swift 里的标签函数:

代码语言:javascript复制
fn add(~left: Int, ~right: Int) -> Int {
  return left   right;
}

add(left: 1, right: 44); // 


	

0 人点赞