我想制作一个包含可重用库(实现大部分程序)的Rust包,以及使用它的可执行文件.
假设我没有混淆Rust模块系统中的任何语义,我的Cargo.toml文件应该是什么样的?
刚刚找到Rust并阅读了文档的前两章,我发现他们定义语言的方法和方式特别有趣.所以我决定让我的手指湿润,开始使用Hello world ...
我在Windows 7 x64上这样做了,顺便说一下.
fn main() {
println!("Hello, world!");
}
Run Code Online (Sandbox Code Playgroud)
发行cargo build并查看结果targets\debug我发现所得.exe的存在3MB.经过一些搜索(很难找到货物命令行标志的文档......)我找到了--release选项并创建了发布版本.令我惊讶的是,.exe大小只变小了一小部分:2.99MB而不是3MB.
因此,承认我是Rust及其生态系统的新手,我的期望是系统编程语言会产生紧凑的东西.
任何人都可以详细说明Rust正在编译的内容,如何通过3个线程程序生成如此巨大的图像?它是否正在编译为虚拟机?我错过了一个strip命令(在发布版本中调试信息吗?)?还有什么可能让我们了解正在发生的事情?
如何从包中的Rust代码访问Cargo包的元数据(例如版本)?在我的情况下,我正在构建一个命令行工具,我希望有一个标准的--version标志,我希望实现读取包的版本,Cargo.toml所以我不必在两个地方维护它.我可以想象还有其他人可能想要从程序中访问Cargo元数据.
我想用a daemon和a 创建一个项目client,通过unix socket连接.
A client和a daemon需要两个二进制文件,那么如何判断Cargo从两个不同的源构建两个目标?
为了增加一些幻想,我希望有一个library主要部分daemon,并且只需要一个二进制文件来包裹它并通过套接字进行通信.
所以,我们有这种树架构:
??? Cargo.toml
??? target
| ??? debug
| ??? daemon
? ??? client
??? src
??? daemon
? ??? bin
? ? ??? main.rs
? ??? lib
? ??? lib.rs
??? client
??? bin
??? main.rs
Run Code Online (Sandbox Code Playgroud)
我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非这是非常好的做法.
为了了解Rust的工作原理,我决定查看一个名为Iota的基于终端的文本编辑器.我克隆了存储库并且cargo build只是被告知:
Run Code Online (Sandbox Code Playgroud)error: *if let* syntax is experimental help: add #![feature(if_let)] to the crate attributes to enable
我应该在哪里添加#![feature(if_let)]到箱子属性?
我想更新我用于cargo install全局安装软件包的软件包,例如rustfmt或racer.我没有找到更新已安装软件包的方法,而不先删除它(通过cargo uninstall),然后再次运行install命令.有更新命令吗?
我有一个实现lint插件的Rust库.我想包括compiletest,但不要求在测试之外.指定依赖项仅用于测试的正确方法是什么?
是否可以使 Visual Studio Codecargo fmt在文件保存时运行?
以下命令
$ cargo build
Run Code Online (Sandbox Code Playgroud)
生成带有调试信息的非优化构建.反之,
$ cargo build --release
Run Code Online (Sandbox Code Playgroud)
生成优化的构建,无需调试信息.
有没有办法用调试信息生成优化的构建?我需要这个来获得有意义的分析信息.
我用brew命令安装了rustup,但仍然说找不到rustup命令。我不确定我是否缺少任何安装步骤。任何帮助,将不胜感激。