类型推断的错误消息为何如此难懂:从统一算法到错误定位的四十年迷局
一位TypeScript开发者在重构代码时遇到了这样一个错误: Type 'string' is not assignable to type 'number'. 错误指向了一个看似完全正确的函数调用。他检查了函数签名,检查了传入的参数类型,甚至检查了调用链上的每一个函数,花了整整两个小时才找到问题的根源——一个在文件另一端、三百行之外的对象属性赋值。 ...
一位TypeScript开发者在重构代码时遇到了这样一个错误: Type 'string' is not assignable to type 'number'. 错误指向了一个看似完全正确的函数调用。他检查了函数签名,检查了传入的参数类型,甚至检查了调用链上的每一个函数,花了整整两个小时才找到问题的根源——一个在文件另一端、三百行之外的对象属性赋值。 ...
1961年,MIT的计算机科学家Lester Earnest面临一个看似琐碎的问题:如何让计算机识别打字错误的单词?当时的计算机还是房间大小的庞然大物,输入依靠打孔纸带,一个拼写错误可能意味着重新穿孔整段程序。Earnest开发了一个简单的程序,它能将文档中的每个单词与预定义的词典进行比对——这便是人类历史上第一个拼写检查器的雏形。 ...
1995年,Linux从a.out二进制格式迁移到ELF。这个改变带来了更灵活的共享库支持——不再需要中央分配的虚拟地址空间槽位,库可以按需加载和替换。但灵活性是有代价的:程序启动变慢了。 ...
2012年7月,六家科技公司——PayPal、Lenovo、Validity Sensors、Nok Nok Labs、Agnitio和Infineon——成立了一个名为FIDO(Fast IDentity Online)的行业联盟。他们的目标简单而宏大:杀死密码。 ...
2019年,一位Reddit用户做了一个实验:他将Kindle充满电后,在屏幕上显示一张静止图片,然后关掉所有无线连接。六周后,他打开设备——电量几乎没变。屏幕上的图片依然清晰如初。 ...
2004年,Linux内核开发者面临一个棘手的问题:传统的电梯调度算法在特定工作负载下会导致请求饥饿——某些I/O请求可能永远等不到服务。这个问题的根源在于,当磁盘忙于服务某一方向的请求时,反方向的请求可能被无限期忽略。Jens Axboe设计的Deadline调度器正是为了解决这个问题,它给每个请求设定一个"死线",保证请求不会无限期等待。 ...
1990年9月,麦吉尔大学的计算机科学研究生Alan Emtage开发了一个名为Archie的程序。这个程序的工作方式在今天看来极其原始——它下载所有匿名FTP站点的目录列表,然后创建一个可搜索的文件名数据库。Archie不索引文件内容,因为当时的数据量小到可以手动搜索。这是人类历史上第一个互联网搜索引擎。 ...