V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chaohuang
V2EX  ›  程序员

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

  •  
  •   chaohuang ·
    huangchaosysu · 2020-08-06 09:06:40 +08:00 · 3330 次点击
    这是一个创建于 1331 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题, 很好奇在 web 给个输入框写代码, 然后执行展示结果是如何实现的呢?
    10 条回复    2020-08-06 14:45:54 +08:00
    whileFalse
        1
    whileFalse  
       2020-08-06 09:09:56 +08:00   ❤️ 1
    OJ 系统嘛,就是把代码发到服务器上保存为文件,然后编译执行喽。

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

    Waiting for remote server...


    正如 1 楼所说,需要将代码发送到远端执行
    shylockhg
        4
    shylockhg  
       2020-08-06 09:29:33 +08:00
    1. server
    2. wasm
    vhysug01
        5
    vhysug01  
       2020-08-06 09:32:34 +08:00   ❤️ 1
    有个类似 jupyter 的简单项目,zmq-pykernel, 就几个文件,比较好读,推荐看一下
    no1xsyzy
        6
    no1xsyzy  
       2020-08-06 09:59:43 +08:00
    有基于 wasm 的,在浏览器里实现一个解释器的做法。
    但没什么地方在用,实现难维护难成本高,反而不如弄堆服务器做好隔离。
    foil2
        7
    foil2  
       2020-08-06 10:23:54 +08:00 via Android   ❤️ 1
    可以参考廖雪峰老师的 Remote Code Runner
    https://mp.weixin.qq.com/s/IdgWJBgogK7oHXZCkv0Ivg
    caviar
        8
    caviar  
       2020-08-06 11:39:14 +08:00   ❤️ 1
    常见的是发到服务器上编译执行。
    推荐一篇博客 https://blog.golang.org/playground 介绍 go playground 是怎么实现的,非常有趣。
    包含如何伪造文件系统和网络,如何伪造时间(甚至跳过 sleep ),规避副作用使得结果可以复用。
    aguesuka
        9
    aguesuka  
       2020-08-06 11:53:55 +08:00 via Android
    不一定,js kotlin 直接在浏览器里跑
    chaohuang
        10
    chaohuang  
    OP
       2020-08-06 14:45:54 +08:00
    @whileFalse
    @hongch
    @meiyoumingzi6
    @vhysug01
    @shylockhg
    @no1xsyzy
    @foil2
    @caviar
    @aguesuka
    感谢各位回复, 小弟去了解一下。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2864 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:13 · PVG 21:13 · LAX 06:13 · JFK 09:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.