Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala製インタプリタをブラウザで動かす3分クッキング

 Scala製インタプリタをブラウザで動かす3分クッキング

Rikito Taniguchi

September 09, 2017
Tweet

More Decks by Rikito Taniguchi

Other Decks in Technology

Transcript

  1. Scala.js でビルドする 公式ドキュメントを参考に build.sbt をいじる • crossProject で shared,js,jvm 用にプロジェクト分ける

    • コアロジックは shared 以下につっこむ、雑に全部ごっちゃに すると sbt test が動かなくなったり • https://github.com/scala-js/scala-js/issues/739 7
  2. Scala.js でビルドする • export するモジュールやメソッドを annotation で指定 • プログラムの文字列を入力として print

    メソッドに渡した値の 文字列を返す簡素な API import scalajs.js.annotation._ @JSExportTopLevel(”ML”) object Interpreter { @JSExport def interpret(input: String): String = { // ... 8
  3. UI を作る • ビルド成果物の JS を雑に読み込んで、さっき export したメ ソッドを実行したらなんか動く •

    標準出力は console に出てくる ... <script src=”./js/target/scala-2.12/mlscala-fastopt.js”></scrip ... <script> const result = ML.interpret('let x = 1 in print x;;'); </script> 評価結果を適当な div につっこんで表示する感じで 9
  4. まとめ • 普通に動いてすごい • 面白 AltJS くらいの印象だったけど Scala 製モジュールのデモ に良さそう

    • ブラウザで動かしたいけど JS で書きたくないモジュールある よね 11