Deno的1.39版本发布标志着该平台的一个重要更新,其中包含多项引人注目的改进和新特性。
WebGPU的回归
Deno 1.39重新引入了WebGPU API的支持,这一决定标志着对于高性能、跨架构的GPU编程在JavaScript中的重要进展。WebGPU API,被视为WebGL的有效继承者,为开发者提供了一种低级别、高性能的方式来直接编程GPU硬件。此规范已被最终确定,并且已经在Chrome浏览器中提供。Firefox和Safari也正在进行相关支持的开发工作。
Deno最初在2021年初引入了WebGPU的支持,但由于性能问题,这一特性在今年早些时候被移除。现在,这些性能问题已经得到解决,重新引入了WebGPU。GPU在执行某些数值运算方面,相比于CPU,能够提供极高的并行处理能力。这一点不仅在渲染和游戏中非常有用,也在诸如机器学习算法这样的应用中展现出极高的效率,因为这些算法通常可以被表达为一系列矩阵运算,而这些运算可以在GPU上高效执行。
Deno中的WebGPU实现基于即将在Firefox中推出的WebGPU实现的同一底层系统,因此,开发者可以有信心地在这一基础上构建应用。
以下是一个使用WebGPU获取GPU信息的基本示例代码:
// 尝试从用户代理获取适配器。
const adapter = await navigator.gpu.requestAdapter();
if (adapter) {
// 打印有关适配器的一些基本信息。
const adapterInfo = await adapter.requestAdapterInfo();
console.log(`Found adapter: ${adapterInfo.device}`); // 在某些系统上这可能为空
const features = [...adapter.features.values()];
console.log(`Supported features: ${features.join(", ")}`);
} else {
console.error("No adapter found");
}
更多示例可以在他们的webgpu-examples仓库中查看。
尽管规范已稳定,但在Deno中,WebGPU仍然被视为不稳定。要在Deno中使用WebGPU,需要使用--unstable-webgpu
标志。Deno团队计划在从社区获得更多反馈,并有更多时间对实现与规范测试套件进行验证后,很快将其稳定下来。
为了提供更多的WebGPU功能,Deno还添加了std/webgpu
。
更灵活的动态导入支持
在此版本中,deno compile
现在支持更多动态导入模式。由于Deno需要在编译过程中静态包含所有可能在运行时被导入的模块,因此动态导入曾是一个挑战。现在,Deno能够处理更复杂的动态导入模式,例如使用模板字符串的导入语句。
Deno语言服务器(LSP)的增强
为了提升Deno语言服务器的性能,1.39版本引入了显著的性能改进。这包括优化了快速打字期间大量请求的处理,使在IDE中的编辑体验更为流畅。此外,新增了一个关机超时机制,以及最新版本的Deno更新通知功能。
Node.js兼容性改进
1.39版本为了方便将现有的TypeScript代码库迁移到Deno,引入了对不规范导入的支持。例如,它允许在没有文件扩展名的情况下解析导入,或者使用不正确的文件扩展名导入TypeScript文件。此外,还增加了对node_modules/.bin/
目录中可执行文件在deno task
中的运行支持。
Deno API的变更
新版本中也包括了对Deno API的若干更改。例如,对于Unix套接字的Deno.serve()
支持已稳定化,以及Deno.HttpServer.shutdown()
的稳定化。此外,引入了Deno.HttpClient
的使用关键字支持,以及对变更通知的Deno.Kv.watch()
API。
其他特性和修复
1.39版本还包括了其他许多新特性和修复,如TypeScript 5.3的支持,对Jupyter笔记本中代码块的格式化支持,以及多项对Node.js API的更新和错误修复。
这些更新和改进共同提升了Deno的性能、灵活性和兼容性,使其成为开发现代JavaScript和TypeScript应用程序的一个更加强大和多功能的平台。