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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Rikito Taniguchi

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