外公旧硬盘里的WebAssembly

上周回南京老房子整理外公的储物柜。 铁皮柜子的门轴锈了,拉开的时候吱呀响,掉下来一点灰。最下层的角落里压着个黑色的希捷移动硬盘,标签是外公2018年自己用马克笔写的,字歪歪扭扭,边缘被阳光晒得褪成浅棕色,写着“自用工具 勿动”。
贴有马克笔标签的旧希捷移动硬盘实物
贴有马克笔标签的旧希捷移动硬盘实物
我把硬盘擦干净,揣在包里带回了家。插在电脑上的瞬间,突然就想起2019年那个夏天,外公坐在他的新笔记本前面,对着屏幕上闪一下就消失的黑框框,皱着眉跟我吐槽的样子。

2019年的报错弹窗

2019年的报错弹窗
2019年的报错弹窗
那时候外公快78了,在设计院干了一辈子结构工程师,退休之后闲得发慌,把压在书桌抽屉最下面的一摞3.5寸软盘翻了出来。 软盘里存的是他90年代用Turbo C写的小工具——专门算老砖混结构的墙体承重系数。那时候设计院没有CAD,没有BIM,所有的计算都是靠自己写的小程序跑,输进去墙厚、砂浆标号、砖块强度,就能跳出对应的承重数值,比手工算快三倍。 他本来以为把软盘里的代码导到新笔记本上,就能接着用。 结果Windows11根本不认16位的老程序。双击图标,黑框弹出来,闪半秒,直接消失。 他给我打了三次电话,问我是不是电脑坏了。我那时候正赶项目上线,忙得脚不沾地,随口给了个方案:装个虚拟机嘛,模拟个老XP系统就能跑。 外公真的去装了。 老轻薄本的内存才8G,开个虚拟机风扇就狂转,嗡嗡响得像个小马达。他坐在旁边听了十分钟,直接把软件卸了,说“这机器喘得比我爬三楼还累,我可舍不得用!” 后来他自己折腾了快半年,找过各种老版本的模拟器,要么是带一堆弹窗广告,要么是算出来的数值差得离谱,根本不敢用。

编译过程里的三次返工

转机是2021年的夏天。 社区在老年活动中心开免费的数字素养课,外公本来是去学怎么拍他种的月季发视频号的,结果下课的时候跟旁边一个穿计算机学院文化衫的研究生小伙子聊起来,顺嘴提了自己那个跑不起来的老程序。 小伙子当时眼睛都亮了,说这个简单啊,用WebAssembly编译一下,扔浏览器里就能跑,根本不用虚拟机。
社区老年数字素养课活动现场
社区老年数字素养课活动现场
周末小伙子真的拎着电脑上门了。 外公提前半小时就把书房收拾干净,泡了珍藏的碧螺春,还把自己当年手写的代码注释稿整理得整整齐齐——那是他90年代在稿纸上一行一行写的,每个函数的作用都标得清清楚楚,连哪个变量对应哪个数值都画了线。小伙子翻那摞稿纸的时候都愣了,说现在谁写代码还留着手写的注释啊。 一下午的时间,三个人凑在屏幕前面改代码。 第一次返工是碰到老代码里用了早就废弃的16位图形库,画出来的界面全是乱码,小伙子把那部分代码换成了适配浏览器的轻量图形接口,花了一个半小时。 第二次返工是编译完跑起来,算出来的数值跟原来的DOS版本差了0.2%,外公拿着他的小计算器对着老本子上的参考值对了三遍,急得额头都冒了汗。两个人对着代码找了快两个小时,才发现是老代码里的浮点精度是按16位机的运算规则写的,WebAssembly默认用的是32位浮点数,改个参数就对上了。 第三次返工是界面太丑,外公说原来的界面是蓝底白字,字要大,不能有花里胡哨的按钮。小伙子把默认的灰色主题换成了他记忆里的DOS蓝,把字号调到了最大。 那天傍晚我过去送切好的西瓜,推开门就看见两个人凑在屏幕前面,屏幕上的蓝底白字丑得跟我小时候在外公家台式机上看到的一模一样,风扇安安静静转着,桌上的茶还冒着热气。 小伙子后来跟我解释,很多人觉得WebAssembly是用来做酷炫网页游戏、跑云端应用的高大上技术,其实根本不是。它的核心价值从来不是追求极致的性能炫技,而是给所有写过的旧代码,搭了一座能跨所有设备的桥。以前浏览器只能跑JavaScript,跑个老程序慢得要死,现在不管你是用C、C++还是Rust写的代码,只要编译成.wasm格式的二进制包,扔到网页里,不管用户用的是手机还是电脑,不管是Windows还是Mac,打开浏览器就能跑,不用装任何插件,不用开虚拟机,文件大小也就几百KB。
WebAssembly浏览器运行沙箱结构示意图
WebAssembly浏览器运行沙箱结构示意图

硬盘里没删掉的旧文件

后来外公把编译好的那个小工具,存在了他的移动硬盘里,还专门建了个快捷方式,放在浏览器的书签栏最前面。 我翻那个硬盘的时候,还看到里面存了好几个别的用WebAssembly跑的小工具:一个是他年轻时候玩的DOS版扫雷,一个是他自己扫描的90年代老图纸的轻量PDF阅读器,还有个他自己学着用Rust写的小记账本,编译完了之后只有217KB,比他手机上那些占几个G内存的记账软件小了快一百倍。 硬盘根目录下还有个没写完的txt文件,是外公2022年春天写的,字打了一半,后面的内容停在那里:“以前总觉得技术就是把旧东西扫进垃圾桶,新的东西上来,旧的就该走。现在才知道,旧东西也能跟着新的路走,不用被扔掉。” 我盯着那段字看了好久。 想起我刚入行的时候,天天被灌输的理念就是要快速迭代,要淘汰旧版本,要追最新的技术栈,从来没想过,技术还有这样的用法——不是为了做更复杂的功能,不是为了赚更多的钱,只是为了让一个老人花了三天写的小工具,能在三十年后的电脑上,安安静静跑起来。 今天我把那个移动硬盘插在自己的工作电脑上,打开那个存了快两年的蓝底白字的小工具,输入了我现在住的老小区的墙体厚度、砂浆标号,屏幕上跳出来的数值,跟外公30年前在软盘上算出来的一模一样。 窗外的风刮得楼下的梧桐树叶子哗哗响。 我们平时总在说技术发展快,总在说旧的不去新的不来,好像那些被淘汰的旧程序、旧代码、旧的记忆,本来就该消失在时间里。可我现在突然觉得,那些被我们随手丢在角落的东西,其实根本不需要被扫进历史的垃圾堆。 就像外公那个小小的.wasm文件,没有什么酷炫的特效,没有什么商业价值,就安安静静待在硬盘的角落里,等着哪天有人打开它,就能看见三十年前的那个夏天,一个年轻的工程师坐在书桌前面,对着稿纸一行一行敲代码的样子。

作者|fawen

排版|fawen

审核|柚子

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:外公旧硬盘里的WebAssembly
文章链接:https://m.lfdjt.com/info_23_31132.html