diff --git a/.cargo/config.toml b/.cargo/config.toml index 0eb087ef..a4455e10 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,11 @@ [build] rustflags = ["-D", "warnings"] +# sccache 编译缓存:重复构建(切分支、profile 变动、clean 后重编)命中缓存直接 +# 复用产物,跳过 rustc。缓存目录默认 ~/.cache/sccache(上限 10G)。 +rustc-wrapper = "sccache" + +[target.x86_64-unknown-linux-gnu] +# mold 链接器:并行链接,比 GNU ld 快 5 至 10 倍(98M 二进制链接 4.4s 降到 +# 亚秒级)。走 cc 驱动的 -fuse-ld=mold(不能直接 linker="mold":rustc 会把 +# cc 驱动参数 -m64/-Wl, 原样传给 mold,mold 不认)。对 dev 与 release 全 profile 生效。 +rustflags = ["-C", "link-arg=-fuse-ld=mold"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6928c9dd..670af193 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,12 @@ jobs: - uses: Swatinem/rust-cache@v2 + # .cargo/config.toml 依赖 sccache(rustc-wrapper)与 mold(-fuse-ld=mold), + # 两者均在 Ubuntu 仓库中。CI 同样受益:sccache 配合 rust-cache 命中缓存, + # mold 并行链接。 + - name: Install sccache and mold + run: sudo apt-get update -y && sudo apt-get install -y sccache mold + - name: Check formatting run: cargo fmt --all -- --check diff --git a/Cargo.lock b/Cargo.lock index c4713888..2b0b3903 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "oxide_builtins" -version = "0.14.9" +version = "0.14.10" dependencies = [ "chrono", "fast-float", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "oxide_bytecode" -version = "0.14.9" +version = "0.14.10" dependencies = [ "num-bigint", "oxide_log", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "oxide_cfg" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_emit", @@ -1204,7 +1204,7 @@ dependencies = [ [[package]] name = "oxide_cli" -version = "0.14.9" +version = "0.14.10" dependencies = [ "ansi_term", "bumpalo", @@ -1226,7 +1226,7 @@ dependencies = [ [[package]] name = "oxide_code_cache" -version = "0.14.9" +version = "0.14.10" dependencies = [ "lru", "oxide_bytecode", @@ -1235,7 +1235,7 @@ dependencies = [ [[package]] name = "oxide_compiler" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1255,7 +1255,7 @@ dependencies = [ [[package]] name = "oxide_dce" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "oxide_emit" -version = "0.14.9" +version = "0.14.10" dependencies = [ "num-bigint", "oxc_allocator", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "oxide_engine" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1296,7 +1296,7 @@ dependencies = [ [[package]] name = "oxide_ir" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_log", @@ -1305,7 +1305,7 @@ dependencies = [ [[package]] name = "oxide_kernel" -version = "0.14.9" +version = "0.14.10" dependencies = [ "bumpalo", "dashmap", @@ -1319,7 +1319,7 @@ dependencies = [ [[package]] name = "oxide_liveness" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1331,7 +1331,7 @@ dependencies = [ [[package]] name = "oxide_log" -version = "0.14.9" +version = "0.14.10" dependencies = [ "tracing", "tracing-appender", @@ -1340,7 +1340,7 @@ dependencies = [ [[package]] name = "oxide_parser" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1355,7 +1355,7 @@ dependencies = [ [[package]] name = "oxide_regalloc" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_cfg", @@ -1371,7 +1371,7 @@ dependencies = [ [[package]] name = "oxide_runtime_api" -version = "0.14.9" +version = "0.14.10" dependencies = [ "num-bigint", "num-traits", @@ -1384,7 +1384,7 @@ dependencies = [ [[package]] name = "oxide_test262" -version = "0.14.9" +version = "0.14.10" dependencies = [ "oxide_bytecode", "oxide_compiler", @@ -1402,7 +1402,7 @@ dependencies = [ [[package]] name = "oxide_types" -version = "0.14.9" +version = "0.14.10" dependencies = [ "bumpalo", "dashmap", @@ -1415,7 +1415,7 @@ dependencies = [ [[package]] name = "oxide_vm" -version = "0.14.9" +version = "0.14.10" dependencies = [ "bumpalo", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 0de81615..3d548250 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ ] [workspace.package] -version = "0.14.9" +version = "0.14.10" edition = "2021" license = "MIT" rust-version = "1.80" @@ -69,10 +69,23 @@ all = { level = "deny", priority = -1 } warnings = { level = "deny", priority = -1 } [profile.release] -opt-level = 3 -lto = true -codegen-units = 1 +# 快速 release:日常墙时间 A/B 与 test262 release 回测用。opt-level 2 与 3 的 +# 运行时差距对解释器可忽略,但 lto 关闭加 codegen 并行把编译时间从数十分钟 +# 压到分钟级。性能基线重锚(release 全量 bench)时如需最优码再临时切回 +# opt-level=3 / lto=true / codegen-units=1。 +opt-level = 2 +lto = false +codegen-units = 256 +debug = 0 panic = "abort" +# 本机 CPU 指令集(AVX2 等):解释器热路径墙时间再挤 5 至 15%。产物绑定本机 +# 微架构,不可跨机移植(本机开发机与 CI 各自源码构建,无影响)。 +target-cpu = "native" + +[profile.dev] +# 行表级调试信息:产物体积降 5 至 10 倍(单个 oxide CLI 约 160M 降到 30M 量级), +# 堆栈回溯仍带行号,日常单测与断点不受影响。 +debug = 1 # 上游 0.11.1 的 Unicode 表缺 Script/Script_Extensions 的 Unknown(Zzzz,未分配 # 码点集)取值,规范合法模式 \p{Script=Unknown} 无法编译。vendor 补丁在 0.11.1