Web REPL架构

Web REPL architecture

我想为我的自定义解释器制作网络 REPL。让我解释一下我的想法。当用户在浏览器中编写代码然后点击 "evaluate" 按钮时,代码会通过用 JS 编写的 linter 和验证器(验证器和 linter 将作为单独的模块),如果 OK 代码通过 ajax 发送到服务器。然后在服务器上为该代码评估创建单独的环境。评估该代码后,结果返回给浏览器。所以我不知道的是如何以及使用什么工具为客户端代码评估创建单独的环境。如果那是对的,我的问题是:我应该在服务器上安全地对 运行 客户端代码做什么?我想与主要 OS 分开。可能 docker 可以提供帮助?

使用一些不错的 HTTP 服务器库,例如 libonion. Be sure to understand well HTTP

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

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

容器化(使用 docker)是一种额外的安全措施,但即使没有容器化,也要将服务器端代码设计为安全的(因此请检查那里的所有内容)。

如果您还没有阅读它们,请阅读 SICP, the Dragon Book, Lisp in Small Pieces, Programming language pragmatics, the GC handbook and this blog article, quite related in concepts (but with a very different terminology and approach, and indirectly related) to that one

I want to make web REPL for my custom interpreter.

那么您甚至可以从 1980 年代的 Mentor system (and the related, even older, Centaur one). My Bismon draft report explains more how and why, but you need to abstract away from its title and skip its first few pages, required by European H2020 官僚主义中获得更多灵感。我个人对 MentorCentaur 的看法是,那里描述的想法比他们的时代提前了 25 年以上,而且,鉴于当前的力量计算机(比 1980 年代好 1000 倍)值得让那些旧想法复活。我认为,这些想法 实用实用 失败的主要原因可能是 1980 年代工作站缺乏计算机能力。

PS。另见 this