为 Code Runner 新增 Go 和 Rust 两种编译型语言,沿用现有 base 镜像分层结构。 Go: - run_cmd 直接用 go run(单条命令,内部编译+运行) - 镜像把 GOCACHE/GOTMPDIR/GOPATH 重定向到 /tmp tmpfs (只读根文件系统下 /Users/issuser/.cache 不可写) - default_limits: 1 核 / 256MB / 10s(编译冷启动比解释型慢) Rust: - rustc 编译 + 运行是两步,但 docker.rs 注入脚本用 exec 执行 run_cmd, exec 替换 shell 进程后 'A && B' 后半段不执行, 因此镜像内置 /usr/local/bin/run-rust.sh wrapper 封装两步 - default_limits: 1 核 / 512MB / 15s(rustc 内存大、编译慢) 新增镜像与白名单后,默认 CODE_RUNNER_LANGUAGES=python,node,go,rust。
14 lines
694 B
Bash
14 lines
694 B
Bash
#!/bin/sh
|
||
# Rust 源码编译并运行的 wrapper。
|
||
#
|
||
# 背景:src/infra/docker.rs 的源码注入脚本为
|
||
# sh -c "cat > /code/main.rs && exec {run_cmd}"
|
||
# 其中 exec 会用 run_cmd 进程替换 sh 进程。若直接写
|
||
# "rustc -o /tmp/main /code/main.rs && /tmp/main"
|
||
# exec 替换后 && 后半段永远不会执行(exec 成功即不再返回 shell)。
|
||
# 因此必须把「编译 + 运行」封装进本脚本,由 sh 解释执行:
|
||
# rustc 编译成功后,再用 exec 替换为编译产物,避免多一层常驻进程。
|
||
#
|
||
# 编译产物写到 /tmp/main(tmpfs 64m 可写;只读根文件系统下 / 不可写)。
|
||
rustc -o /tmp/main /code/main.rs && exec /tmp/main
|