有没有办法在浏览器中本地 运行 C 程序?

Is there a way to run C program locally in a browser?

有,有a duplicate problem,不过5年前问过,好久没更新了

2020年,随着WebAssembly的发展,有没有办法在浏览器本地编译和运行一个简单的C程序?

有一个平台WasmFiddle可以在浏览器中将C编译成wasm,但是缺少标准库的支持,比如stdio.h。我认为我们可以在 js 中实现标准库,然后将其导出到 wasm?但这需要大量的工作。

我最初的目标是建立一个基于 Web 的 IDE 让学生学习 C 编程而不需要在服务器上花费很多钱来远程 运行ning。因此,只需要像 stdio.h、math.h、string.h 这样的库。

更新:this 似乎是 libc 到 wasm 的一个很好的实现。

不需要高性能,因此基于 wasm 的解决方案和可能在 JS 中实现的 VM 运行ning c 都是很好的解决方案。

Emscripten and WASM 是这里的两个流行解决方案。

不要指望出色的性能,但您应该可以 link 为您的 JavaScript、CSS 和 HTML代码编辑和控制台视图。

如果您对 运行 服务器没问题,那么您可以使用此 Jupyter Notebook kernel: https://github.com/jupyter-xeus/xeus-cling

这是 WASM 中的示例,没有服务器:https://github.com/tbfleming/cib

如果您想了解使用 emscripten 和其他相关技术可以做什么,请查看 Fabrice Bellard, on Tiny C Compiler, Tiny Emu, and JsLinux

的工作

JsLinux,基本上在JavaScript中运行虚拟机,Bellard 有运行 Linux 和Windows2000[=11= 的例子]

你可以去核,把所有东西都放在一个虚拟机中,在一些输入代码上作为二进制文件 运行s 并编译一些二进制文件作为输出,然后在虚拟机中再次 运行 .所有客户端,由于虚拟化导致性能下降。

示例:https://twitter.com/alexpignotti/status/1261357985617469442?s=20(我的一位同事正在研究这个问题)

你有 2 个选择,要么你得到某种在浏览器中运行的虚拟机,它能够运行某种 C 可以编译到的架构,或者你使用 EMScripten 编译到 WASM .

WASM 显然是更好的选择,因为所有(体面的)浏览器都支持它