Protobuf 作者不建议在 Deno 中使用 Protobuf
2023-12-29 18:09:59
Protobuf 作者为何不建议在 Deno 中使用 Protobuf?
一个新的工具链正在兴起:利用浏览器中 JavaScript 和 TypeScript 的全部功能,在 Deno 中为 Web 以外的环境(例如,服务器、命令行工具、桌面应用程序)构建现代应用程序。然而,Deno 社区的成员发现,在 Deno 中使用 Protobuf(Protocol Buffers)存在一个问题。
Protobuf 是一种用于在应用程序之间序列化结构化数据的通用语言。它非常适合在不同编程语言之间交换数据,因为它提供了一个独立于语言的格式。但最近,Protobuf 作者 Kenton Varda(kentonv)开了一个 issue,明确指出,他不建议在 Deno 中使用 Protobuf。
为什么 Kenton Varda 会提出这样的建议?让我们来深入了解一下他的理由。
Protobuf 和 Deno 中的二进制模块问题
Protobuf 的 C++ 代码生成器会生成解析器,这些解析器依赖于操作系统提供的 libc++ 来进行内存管理和字符串操作等基本操作。在 Deno 中,这些解析器在二进制模块中运行,但 Deno 目前不支持二进制模块中非 Web 标准的 C++ 特性。这意味着 Protobuf 的 C++ 解析器在 Deno 二进制模块中无法正常工作。
Deno 二进制模块的未来发展
Deno 团队意识到这个问题,并且正在努力解决。他们正在探索各种方法来支持二进制模块中非 Web 标准的 C++ 特性,包括:
- 移植 LLVM 和 libc++ 到 Deno 运行时。
- 构建一个 Deno 专用的 libc++ 子集。
- 为二进制模块提供一个沙盒环境,允许它们使用本机 C++ 特性。
替代方案:使用 Deno 标准库中的 JSON
虽然 Deno 目前不支持 Protobuf,但这并不意味着你无法在 Deno 中序列化和反序列化数据。Deno 标准库中提供了 JSON,它是一种广泛使用且经过良好支持的数据格式。JSON 非常适合在 Deno 应用程序之间交换数据,因为它具有以下优点:
- 易于使用和理解。
- 几乎所有编程语言都支持。
- 在 Deno 中原生支持,性能优异。
总结
虽然 Protobuf 是一种非常流行且功能强大的数据序列化格式,但它目前不建议在 Deno 中使用。这是因为 Deno 中二进制模块不支持 Protobuf 所依赖的非 Web 标准 C++ 特性。不过,Deno 团队正在努力解决这个问题,在不久的将来,很有可能在 Deno 中使用 Protobuf。
与此同时,你可以在 Deno 应用程序中使用 Deno 标准库中的 JSON 来序列化和反序列化数据。JSON 易于使用、广泛支持,并且在 Deno 中具有出色的性能。