在 swift 中包装像 facebook 的 ZStandard 这样的库?

wrapping a library like facebook's ZStandard in swift?

Facebook 创建了一种开源快速无损压缩算法,针对 zlib 级别的实时压缩场景和更好的压缩比,称为 ZStandard

我一直在寻找描述 c 到 swift 包装的教程,例如 this,但看起来不够全面,在编写包装器之前我必须了解哪些先决条件?

谢谢你的好问题。我看过图书馆并玩过它,看起来很有趣。

我会说您需要在 C 程序中熟练使用 ZSTD C 库。您还需要熟悉 Swift 中的编程。根据要包装的 API 部分,您可能需要了解如何处理 Swift(Unsafe... 类型)中的原始内存。

包装 ZSTD 时需要考虑的一些挑战:

  • 带词典的流式传输 API 是实验性的,并受 变化,但使用词典是 ZSTD 的优势之一。
  • 在处理内存缓冲区时,我们希望尽量减少复制它们, 因为缓冲区可能非常大并且复制它们会产生不利影响 影响性能。这当然会使内存管理复杂化。

编写包装器时,您可以选择多种方法。例如,您可以用 C 语言编写包装器,它会公开您将包装在 Swift 中的简单 API。您可以在包装器框架中包含 C 代码,也可以将其保存在单独的 C 库中。

我想出了一个围绕 API 的一小部分进行包装的简单示例,您可以看一下 https://github.com/omniprog/SwiftZSTD