在线写代码编译这种是如何实现的呢?

2020-08-06 09:06:40 +08:00
 chaohuang
如题, 很好奇在 web 给个输入框写代码, 然后执行展示结果是如何实现的呢?
3562 次点击
所在节点    程序员
10 条回复
whileFalse
2020-08-06 09:09:56 +08:00
OJ 系统嘛,就是把代码发到服务器上保存为文件,然后编译执行喽。

难点主要在于隔离,就是确保用户提交的代码即使包含恶意功能,也不能真正破坏服务器或窃取资料;以及用户代码不会用光服务器资源,确保并发能力。
hongch
2020-08-06 09:11:04 +08:00
如 1 楼所说,就是保存为文件然后用对应的环境编译就完事了
meiyoumingzi6
2020-08-06 09:15:19 +08:00
以下是在 golang 官网执行在找代码的时候提示

Waiting for remote server...


正如 1 楼所说,需要将代码发送到远端执行
shylockhg
2020-08-06 09:29:33 +08:00
1. server
2. wasm
vhysug01
2020-08-06 09:32:34 +08:00
有个类似 jupyter 的简单项目,zmq-pykernel, 就几个文件,比较好读,推荐看一下
no1xsyzy
2020-08-06 09:59:43 +08:00
有基于 wasm 的,在浏览器里实现一个解释器的做法。
但没什么地方在用,实现难维护难成本高,反而不如弄堆服务器做好隔离。
foil2
2020-08-06 10:23:54 +08:00
可以参考廖雪峰老师的 Remote Code Runner
https://mp.weixin.qq.com/s/IdgWJBgogK7oHXZCkv0Ivg
caviar
2020-08-06 11:39:14 +08:00
常见的是发到服务器上编译执行。
推荐一篇博客 https://blog.golang.org/playground 介绍 go playground 是怎么实现的,非常有趣。
包含如何伪造文件系统和网络,如何伪造时间(甚至跳过 sleep ),规避副作用使得结果可以复用。
aguesuka
2020-08-06 11:53:55 +08:00
不一定,js kotlin 直接在浏览器里跑
chaohuang
2020-08-06 14:45:54 +08:00
@whileFalse
@hongch
@meiyoumingzi6
@vhysug01
@shylockhg
@no1xsyzy
@foil2
@caviar
@aguesuka
感谢各位回复, 小弟去了解一下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/696022

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX