问题标签 [rust-crates]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 如何确定一个 crate 是否与特定的 Rust 版本兼容?
如果我找到一个我想使用的板条箱,我如何才能知道该板条箱在哪些版本的 Rust 中可以正常工作?
rust - 相同代码的货物构建:虚假的编译时错误?
我有A
依赖B
并B
依赖于rust-nmea板条箱的板条箱。
如果我构建板条箱,我在构建rust-nmea依赖项期间A
遇到了一堆错误(所有这些都错过了):use std::error::Error;
但是如果我去B
crate 的源代码树并运行cargo build
,所有构建都没有任何错误(如果你跟着我A
依赖B
并B
依赖rust-nmea),
如果转到/home/evgeniy/.cargo/registry/src/github.com-1ecc6299db9ec823/nmea-0.0.6/
(请参阅编译错误)并运行,cargo build
那么一切都很好。
货物树显示A
:
并由cargo
rust-nmea缓存:
因此,无论好坏,都使用相同的依赖项。
如果运行cargo build -v -j1
,我得到rustc
了这两种情况的命令行。
好的和坏的情况的唯一区别是这部分:
bad case 有不同的库路径,而libnom-e2ec53418967eac0.rlib
不是libnom-b72336f662b090c1.rlib
, whilelibchrono-8e9e54e691d9b988.rlib
匹配。
板条箱A
和B
来源密切,我无法将问题简化为更简单的情况。nom crates 未在 rust-nmea 中使用A
,B
但通过rust-nmea除外。
rust-nmea的使用方式很简单,就nmea = 0.0.6
在Cargo.toml
. 没有旗帜之类的东西。
知道为什么具有相同标志(根本没有标志)的 crate 依赖可能会产生或不产生语法错误吗?
rust - 如何防止 Cargo 将相同的依赖项与不同的功能合并?
在弄清楚相同代码的货物构建之后:虚假的编译时错误?,我想知道如何防止这样的问题:
我在不修改任何代码的情况下删除/添加了依赖项,这会影响构建结果。
正如我所描述的,问题的根源是cexpr依赖于 nom ,如下所示:
而nmea像这样描述依赖关系:
只有 nmea 作为依赖项,Cargo 使用一组特征构建 nom,而 Cargo 使用另一组特征针对 nom 构建 cexpr 和 nmea。
我想要一种方法来防止我维护的 nmea 板条箱的这种错误使用。
我想要一个编译时错误"`nom` compiled with wrong features"
,或者强制 Cargo 构建 nom 的两个变体。
我尝试过这样的事情nmea/Cargo.toml
:
这没有任何改变;当 cexpr 和 nmea 组合时仍然存在编译时错误。
module - 是否有可能有一个模块可以在板条箱外部部分访问,而部分只能在板条箱内部访问?
有没有比把所有东西都放在同一个模块中更好的方法?
sub_module.rs
库文件
问题在于GiantStructBuilder::new_giant_struct()
;此方法应该创建一个新方法,GiantStruct
但要做到这一点,您需要pub fn new() -> GiantStruct
在内部sub_module.rs
或所有字段GiantStruct
都必须是公共的。这两个选项都允许从我的箱子外部访问。
在写这个问题时,我意识到我可以做这样的事情:
sub_module.rs
然而,这似乎真的违反直觉,因为通常调用者是正在行动的东西,而函数变量是被行动的东西,这样做显然不是这种情况。所以我还是想知道有没有更好的方法...
rust - 为什么我需要使用额外的 `::` 前缀来访问导入的结构?
在我的lib.rs
我想做的use std::fs::File
。
这是示例代码:
在没有出现::
之前File
我得到一个编译器错误:
我的问题是 -::
前缀总是必要的吗?我确定不是,但看不到如何执行此操作。
rust - 如何在不分叉 crate 的情况下将 #![feature(***)] 添加到另一个 crate 的属性?
每次我看到如下错误:
错误:关联的常量是实验性的(参见问题 #29646)
...
= 帮助:将 #![feature(associated_consts)] 添加到板条箱属性以启用
= 注意:此错误源自当前板条箱之外的宏
我 fork the crate 并将该功能添加到 crate 属性中,然后替换我的 Cargo.toml 中的依赖项:
有没有办法在不分叉板条箱的情况下摆脱这些错误?
rust - Rust crates(例如 num_cpus)是如何实现的?
我想知道 Rust crates 是如何实现的。
例如,有一个名为num_cpus
. 这个 crate 有这个基本方法num_cpus::get()
,它告诉你计算机中的 CPU 数量。
我的问题:
- 该方法是如何
num_cpus::get()
实现的(是否使用另一种语言完成?) - 使用纯 Rust 代码而不使用任何 crate 是否可以实现相同的结果?
rust - 用货物安装未注册的板条箱
我有一个未在 crates.io 上注册的板条箱 ( https://github.com/wilbertom/bichannels )。我想将它作为依赖项添加到我当前的 crate 中。我已经尝试进入它的目录(放置在外部板条箱内)并运行cargo install
,但这不起作用,而是给出了这个错误:
所以看起来只能安装一个二进制包,但是如何将一个库包添加到我的依赖项中呢?我试过添加:
到我的 Cargo.toml 但这只是说这个包不在 crates.io 上。
rust - 如何在 Cargo.toml 中包含未发布的依赖项/库?
我想构建一个当前未发布的库和一个使用它的应用程序。
如何在可执行应用程序的Cargo.toml
文件中包含未发布的库?
从查看创建文档来看,它看起来是这样的:
如何使用文件路径或 github/gitlab 存储库链接在 rust 项目中包含未发布的库?
testing - 在多个测试文件中使用相同的结构
我在tests
目录中有两个测试文件。每个测试文件都包含一个测试函数和一个通用结构。例如,它们都包含:
两个测试文件之间的结构MyStructure
完全相同。由于我的结构使用serde_derive
板条箱中的宏,因此需要该行#[macro_use] extern crate serde_derive
。
为了避免代码重复,我只想声明我的结构一次。据我了解,tests
目录中的每个文件都被编译为单独的 crate,因此似乎无法编辑测试文件并将结构定义放入tests
目录中的单独文件中:
这第一次尝试导致error[E0468]: an extern crate loading macros must be at the crate root
. 这是正常的,因为structure
现在是子模块。
删除#[macro_use] extern crate serde_derive;
fromstructure
也无济于事,因为structure
它是作为单独的 crate 编译的,现在Deserialize
找不到:error: cannot find derive macro Deserialize in this scope
.
MyStructure
将(包括宏使用)移动到单独的公共文件并为我的所有测试文件只定义一次的正确方法是什么?