#nlp #unsafe #lifetime

bin+lib rust_hero

利用自然语言处理(NLP)增强 Rust 代码质量的 Rust 助手

6 个版本

0.5.2 2022 年 10 月 31 日
0.5.1 2022 年 10 月 31 日
0.4.2 2022 年 10 月 13 日

#714机器学习

Apache-2.0

76KB
977

Rust 的附加工具

rust_hero 是一个利用自然语言处理(NLP)增强 Rust 代码质量的 Rust 助手。它支持 unsafelifetime(待办)预测。

[dependencies]
rust_hero = "0.5"

分类 unsafe Rust 代码

对于 Rust 中的每个函数,unsafe 关键字使用了 unsafe 超能力。然而,如果可以在编译程序时移除它,则不需要 unsafe 关键字。

rust_hero 无需重新编译即可推断 unsafe 关键字的必要性。rust_hero 训练一个基于 microsoft/codebert 的模型,并利用 BERT 的强大推理能力来推断 unsafe 的必要性。

声明

本项目中的语言查询实现基于 BrianHicks/tree-grepper

性能

在 Intel I7-12700K CPU 和 NVIDIA 3080 12GB GPU 上,rust_hero 推断一个 Rust 文件平均需要 2.06 秒和 2.90 秒。

rust_hero 用 Rust 编写,在 GPU 和 CPU 上分别比用 Python 语言编写的 rust_hero 快 6.58 倍和 13.04 倍。 推理加速

Rust 中 rust_hero 相对于 Python 中 rust_hero 的推理加速

安装

rust_hero 的运行时依赖项

sudo apt install build-essential cmake pkg-config libssl-dev wget zip git

下载 tree-grepper 供应商(cargo build 也会自动下载供应商)

bash ./scripts/runtime.sh

它使用 libtorch-1.12.0 (参见 rust-bert)进行 rust_hero 推理。请从以下链接下载 CPU 或 CUDA 版本的 libtorch

CPU: https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.12.0%2Bcpu.zip
CUDA: https://download.pytorch.org/libtorch/cu116/libtorch-cxx11-abi-shared-with-deps-1.12.0%2Bcu116.zip

解压文件并在 .bashrc 中设置环境路径

export LIBTORCH=$libtorchDir$/libtorch
export LD_LIBRARY_PATH=${LIBTORCH}/lib:$LD_LIBRARY_PATH
source .bashrc

或者在工作目录的 'envConfig' 中

export LIBTORCH=$libtorchDir$/libtorch
export LD_LIBRARY_PATH=${LIBTORCH}/lib:$LD_LIBRARY_PATH
source envConfig

准备 rust_hero 测试的 rust 数据(可选)

从包括 rust-openssltokioanyhowhyperrandregexrayon 在内的开源 rust 项目中精心挑选了 50 个 rust 文件用于测试

bash ./scripts/prepare_data.sh

rust_hero 的示例用法

cargo run data/error.rs

rust_hero 也支持将一个目录下所有的 rust 文件进行分类

cargo run data/

依赖项

~27–39MB
~678K SLoC