HVM1 构建指南:从源码编译、安装到 Nix 打包的完整实践
语言运行时编译器高性能计算【免费下载链接】HVM1HVM1 (2022): a massively parallel, optimal functional runtime in Rust项目地址https://gitcode.com/GitHub_Trending/hv/HVM1点击查看免费下载HVM1 是 HVMHigher-order Virtual Machine的早期核心版本一个用 Rust 编写的「大规模并行、beta-最优」函数式运行时详见 README.md。本文以仓库根目录的 BUILDING.md 为主线系统讲解如何从源码克隆、用 Cargo 直接构建运行、安装全局可执行文件以及如何通过 Nix 完成构建与打包并结合src/main.rs、Cargo.toml、flake.nix等源码与配置文件说明每个命令背后的实际行为。读完本文你将能够在本地完整复现 HVM1 的构建环境并掌握解释运行、编译为原生二进制、Nix 开发环境三种使用路径。构建前置环境Rust nightly 工具链HVM1 的运行时与编译器全部由 Rust 编写且依赖若干 unstable 特性。仓库根目录的 rust-toolchain.toml 只有一行关键配置[toolchain] channel nightly这表示必须使用 Rust nightly 工具链才能编译本仓库。src/main.rs 第一行即#![feature(atomic_from_mut)]说明源码直接使用了仅 nightly 提供的 feature使用 stable 工具链将无法通过编译。同时Cargo.toml 声明了项目元信息包名hvm1版本1.0.12edition 2021同时构建cdylib与rlib两种库形态crate-type [cdylib, rlib]便于被其他 Rust 项目以库方式引用唯一的[[bin]]可执行目标名为hvm1[profile.release]显式将opt-level设为3保证发布构建启用最高优化等级依赖包括clapCLI 参数解析、crossbeam并发、sysinfo系统信息、itertools等。安装 nightly 工具链的典型做法与 README.md 中的 Getting Started 一致curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh rustup toolchain install nightly安装完成后可用rustup show确认当前目录识别到 nightly 工具链。第一步克隆仓库BUILDING.md 给出的第一步是克隆源码并进入目录git clone https://github.com/HigherOrderCO/HVM.git cd HVM本仓库对应的实际源码目录即当前工作区项目名 HVM1包名hvm1克隆后即可直接进行下一步构建。仓库根目录包含构建相关的关键文件BUILDING.md、NIX.md、Cargo.toml、rust-toolchain.toml、flake.nix、shell.nix、default.nix 与 flake.lock。方式一直接构建并以解释器运行BUILDING.md 给出的核心命令是cargo run -- run foobar.hvm这条命令会先编译整个 crate然后以解释模式执行foobar.hvm中的程序。它的语义由 src/main.rs 中的 CLI 定义决定run子命令别名r接受一个file参数-f/--file默认值为空字符串和一个表达式参数默认值为Main。当file为空时load_code直接返回空字符串因此run也可以直接接收一个内联表达式例如 README 中的入门示例hvm1 run (x( x 1) 41)若需要加载文件则用-f显式指定例如hvm1 run -f foobar.hvm。注意当前仓库 Cargo.toml 中[[bin]]名称为hvm1因此cargo run直接构建得到的可执行文件是hvm1若你安装的是发布版hvm命令前缀以实际安装名为准。run子命令还提供以下可调参数来自 src/main.rs参数含义默认值-s, --size堆大小按 64 位节点计数auto调用runtime::default_heap_size()-t, --tids使用的线程数auto调用runtime::default_heap_tids()-c, --cost显示执行的图重写次数false-d, --debug调试模式逐步显示每次归约false-f, --file要加载的.hvm文件空字符串expr位置参数要运行的表达式Main值得注意的是当开启-d调试模式时src/main.rs 会将tids强制置为1即单线程逐步执行。启用-c后运行结束会在 stderr 输出耗时、重写次数与每秒重写率RPS例如 guide 中展示的格式[TIME: 0.96s | COST: 35000007 | RPS: 36.38m]。仓库中的examples/hello/main.hvm是最简单的验证用例// HVMs Hello, world! is just a string! Main Hello, world!可以运行cargo run -- run -f examples/hello/main.hvm来验证整条构建链路是否打通。方式二构建并安装全局二进制如果希望将 HVM1 安装为系统级的可执行文件BUILDING.md 给出的命令是cargo install --path .cargo install --path .会编译当前目录的 crate并把生成的可执行文件安装到 Cargo 的 bin 目录通常为~/.cargo/bin由CARGO_HOME决定。由于[profile.release]中opt-level 3cargo install默认使用 release 配置因此安装的是高优化版本。安装完成后即可在任何目录直接调用该命令解释运行 HVM 程序例如hvm1 run (x( x 1) 41)如果你通过 crates.io 或 git 安装的是hvm包参见 guide/README.md 中的cargo nightly install --force --git https://github.com/HigherOrderCO/HVM.git则命令前缀为hvm且可用hvm --version验证安装是否成功。进阶将 .hvm 编译为 Rust 原生二进制BUILDING.md 主文档未展开但其引用的 NIX.md 与源码中均包含「编译到 Rust」的完整路径run是解释执行而compile子命令别名c会把.hvm文件编译为一个完整的 Rust 项目。src/main.rs 中该命令的实现为读取.hvm源码调用compiler::compile将定义预编译进归约引擎并打印Compiled definitions to /name.。编译后的产物是一个独立的 Rust 仓库其中所有.hvm顶层定义都被预编译进归约引擎见 src/compiler/compile.rs它通过模板替换把precomp.rs、reducer.rs中的//[[CODEGEN:...]]//占位符替换为生成的 Rust 代码因此运行速度远高于解释模式。guide/README.md 展示的完整流程为hvm compile summation.hvm cd summation cargo install --path . summation run -c true (Sum 0 0 100000000)也就是说编译产物的可执行文件行为与hvm命令一致但无需再加载文件即可直接调用其中定义的函数如Sum并显著提速。仓库的 bench/benchmark.js 也印证了这一构建流程先hvm compile main.hvm再进入生成的main目录执行cargo build --release最后将target/release/main移出作为基准测试用二进制。方式三使用 Nix 构建BUILDING.md 最后一行将 Nix 构建指引指向 NIX.md。该文档给出了完整的 Nix 使用流程此处完整继承其关键命令。前提安装 Nix 并启用 Flakes先安装 Nix官方安装手册并启用 Flakes 特性然后克隆仓库git clone https://github.com/HigherOrderCO/HVM.git cd HVM访问/安装 HVM 二进制两种可选方式临时进入开发 shell不安装到系统或永久安装到 Nix profile# 进入一个自带 hvm 命令的 shell不安装 nix shell .#hvm # 安装到 Nix profile nix profile install .#hvm上述.#hvm指向 flake.nix 中声明的输出该 flake 使用nix-cargo-integrationnci自动生成 derivationoutputs.defaults将应用与包名均设为hvm并配置clang作为 C 编译器、openssl作为运行时库。flake 还通过nix-filter只把构建必需目录./src、Cargo.lock、Cargo.toml、rust-toolchain.toml纳入 derivation以减小构建体积见 flake.nix。编写 HVM 文件与普通使用方式相同创建.hvm文件参考 guide/README.md 的 First program 一节例如// Sums all numbers in the (a .. b) range (Sum 1 a b) a (Sum 0 a b) let m (/ ( a b) 2) let n ( m 1) let l (Sum ( a m) a m) let r (Sum ( n b) n b) ( l r)解释运行或编译运行NIX.md 给出的运行/编译命令为# 解释 main.hvm 中的表达式传入 (Main 25) 作为参数 hvm run -f main.hvm (Main 25) # 将其编译为 Rust hvm compile main.hvm cd main # 初始化 Nix 开发 shell nix develop .#hvm # 编译生成的 Rust 代码 cargo build --release # 运行得到的二进制 ./target/release/main run (Main 25)注意此处nix develop .#hvm与nix shell .#hvm的差异nix develop会进入包含构建工具链含ghc、nodejs等见 flake.nix 的shell.commands配置的开发环境专用于在编译生成的 Rust 项目内执行cargo build而nix shell .#hvm只提供现成的hvm可执行命令。常见问题与注意事项必须 nightly仓库依赖atomic_from_mut等 unstable 特性src/main.rs请确保rustup toolchain install nightly已执行且工具链解析到 nightly。二进制命名差异本仓库 Cargo.toml 中 bin 名为hvm1BUILDING.md / NIX.md / README 中的命令示例使用hvm。实际使用时应以安装的包与二进制名为准命令语义完全一致。run与compile的区别run走解释器路径src/main.rscompile生成预编译的 Rust 工程src/main.rs后者面向生产与基准测试场景性能更高。性能观测加-c可输出图重写次数COST与 RPS用于与机器无关的算法复杂度度量详见 guide/README.md 与 PARALLELISM.md。Hello World 验证最小用例见 examples/hello/main.hvm构建完成后可用它快速验证整条链路。延伸阅读NIX.mdNix 构建与开发的完整命令清单guide/README.mdHVM 语言语法、并行函数设计、编译与内建函数的使用指南guide/HOW.md底层技术Interaction Net、beta-最优归约原理src/main.rsCLI 子命令与参数的全部定义flake.nixNix flake 的 derivation 配置细节。赞分享语言运行时编译器高性能计算【免费下载链接】HVM1HVM1 (2022): a massively parallel, optimal functional runtime in Rust项目地址https://gitcode.com/GitHub_Trending/hv/HVM1点击查看免费下载相关推荐Nix 源码构建开发指南从 devShell 到交叉编译的完整实践Nix 源码构建开发指南从 devShell 到交叉编译的完整实践 本文是 Nix纯函数式包管理器源码仓库的开发Hacking入门指南基于仓库根目录包管理器开发工具CLI构建工具3 步装好 eSearch跨平台屏幕截屏与离线 OCR 工具快速上手指南3 步装好 eSearch跨平台屏幕截屏与离线 OCR 工具快速上手指南 eSearch 是一款覆盖 Windows、Linux 与 macOS 的跨平台屏幕桌面应用OCR屏幕录制视频处理图像处理PowerInfer模型转换从Hugging Face到GGUF格式的完整指南PowerInfer模型转换从Hugging Face到GGUF格式的完整指南 你是否曾经遇到过这样的困境在Hugging Face上找到了心仪的大语言模型人工智能大模型推理引擎本地部署上一篇为什么AtCoder Library能提升竞赛编程效率内部实现原理揭秘下一篇iii Engine 协议深度解析Worker 与引擎之间的 WebSocket 线级通信规范创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →