软件开发者 Simon Willison 发布了 `micropython-wasm`,这是一个处于 Alpha 阶段的库,旨在为在大型应用程序中执行不受信任的 Python 代码提供一个安全、隔离的沙箱环境。
Willison 强调,对于像 Datasette 和 LLM 这样的项目,沙箱环境是必不可少的,这样可以在不影响系统稳定性、文件完整性或网络安全的前提下,实现功能强大且可扩展的插件系统。在发现现有的 Python 沙箱解决方案不可靠或维护不善后,他转向了 WebAssembly (WASM)。
通过利用 `wasmtime` 库和一个自定义编译的 MicroPython 版本,Willison 创建了一个稳健的沙箱,它提供了内存/CPU 限制、受限的文件系统访问,以及选择性公开宿主函数的能力。一个关键的突破是在多次调用之间保持了持久的解释器状态,从而支持复杂的多步代码执行。
尽管目前该工具仍处于 Alpha 阶段,但已可通过 PyPI 获取,并与 Datasette 生态系统集成。Willison 承认新沙箱固有的风险,但他希望这一原型能够鼓励专业安全团队进一步开发和标准化 Python-in-WASM 解决方案,以实现生产级的沙箱环境。
本项目提供了一套轻量级、与渲染器无关的实时抖动物理标准,在简单的布娃娃系统与复杂的软体模拟之间找到了平衡点。通过使用 UV 映射权重绘制和阻尼弹簧骨骼,开发者可以定义出能随父级运动而真实抖动的柔软区域。
**核心组件:**
* **`jiggle-physics.js`**:纯粹的模拟引擎,基于父级的速度和加速度计算阻尼弹簧偏移量。它与渲染器无关,不需要 DOM 或 WebGL,可轻松集成到任何游戏循环中。
* **变形逻辑**:采用简单的通用公式 `vertex += weight * boneJiggle` 来驱动运动,从而实现局部的“肉体回弹”以及挤压和拉伸效果。
* **资源标准**:使用 UV 映射的权重纹理来定义柔软度(0–1)和骨骼分配。这种方法性能极高,每个顶点仅需一次纹理查找。
随附的 WebGL 演示(`jiggle-app.js` 和 `index.html`)展示了该系统的实际运行效果,其中包含用于绘制权重、调整物理参数(刚度、阻尼、重力)以及测试各种几何体的工具。该系统专为广泛的可移植性而设计;任何支持基础向量数学的引擎均可实现此标准。