有没有一种方法可以在浏览器中本地运行C程序?

4

是的,有一个重复的问题,但是它是5年前提出的,并且很长时间没有更新。

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

有一个名为WasmFiddle的平台可以在浏览器中将C编译为wasm,但它缺乏标准库的支持,例如stdio.h。我认为我们可以在js中实现标准库,或许还可以将其导出到wasm中?但这需要大量的工作。

我的原始目标是构建一个基于Web的IDE,供学生学习C编程而不需要花费大量的服务器成本来进行远程运行。因此,只需要像stdio.h、math.h、string.h这样的库。

更新:这个似乎是将libc实现到wasm的一个很好的示例。

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


在浏览器中使用标准库运行C程序是没有任何意义的。即使您拥有整个C库,也无法使用它。浏览器不允许直接从其JavaScript运行时与系统进行交互,这是一项安全措施。 - Marco Bonelli
最终目标是什么?允许用户输入C程序吗? - user5734311
你想使用标准库的哪些特性? - dvhh
4个回答

6

性能不会成为问题,因为这是为初学者设计的,用于运行非常简单的程序,例如练习“if”语句。 - Yuxuan Lu
CIB是一个很好的解决方案,但目前还有一些小bug。一个简单的helloworld程序在我的浏览器上引发了“内存访问越界”的错误。 - Yuxuan Lu

2

如果你想要对使用emscripten和其他相关技术所能实现的事情有一些惊人的认识,可以查看Fabrice Bellard的作品,包括Tiny C CompilerTiny EmuJsLinux

JsLinux基本上在JavaScript中运行虚拟机,Bellard展示了运行Linux和Windows2000的例子。


0

您有两个选择,要么获取某种能够运行C语言编译的体系结构的浏览器虚拟机,要么使用 EMScripten 编译到 WASM。

毫无疑问,WASM 是更好的选择,因为它在所有(体验良好的)浏览器中都得到了本地支持。


0

你可以选择使用虚拟机,将所有内容放入其中。Clang作为二进制文件运行一些输入代码,并将某些二进制文件编译为输出,然后再在虚拟机中运行。这样就全部在客户端完成,但由于虚拟化而导致性能下降。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接