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

寻找一个在线运行 c++的方案

  •  
  •   yuzhixin411416 · 19 小时 59 分钟前 · 1286 次点击

    我想做个少儿编程网站

    最基础的功能是能够做到在线运行 c++代码,输入输出能够动态持续的进行

    这种都用什么方案呀

    类似学而思的小猴编程: https://www.xiaohoucode.com/

    第 1 条附言  ·  29 分钟前
    感谢提供思路,给大家一个小红包吧,支付宝口令:我爱 v2 谢谢大家
    19 条回复    2025-01-21 11:39:57 +08:00
    yuzhixin411416
        1
    yuzhixin411416  
    OP
       19 小时 52 分钟前
    一个新的例子: https://www.onlinegdb.com/
    tool2dx
        2
    tool2dx  
       19 小时 49 分钟前 via Android
    搜 clang wasm online ,有大佬做过,能编译简单代码。
    zsh2517
        3
    zsh2517  
       19 小时 35 分钟前
    @yuzhixin411416 应该是容器化或者类似的东西。实际发送到一个 Linux 机器执行(做好安全措施)

    neofetch 是个 shell 脚本,https://github.com/dylanaraps/neofetch/blob/master/neofetch 。贴过来运行

    https://onlinegdb.com/XmASG-pIl

    输出:

    runner30@Check
    --------------
    OS: Ubuntu 22.04.4 LTS x86_64
    Host: Google Google Compute Engine
    Kernel: 6.8.0-1020-gcp
    Uptime: 1 hour
    Packages: 1268 (dpkg)
    Shell: sh
    Theme: Adwaita [GTK3]
    Icons: Adwaita [GTK3]
    CPU: Intel Xeon (8) @ 2.799GHz
    Memory: 2658MiB / 7937MiB
    iYume
        4
    iYume  
       19 小时 29 分钟前
    直接参照 OJ 平台源码呗,更 awesome 一点,甚至可以 jupyter + c++ REPL
    yuzhixin411416
        5
    yuzhixin411416  
    OP
       19 小时 20 分钟前
    @tool2dx 这个我试了,有 std::cin 的代码不停下来等我输入
    yuzhixin411416
        6
    yuzhixin411416  
    OP
       19 小时 18 分钟前
    @zsh2517 这种我能理解,但是动态输入输出这块搞不明白,如何能做到 执行到 std::cin 能够等待我输入
    gam2046
        7
    gam2046  
       18 小时 52 分钟前
    唔,这种方案是否可行,接受到用户输入的代码后,创建一个 websocket 到后端。

    后端将代码写入文件,然后 docker run -rm -it -v user_input.c:/workspaces/user_input.c some_image bash -c "gcc user_input.c -o main && chmod +x main && ./main"

    然后后端将这个 docker 进程的输入输出流直接 transfer 到 websocket ,应该能实现一个简单的在线运行效果。剩下的就是提高安全性的操作了
    NavilleZhang
        8
    NavilleZhang  
       18 小时 3 分钟前
    mahaoqu
        10
    mahaoqu  
       17 小时 19 分钟前
    其实这一切都不需要服务器。你只需要用 JS 写一个 C++ 解释器,然后实现一个 TTY ,用它实现 STL 里的 iostream 就可以了。如果只是为了教学连 POSIX 都不需要实现,还是很容易的(笑)
    tool2dx
        11
    tool2dx  
       17 小时 8 分钟前
    @mahaoqu 对于我们这些写过 wasm 的不难,对于楼主要实现这些,估计挺难的。要和 GPT 聊上个大半天。
    zsh2517
        12
    zsh2517  
       17 小时 3 分钟前
    @yuzhixin411416 #5 如果要实时的话,关键词 pty 。或者简单一点直接接管 stdio 也行

    参考项目: https://github.com/tsl0922/ttyd 可以看效果
    shylockhg
        13
    shylockhg  
       16 小时 59 分钟前
    有服务器直接发到服务器运行,没有可以研究 wasm
    myderr
        14
    myderr  
       16 小时 45 分钟前
    不知道这个行不行,这个现在可以运行 node 环境 https://webcontainers.io/
    wnpllrzodiac
        15
    wnpllrzodiac  
       14 小时 0 分钟前 via Android
    vscode server
    flyqie
        16
    flyqie  
       13 小时 53 分钟前 via Android
    @yuzhixin411416 #6

    stdin 和 stdout 重定向一下就可以了。

    wasm 和远程跑可以自己选,远程跑比较好扩展,而且对客户端需求没那么高,当然劣势也明显。
    flyqie
        17
    flyqie  
       13 小时 53 分钟前 via Android
    @flyqie #16

    哦对了,可能还得重定向下 stderr
    yuzhixin411416
        18
    yuzhixin411416  
    OP
       55 分钟前
    感谢各位彦祖,最终测试 pty 完美符合我的希求,就连图形输出也一并解决了
    yuzhixin411416
        19
    yuzhixin411416  
    OP
       34 分钟前
    感谢提供思路,给大家一个小红包吧,支付宝口令:我爱 v2 谢谢大家
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3815 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:14 · PVG 12:14 · LAX 20:14 · JFK 23:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.