#script-runner #scripting #launch #basic #aimed #zero #near

app papyrust

一个旨在接近零启动延迟的非常基本的 Rust 脚本运行器

2 个版本

0.1.1 2022年3月25日
0.1.0 2022年3月25日

#1888命令行工具

Apache-2.0

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

当我在这份非常严肃的文档的开头说“非常基本”的时候,那并不是一个玩笑。

  1. 您的脚本必须是一个完整的 Cargo 项目,即使它什么都不做。
  2. 脚本必须位于您的项目目录中——这是 Papyrust 确定项目位置的方式。
  3. 脚本的基本名称必须与 Cargo 产生的二进制文件名称匹配。也就是说,如果二进制文件名为 supermegafancyemptyproject,您将不得不在 supermegafancyemptyproject 项目目录中使用 supermegafancyemptyproject.pp。是的。实际上,扩展名并不重要,因为 Papyrust 忽略它,所以您不需要将 pp 插入到每个脚本名称中。
  4. 只有当 src 子目录中的任何文件都比 cargo 生成的二进制文件新,或者二进制文件缺失时,Papyrust 才会构建你的项目。因此,如果你在项目构建后向 src 中添加一些额外的文件,例如未使用的模块,每次你运行脚本时,项目都会被重新编译。你知道,Cargo 太聪明了,它会缓存二进制文件及其最后修改时间,而这个时间将是在过去的,因为相关的源代码没有变化,而我真的不想解析你项目中所有的 mod 声明来找出哪些源代码是相关的。
  5. 它只以发布模式编译你的脚本。

因此,基本上,它仅仅可以勉强工作,专门针对那些懒得自己运行 cargo build --releasecargo install --path . 的人,显然,这不是最先进的 Rust 代码的最佳示例。

祝你好运 😄

依赖项

~0.2–7MB
~43K SLoC