我与Scala的第一次接触是通过SimplyScala tutorial:你不需要安装任何东西,只能开始编码。几个小时后我爱上了这门语言......
多年以后,我为Scala库编写了一个Web文档作为Play应用程序。构建像SimplyScala这样的东西并将其集成到文档中会很酷,这样用户就可以在浏览器中输入Scala命令并获得结果。
SimplyScala在Google App Engine上的工作方式类似于LotREPLS(只有少数LOC的旧开源Java项目)。
也可以在我自己的服务器上创建这样的东西而不会出现安全漏洞(例如,用户不应该从服务器读取文件......)
我只需要Scala语言的“基础”而不需要像SimplyScala那样的任何导入。
我的第一个想法是编写一个自己的SecurityManager并处理超时,这样用户就不会消耗太多的服务器时间。有没有更简单的方法或现有的开源项目?
或者建议用户安装Scala并使用终端而不是浏览器更合理? ; - )
在Scala主页上有Summer of Code 2012 Scala Projects类似的Play项目创意:但我找不到任何结果。
答案 0 :(得分:7)
到目前为止,最安全的可能是http://www.scala-js-fiddle.com/(code on GitHub),因为它甚至不在服务器上运行代码,而是在客户端运行!
问题是:它不是真正的Scala代码,它是Scala.js,这是Scala的方言,仍然是实验性的等等。但可能足够为您的用例。
答案 1 :(得分:6)
回答我自己的问题:
Scala控制台,不关心安全性(?):
一个处理某种安全性的网络界面:
令人印象深刻的Scalakata project,来源位于GitHub。
这是一个Lift项目,它定义了一个自己的安全管理器(参见src/main/scala/com.github.masseguillaume/security
)并处理超时(参见src/main/scala/com.github.masseguillaume/service/KateEval.scala
)。现在我必须考虑,如果这足够安全......
答案 2 :(得分:2)
https://codebrew.io/似乎与Scala REPL一样好用
获取答案 3 :(得分:2)
with:libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
scala.tools.nsc.Global
)这是评估scala代码的最准确方法。
compileSources
将在类加载器中添加一个新类
usage
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
)这适用于自动完成和其他互动功能。 doc