【发布时间】:2016-09-27 03:03:15
【问题描述】:
我正在用 Rust 编写一些小脚本。这些可以通过类似的命令运行
$ rustc dosomething.rs && ./dosomething
这些效果很好。但是,我遇到了需要使用正则表达式的情况。我以extern crate regex; 开始脚本,似乎这意味着我需要通过 Cargo 运行我的脚本。我设法使用正则表达式运行这个小脚本的唯一方法是强制我的脚本进入它自己的目录,结构如下:
.
├── Cargo.toml
└── src
└── main.rs
我加载了Cargo.toml
[package]
name = "wordcount"
version = "0.0.1"
[dependencies]
regex = "0.1"
并尽职尽责地运行 cargo build 并获得了我正在运行的可执行文件。
但是,在计算 Cargo 工件使用的磁盘空间时,我发现它们由 17 个文件、21 个目录和 23 兆字节组成。
现在这在运行大型应用程序时非常好;我似乎是小型 Java 应用程序,其中 Maven 下载了如此多的 jar,以至于 23M 是微观的。
我只是想知道是否没有其他方法可以在 Rust 中使用正则表达式编写脚本。 (是的,我确实想要正则表达式,因为\pL 易于使用。)
Rust 中是否有对正则表达式的内置支持,或者以某种方式将我的 wordcount 脚本与我的其他脚本放在同一目录中?有没有-L 标志的类似物?
【问题讨论】:
-
我认为您是说问题不是 Cargo,而是 Regex 板条箱及其依赖项的组合大小。我能想到的唯一选择是用 ffi 包装一个 C/C++ 正则表达式引擎,例如 pcre(并且不计算它的大小,假设它已经安装)。
-
您可以使单个 Cargo 项目编译多个二进制文件,这在技术上满足您将所有内容保存在同一目录中的标准。您还可以通过在
Cargo.toml中明确设置源路径来消除src目录本身。 -
你可以在没有 Cargo 的情况下使用 regex crate,但是你必须重复 Cargo 为你做的所有工作。例如,regex crate 有几个依赖项,您还必须安装这些依赖项。
-
对,这里真的没有问题。我理解 Rust 更像是一种企业或系统语言,而不是一种脚本语言,并且只是在尝试。我什至可以忍受可执行文件的大小和依赖关系,因为任何类型的构建系统都可以生成快速、原生的可执行文件,并拥有一个庞大的生态系统。我当然不会在这里指责 Rust,但想知道我是否可以使用 -L 构建可执行文件,并且不限于 Cargo 固执己见的源目录结构。我认为多二进制货物项目是最好的选择。
标签: regex rust rust-cargo