Web REPL 架构

4

我想为我的自定义解释器制作一个Web REPL。让我解释一下我的想法。当用户在浏览器中编写代码,然后单击“评估”按钮时,代码通过JS编写的检查器和验证器进行检查(验证器和检查器将作为独立模块),如果没有问题,代码将通过ajax发送到服务器。然后在服务器上为该代码评估创建单独的环境。评估完成后,结果返回到浏览器。所以我不知道的是如何使用什么工具为客户端代码评估创建单独的环境。如果这样正确,我的问题是:在服务器上应该怎么做才能安全地运行客户端的代码?应该从主操作系统中分离出来。也许Docker可以帮助吗?


你使用的自定义编程语言是什么?你已经明确了它的语法和语义吗?你使用的自定义解释器是一些免费软件吗? - Basile Starynkevitch
简单的Lisp解释器 - Егор Лебедев
(Lisp)我用Python写的,只是在学习阶段,代码可能不太好,还有很多需要改进的地方。但如果你愿意,可以批评并发表评论来帮助我。https://github.com/egorsmth/lispy - Егор Лебедев
让我们继续在聊天室中进行这个讨论。链接:http://chat.stackoverflow.com/rooms/158247/discussion-between-basile-starynkevitch-and--。 - Basile Starynkevitch
1
注意我刚刚如何改进了我的答案。 - Basile Starynkevitch
显示剩余4条评论
1个回答

3

使用一些好的HTTP服务器库,比如libonion。确保充分理解HTTP

即使您在JavaScript中进行了客户端验证,也不要信任它并在服务器端重复验证。恶意用户可以发送直接的HTTP请求(超出您的AJAX范围)。

使用会话和cookie来识别(在服务器端)各个客户端浏览器,并为每个浏览器保留单独的环境(用于服务器端解释器)。实现具有隔离(会话和环境)功能的可重入解释器。

容器化(使用Docker)是额外的安全措施,但即使没有这种安全措施,也要设计您的服务器端代码以确保安全性(因此请检查所有内容)。

如果您还没有阅读过它们,可以阅读SICPDragon BookLisp in Small PiecesProgramming language pragmaticsGC handbook和这篇博客文章,它们与概念相关(但术语和方法非常不同,间接相关),那个也是如此。

我想为我的自定义解释器制作Web REPL。

然后,您甚至可以从1980年代的导师系统(以及相关的、更古老的半人马系统)中获得更多启发。我的Bismon草案报告解释了更多的如何和为什么,但您需要忽略其标题并跳过其前几页,这是欧洲H2020官僚机构要求的。我个人对导师半人马的看法是,那里描述的思想超前于其时代25年以上,考虑到当前计算机的强大性能(比1980年代好1000倍),值得重新挖掘那些旧思想。我认为,导致这些想法实用实际失败的可能主要原因是1980年代工作站的计算机性能不足。

PS. 请参见this


谢谢,我停止了语言理论的学习,但仍然愿意阅读您推荐的内容,或许能够获得一些灵感 :) 我的整个编程之旅始于SICP。 - Егор Лебедев
在Ron Burgundy不朽的话语中,“嗯,情况升级了。”开玩笑的,我想把这个答案打印出来,并装裱起来。 - toraritte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接