• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chaohuang
V2EX  ›  程序员

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

  •  
  •   chaohuang ·
    huangchaosysu · Aug 6, 2020 · 4728 views
    This topic created in 2282 days ago, the information mentioned may be changed or developed.
    如题, 很好奇在 web 给个输入框写代码, 然后执行展示结果是如何实现的呢?
    10 replies  •  2020-08-06 14:45:54 +08:00
    whileFalse
    whileFalse
    Aug 6, 2020❤️1
    1
    OJ 系统嘛,就是把代码发到服务器上保存为文件,然后编译执行喽。

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

    Waiting for remote server...


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