gpt4 book ai didi

rust - 有什么办法可以在Rust库中包含二进制文件或文本文件?

转载 作者:行者123 更新时间:2023-12-03 11:48:29 24 4
gpt4 key购买 nike

我正在尝试创建一个库,并且我想在其中包含一些二进制(或文本)文件,这些文件将包含将在运行时解析的数据。

我的意图是控制这些文件,不断进行更新,并在每次更新中更改库的版本。

可以通过 cargo 吗?如果是这样,我如何从我的图书馆访问这些文件?

我想到的一种解决方法是包括一些带有结构和/或常量的.rs文件,例如&str,这些文件将存储数据,但我觉得它很丑。

编辑:

我已将可接受的答案更改为更适合我的情况的答案,但是请查看Shepmaster's answer,因为这可能更适合您的情况。

最佳答案

免责声明:我在评论中提到了它,但是我在这里再次重申,因为它给了我更多的阐述空间。

正如Shepmaster所说,可以使用include_bytes!include_str!宏将文本或二进制逐字记录包含在Rust库/可执行文件中。

但是,以您的情况,我会避免这样做。通过将内容的解析推迟到运行时:

  • 您允许构建有缺陷的工件。
  • 会产生(更多)运行时开销(解析时间)。
  • 您将招致(更多)空间开销(解析代码)。

  • Rust承认了这个问题,并提供了多种旨在克服这些限制的代码生成机制:
  • 宏:如果可以将逻辑编码为宏,则可以将其直接包含在源文件中
  • 插件:通电的宏,可以对任意逻辑进行编码并生成详细的代码(请参见regex!)
  • build.rs:一个独立的“Rust脚本”,在编译本体之前运行,其作用是生成.rs文件

  • 在您的情况下, build.rs脚本听起来很合适:
  • 通过将解析代码移到那里,您可以提供更轻量的工件
  • 通过提前解析
  • ,您可以交付更快的工件
  • 通过提前解析
  • ,您可以提供正确的工件

  • 解析的结果可以用不同的方式编码,从函数到静态(可能是 lazy_static!),因为 build.rs可以生成任何有效的Rust代码。

    您可以在 the Cargo Documentation中看到如何使用 build.rs;您将在这里找到如何将其与Cargo集成以及如何创建文件(以及更多)。

    关于rust - 有什么办法可以在Rust库中包含二进制文件或文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62377073/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com