时间:2021-07-01 10:21:17 帮助过:94人阅读
如果需要的是现成的解决方案,这个就不错:
https://github.com/mattgodbolt/gcc-explorer
效果预览:
Compiler Explorer
如果是针对传统使用方法的编程语言实现一个的话涉及的内容很杂,包括:
后端核心就是一个类似调用系统给的类似execl的API执行一下对应编译工具,用这个API时还得精心处理一下管道,把输出内容导出来显示回网页。
但是因为这类程序和OJ一样,是网络上的公共服务而且居然还允许用户上传代码编译执行,所以问题主要集中在安全处理上,而且安全问题的处理高度依赖操作系统。
以Linux为例,安全方面包括但不仅包括以下内容:
Windows下是另一堆问题要解决,比Linux复杂得多(也许是我不太会用Windows)。
我认识一人,自己实现了一个类似Haskell的东西,有和Go Playground差不多的在线运行网页,我问他怎么那么快把那么多东西都搞完了,他说,“整个语言就是用JS实现的,所以有浏览器就能运行,不需要后端”,这也是一种思路。
前两天的课程设计上正好根同学一块儿设计了一个简单的在线比赛平台,而且平时也经常到网站上做比赛,就简单说下它的实现吧。exec("./onj $destFile $file", $output, $verdict);这就是调用判题功能,原则上可以用任何语言写。onj就是用python写的,对代码进行编译,运行和判断。它需要得到一个比赛题目的标准输入,将标准输出重定向到一个文件中,然后对标准答案进行对比,可以得出用户提交的代码是否能得出正确的结果。
//from onj project - Processfile.php - line 105