在 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。
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。