1
whileFalse 2020-08-06 09:09:56 +08:00 1
OJ 系统嘛,就是把代码发到服务器上保存为文件,然后编译执行喽。
难点主要在于隔离,就是确保用户提交的代码即使包含恶意功能,也不能真正破坏服务器或窃取资料;以及用户代码不会用光服务器资源,确保并发能力。 |
2
hongch 2020-08-06 09:11:04 +08:00
如 1 楼所说,就是保存为文件然后用对应的环境编译就完事了
|
3
meiyoumingzi6 2020-08-06 09:15:19 +08:00 via Android
以下是在 golang 官网执行在找代码的时候提示
Waiting for remote server... 正如 1 楼所说,需要将代码发送到远端执行 |
4
shylockhg 2020-08-06 09:29:33 +08:00
1. server
2. wasm |
5
vhysug01 2020-08-06 09:32:34 +08:00 1
有个类似 jupyter 的简单项目,zmq-pykernel, 就几个文件,比较好读,推荐看一下
|
6
no1xsyzy 2020-08-06 09:59:43 +08:00
有基于 wasm 的,在浏览器里实现一个解释器的做法。
但没什么地方在用,实现难维护难成本高,反而不如弄堆服务器做好隔离。 |
7
foil2 2020-08-06 10:23:54 +08:00 via Android 1
可以参考廖雪峰老师的 Remote Code Runner
https://mp.weixin.qq.com/s/IdgWJBgogK7oHXZCkv0Ivg |
8
caviar 2020-08-06 11:39:14 +08:00 1
常见的是发到服务器上编译执行。
推荐一篇博客 https://blog.golang.org/playground 介绍 go playground 是怎么实现的,非常有趣。 包含如何伪造文件系统和网络,如何伪造时间(甚至跳过 sleep ),规避副作用使得结果可以复用。 |
9
aguesuka 2020-08-06 11:53:55 +08:00 via Android
不一定,js kotlin 直接在浏览器里跑
|
10
chaohuang OP @whileFalse
@hongch @meiyoumingzi6 @vhysug01 @shylockhg @no1xsyzy @foil2 @caviar @aguesuka 感谢各位回复, 小弟去了解一下。 |