【发布时间】:2014-11-01 00:28:17
【问题描述】:
我花了几天的时间研究这个看似简单的问题:是否可以在浏览器中运行 C 代码?基本上,我在 Appengine 中设置了一个站点,需要运行一些由(一组受信任的)用户提供的 C 代码并运行它,并将代码的输出返回给用户。我有两个选择:要么我需要在浏览器中完全运行代码,要么找到某种方法让 Python 在没有任何系统调用的情况下运行这个 C 代码。
我看到了对我的问题的不同回答。我见过像 Emscripten 这样的解决方案,但这不起作用,因为我需要在浏览器中生成 LLVM 代码(我无法在 AppEngine 中运行编译器。)我尝试了各种技术,包括从 codepad.org 上的输出页面抓取,但我将产生的输出非常高,以至于我无法使用像 codepad.org 这样的服务,因为它们会修剪输出(我的输出将是大约 20,000 行,每行约 60 个字符,已修剪由于超时而通过键盘)。我最后的办法是制作自己的服务器来处理来自我的 Appengine 站点的请求,但这似乎有点极端。
我的用户提供的代码将是非常简单的 C。他们的代码不会调用任何 I/O 或系统操作。不幸的是,我可能不能简单地在他们的代码中使用查找/替换操作将其转换为 Javascript,因为他们可能使用多维数组甚至类之类的结构。
我可以限制我的用户使用一个跨平台浏览器,例如铬或火狐。谁能帮我找到这个问题的解决方案?这几天我一直很困惑。
【问题讨论】:
-
你能用 Emscripten 编译 LLVM 并运行它吗?
-
是否可以纯粹使用 Javascript 将 C 编译为 LLVM?我不明白怎么做这样的事情。
-
使用 Emscripten 编译 LLVM 编译器。
-
看看Tiny CC:“直接编译执行C源”。也许,使用 libtcc,很容易集成到 Python 中。
标签: javascript python c google-app-engine browser