xfy c624997c04 feat(code-runner): add Go and Rust language support
为 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。
2026-07-09 09:40:32 +08:00

14 lines
694 B
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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/maintmpfs 64m 可写;只读根文件系统下 / 不可写)。
rustc -o /tmp/main /code/main.rs && exec /tmp/main