Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scala製インタプリタをブラウザで動かす3分クッキング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Rikito Taniguchi
September 09, 2017
Technology
230
1
Share
Scala製インタプリタをブラウザで動かす3分クッキング
Rikito Taniguchi
September 09, 2017
More Decks by Rikito Taniguchi
See All by Rikito Taniguchi
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Capture Checking / Separation Checking 入門
tanishiking
0
500
Implementing and Evaluating a High-Level Language with WasmGC and the Wasm Component Model: Scala’s Case
tanishiking
0
670
Scala meets WebAssembly
tanishiking
0
910
Why Wasm+WASI for Scala
tanishiking
0
130
Scala to WebAssembly: Exploring the How and Why
tanishiking
1
1.8k
Scala to WebAssembly #scala_waiwai
tanishiking
0
1.8k
Scala Days Madrid 2023 参加レポート
tanishiking
0
100
Tooling for Scala3
tanishiking
0
430
Other Decks in Technology
See All in Technology
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
120
AI時代のIssue駆動開発のススメ
moongift
PRO
0
320
AIにより大幅に強化された AWS Transform Customを触ってみる
0air
0
230
Databricks Appsで実現する社内向けAIアプリ開発の効率化
r_miura
0
160
DMBOKを使ってレバレジーズのデータマネジメントを評価した
leveragestech
0
490
LLMに何を任せ、何を任せないか
cap120
11
6.7k
CREがSLOを握ると 何が変わるのか
nekomaho
0
320
BFCacheを活用して無限スクロールのUX を改善した話
apple_yagi
0
140
Microsoft Fabricで考える非構造データのAI活用
ryomaru0825
0
540
JAWS DAYS 2026でAIの「もやっと」感が解消された話
smt7174
1
120
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
170
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
270
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
200
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Designing for humans not robots
tammielis
254
26k
Building Applications with DynamoDB
mza
96
7k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Claude Code のすすめ
schroneko
67
220k
Are puppies a ranking factor?
jonoalderson
1
3.2k
Transcript
Scala 製インタプリタをブラウザで動かす 3 分クッ キング id:tanishiking24 Scala 関西 Summit2017 1
こんにちは • • twitter @tanishiking • id:tanishiking24 • Web アプリケーションエンジニア@はてな
• 主に Scala、たまに TypeScript/Perl 2
今日作るもの • https://github.com/tanishiking/MLScala 3
手順 • インタプリタを作る • Scala.js でビルドする • UI を書く •
完成! 4
インタプリタを作る このあたりを参考に頑張る • https://github.com/ksuenaga/IoPLMaterials • http://esumii.github.io/min-caml/ パーサコンビネータに fastparse 使った 5
インタプリタを作る こちらにあらかじめ作ったものが 6
Scala.js でビルドする 公式ドキュメントを参考に build.sbt をいじる • crossProject で shared,js,jvm 用にプロジェクト分ける
• コアロジックは shared 以下につっこむ、雑に全部ごっちゃに すると sbt test が動かなくなったり • https://github.com/scala-js/scala-js/issues/739 7
Scala.js でビルドする • export するモジュールやメソッドを annotation で指定 • プログラムの文字列を入力として print
メソッドに渡した値の 文字列を返す簡素な API import scalajs.js.annotation._ @JSExportTopLevel(”ML”) object Interpreter { @JSExport def interpret(input: String): String = { // ... 8
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
完成!! http://tanishiking.github.io/MLScala/ 10
まとめ • 普通に動いてすごい • 面白 AltJS くらいの印象だったけど Scala 製モジュールのデモ に良さそう
• ブラウザで動かしたいけど JS で書きたくないモジュールある よね 11