可执行代码块(API Playground)
带 run 标记的代码块可以在浏览器里直接运行,结果内联展示在本页。无需任何后端——JavaScript 在页面内执行,Rust 代码通过 Rust Playground 公开 API 编译运行。
网络依赖
运行需要浏览器能访问目标 API。Rust Playground 与 GitHub API 在中国大陆偶尔超时,失败时错误面板会给出排查提示,稍后重试即可。
运行 Rust
点下面的「运行」按钮,代码会被发送到 Rust Playground 编译执行,展示程序 stdout 与 cargo 编译日志(stderr):
fn main() {
let pins = ["GPIO1_A0", "GPIO1_A1", "I2C1_SDA", "I2C1_SCL"];
for (i, pin) in pins.iter().enumerate() {
println!("pin {i}: {pin}");
}
let sum: u32 = (1..=100).sum();
println!("1+2+...+100 = {sum}");
}
编译错误不是"请求失败"——正常运行并展示 stderr 里的错误信息:
fn main() {
let x: u32 = "not a number";
println!("{x}");
}
通过 metastring 覆盖编译选项(edition / channel / mode):
fn main() {
// 2021 edition 与 2024 行为一致的简单示例
let v = vec![1, 2, 3];
let total: i32 = v.iter().sum();
println!("total = {total}");
}
运行 JavaScript
js run 块在页面内执行,支持顶层 await,fetch 与 console 输出都会被捕获展示:
const res = await fetch('https://api.github.com/repos/facebook/docusaurus');
const repo = await res.json();
console.log('stars:', repo.stargazers_count);
console.log('topics:', repo.topics);
发送 POST 请求:
const res = await fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({title: 'hello', body: 'from browser', userId: 1}),
});
console.log('status:', res.status);
console.log(await res.json());
作者指南
标记语法
| 写法 | 效果 |
|---|---|
```js run | 页面内执行 JS(new Function,支持顶层 await) |
```rust run | 提交 Rust Playground 编译运行 |
```rust run edition=2024 channel=stable mode=release | 覆盖 Playground 选项(默认 stable/debug/2024) |
限制
- CORS:JS 路径要求目标 API 允许跨域(
Access-Control-Allow-Origin),否则浏览器拦截——错误面板有提示。 - 超时:单请求 15s,JS 整体 30s,Rust(含编译)60s。
- 本地缓存:运行成功的结果缓存在浏览器 localStorage(7 天,最多 100 条),命中缓存不再发请求——代码或选项一变,缓存键自动失效。面板上「重新运行」可绕过缓存强制执行。
- Rust Playground 是第三方免费服务(无 SLA,偶发限流),只提供
bincrate 单文件编译运行,无法访问网络与本地设备。 - CSP:
js run依赖unsafe-eval;若未来站点启用严格 CSP,JS 路径会失效(rust 不受影响)。