5

Scalaとの最初の接触は、SimplyScalaチュートリアルを通じてでした。何もインストールする必要はなく、コーディングを開始するだけです。数時間後、私はその言語に恋をしました...

数年後、私はPlayアプリケーションとしてScalaライブラリのWebドキュメントを作成しました。SimplyScalaのようなものを構築し、それをドキュメントに統合して、ユーザーがブラウザーでScalaコマンドを入力し、結果を取り戻すことができるようにするのはすばらしいことです。

SimplyScalaは、Google App EngineのLotREPLS(LOCが少ない古いOpen-Source-Java-Project)のように機能します。

セキュリティホールを取得せずに自分のサーバーでこのようなものを作成することも可能ですか(たとえば、ユーザーはサーバーからファイルを読み取らないでください...)?

SimplyScalaのように、インポートなしでScala言語の「ベース」が必要です。

私の最初のアイデアは、独自のSecurityManagerを作成し、タイムアウトを処理して、ユーザーがサーバー時間を使いすぎないようにすることです。より簡単な方法や既存のオープンソースプロジェクトはありますか?

それとも、Scalaをインストールして、ブラウザーの代わりにターミナルを使用するようにユーザーにアドバイスする方が合理的ですか?;-)

Scalaのホームページには、 Summer of Code 2012 Scala Projectsの同様のPlayプロジェクトのアイデアがありますが、結果が見つかりません。

4

4 に答える 4

7

おそらくこれまでで最も安全なのはhttp://www.scala-js-fiddle.com/(GitHubコード)です。これは、サーバーではなくクライアントでコードを実行するからです。

落とし穴は次のとおりです。それは本当にScalaコードではなく、Scalaの方言であるScala.jsであり、まだ実験的であるなどです。しかし、ユースケースにはそれで十分かもしれません。

于 2014-06-10T21:49:49.243 に答える
6

私自身の質問に答える:

セキュリティを気にしないScalaコンソール(?):

なんらかのセキュリティを処理する1つのWebインターフェイス:

印象的なScalakataプロジェクト、SourceはGitHubにあります。

これは、独自のセキュリティマネージャ(を参照)を定義し、src/main/scala/com.github.masseguillaume/securityタイムアウト(を参照)を処理するLiftプロジェクトですsrc/main/scala/com.github.masseguillaume/service/KateEval.scala。今、私はそれが十分に安全であるかどうかを考えなければなりません...

于 2013-03-17T14:07:31.563 に答える
2

https://codebrew.io/はScalaREPLとして非常にうまく機能しているようです

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に新しいクラスを追加し ます

Repl

IMain

利用方法

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

これは、オートコンプリートやその他のインタラクティブ機能用です。 doc

利用方法

于 2014-07-03T18:57:21.293 に答える