
前言
与一些朋友相比,我在编程方面开窍较晚。直到高中时,我才偶然接触编程。当时我需要再修一门计算机课程,辅导老师向我推荐了一门选修课。我以为要学习的是计算机工作原理,但出乎意料,这门课程是关于编程的。很快我就对它痴迷不已,并将职业发展方向从建筑学调整为软件架构。
2001年,我加入了Dovico软件公司,工作内容是维护与改进公司的C++客户端/服务器应用程序。当时的风向已经转变,2004年,Dovico决定转向软件即服务模式,我也将工作重心转到了Web应用程序产品。虽然我仍会帮助维护C++应用程序,但我的核心关注点变成了用C#和JavaScript进行Web开发。目前,我仍然从事Web开发,但是重心转到了体系结构方面——构建API、使用数据库,以及探索新技术。
我很乐于通过博客和公开演讲回馈开发者社区。2017年9月,有人问我是否有兴趣为本地用户做一场演讲。在四处浏览以寻找演讲主题时,我看到了一篇来自于PSPDFKit的文章,其中讨论了一种名为WebAssembly的技术。
当时我已经对谷歌的Native Client(PNaCI)技术有所了解,它允许编译后的C/C++代码在Chrome浏览器中以接近原生的速度运行。我也了解过Mozilla的asm.js技术,借助这种技术,可以将C/C++代码编译为JavaScript的一个子集,并让它在支持此技术的浏览器中高速运行。它也可以在不支持asm.js的浏览器中运行,只不过速度上没有优势,因为它就是JavaScript。这是我第一次听说WebAssembly。
WebAssembly拥有asm.js的优点,同时致力于弥补其缺点。有了WebAssembly,你能够以多种语言编写代码,并将它编译为可在浏览器中安全运行的代码,而且它在所有主流的桌面浏览器与移动端浏览器中都可用!它也可以应用于浏览器之外,如Node.js!我被WebAssembly的潜力深深触动,从那时起,便开始利用所有空闲时间探索这项技术,并撰写与之相关的博客文章。
2017年年末,Manning出版社注意到了我的博客文章,相关人员问我是否有兴趣撰写一本关于WebAssembly的图书。最开始,我计划在书中覆盖多门语言,并分别从后端开发者和前端开发者的角度来展示如何使用这项技术。但是,初稿的讲解重点明显不够突出,因此我和审校人决定将范围收窄,只关注C/C++语言,并且侧重于后端开发者。
在我撰写本书时,WebAssembly社区与工作组也没有闲着。实际上,这项技术的几项改进正在进行当中。最近,不需要启用任何实验性功能就可以在Chrome的桌面版本中使用多线程WebAssembly模块了!WebAssembly有潜力帮助Web开发更上一层楼,对于它的未来,我拭目以待。