2 个版本
0.1.1 | 2022年3月25日 |
---|---|
0.1.0 | 2022年3月25日 |
#1888 在 命令行工具
8KB
93 行
纸莎草是一个非常基本的 Rust 脚本运行器,旨在接近零启动延迟。它主要是由于我之前使用的其他此类运行器(我将不提及其名称),在启动实际脚本之前至少有 100 毫秒的延迟,这可能是由于在未检查源代码更改的情况下调用 cargo build
所致。
如何使用
- 安装 Papyrust(确保
$HOME/.cargo/bin
已添加到您的PATH
)cargo install papyrust
- 为您的 Rust 脚本创建一个 Cargo 项目,为了简单起见,我们称之为
x
cargo init x
- 在项目目录中创建一个名为
x.pp
的 shell 脚本,并使其可执行cd x echo '#!/usr/bin/env papyrust' > x.pp chmod +x x.pp
现在您可以直接启动您的脚本
./x.pp
或者将其放入您的 $HOME/bin
、/usr/local/bin
或其他任何地方
ln -s /home/coolhacker/devel/x/x.pp ~/bin
如果您想像我一样酷,可以从任何地方启动它。
而 Papyrust 的全部意义在于这一点
# First time
time x
Compiling x v0.1.0 (/home/coolhacker/devel/x)
Finished release [optimized] target(s) in 0.40s
x 0,34s user 0,08s system 80% cpu 0,515 total
# From now on, until you change the source code
time x
x 0,00s user 0,00s system 86% cpu 0,003 total
当我在这份非常严肃的文档的开头说“非常基本”的时候,那并不是一个玩笑。
- 您的脚本必须是一个完整的 Cargo 项目,即使它什么都不做。
- 脚本必须位于您的项目目录中——这是 Papyrust 确定项目位置的方式。
- 脚本的基本名称必须与 Cargo 产生的二进制文件名称匹配。也就是说,如果二进制文件名为
supermegafancyemptyproject
,您将不得不在supermegafancyemptyproject
项目目录中使用supermegafancyemptyproject.pp
。是的。实际上,扩展名并不重要,因为 Papyrust 忽略它,所以您不需要将pp
插入到每个脚本名称中。 - 只有当
src
子目录中的任何文件都比 cargo 生成的二进制文件新,或者二进制文件缺失时,Papyrust 才会构建你的项目。因此,如果你在项目构建后向src
中添加一些额外的文件,例如未使用的模块,每次你运行脚本时,项目都会被重新编译。你知道,Cargo 太聪明了,它会缓存二进制文件及其最后修改时间,而这个时间将是在过去的,因为相关的源代码没有变化,而我真的不想解析你项目中所有的mod
声明来找出哪些源代码是相关的。 - 它只以发布模式编译你的脚本。
因此,基本上,它仅仅可以勉强工作,专门针对那些懒得自己运行 cargo build --release
或 cargo install --path .
的人,显然,这不是最先进的 Rust 代码的最佳示例。
祝你好运 😄
依赖项
~0.2–7MB
~43K SLoC