5

我第一次接触 Scala 是通过SimplyScala 教程:你不需要安装任何东西,就可以开始编写代码。几个小时后,我爱上了这种语言......

多年后,我为一个作为 Play 应用程序的 Scala 库编写了一个 Web 文档。构建像 SimplyScala 这样的东西并将其集成到文档中会很酷,这样用户就可以在浏览器中输入 Scala 命令并返回结果。

SimplyScala 在 Google App Engine 上的工作方式类似于LotREPLS(旧的开源 Java 项目,只有几个 LOC)。

是否也可以在我自己的服务器上创建这样的东西而不会出现安全漏洞(例如,用户不应该从服务器读取文件......)?

我只需要 Scala 语言的“基础”而不需要任何导入,就像在 SimplyScala 中一样。

我的第一个想法是编写一个自己的 SecurityManager 并处理超时,这样用户就不会消耗太多的服务器时间。有没有更简单的方法或现有的开源项目?

还是建议用户安装 Scala 并使用终端而不是浏览器更合理?;-)

在 Scala 主页上,有一个类似于Summer of Code 2012 Scala Projects的 Play-project 想法:但我找不到任何结果。

4

4 回答 4

7

到目前为止,最安全的可能是http://www.scala-js-fiddle.com/(GitHub上的代码),因为它甚至不在服务器上运行代码,而是在客户端上运行!

问题是:它不是真正的 Scala 代码,它是Scala.js,它是 Scala 的一种方言,仍处于实验阶段,等等。但这对于您的用例来说可能已经足够了。

于 2014-06-10T21:49:49.243 回答
6

回答我自己的问题:

Scala 控制台,不关心安全性(?):

一个以某种方式处理安全性的 Web 界面:

令人印象深刻的Scalakata 项目Source 在GitHub 上

这是一个 Lift 项目,它定义了一个自己的安全管理器(请参阅src/main/scala/com.github.masseguillaume/security参考资料)并处理超时(请参阅 参考资料src/main/scala/com.github.masseguillaume/service/KateEval.scala)。现在我必须想,如果这足够安全......

于 2013-03-17T14:07:31.563 回答
2

https://codebrew.io/似乎与 Scala REPL 一样好用

可在https://github.com/CodeBrew-io获取代码

于 2014-06-10T21:42:14.040 回答
2

和:libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value

编译器 ( scala.tools.nsc.Global)

这是评估 scala 代码的最准确方法。 将在类加载器用法compileSources中添加一个新类

重复

用法

JSR-223

import javax.script.ScriptEngineManager
val e = new ScriptEngineManager().getEngineByName("scala")
e.put("n", 10)
e.eval("1 + n") // 11

反射工具箱

import scala.reflect.runtime.{currentMirror => cm}
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox
val tb = cm.mkToolBox()
tb.eval(tb.parse("1+1"))
// res0: Any = 2

演示(交互式)编译器 ( scala.tools.nsc.interactive.Global)

这是用于自动完成和其他交互功能。 文档

用法

于 2014-07-03T18:57:21.293 回答