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
Rikito Taniguchi
September 09, 2017
Technology
1
190
Scala製インタプリタをブラウザで動かす3分クッキング
Rikito Taniguchi
September 09, 2017
Tweet
Share
More Decks by Rikito Taniguchi
See All by Rikito Taniguchi
Scala to WebAssembly: Exploring the How and Why
tanishiking
0
860
Scala to WebAssembly #scala_waiwai
tanishiking
0
1.1k
Scala Days Madrid 2023 参加レポート
tanishiking
0
53
Tooling for Scala3
tanishiking
0
360
API-Based Code Search
tanishiking
0
39
Things happening before start coding with Metals ~behind the curtain of daily coding~
tanishiking
0
560
How we replaced a 10-year-old Perl product using Scala
tanishiking
14
33k
Quick introduction to scalafix
tanishiking
1
170
Format things with scalafmt
tanishiking
1
1.9k
Other Decks in Technology
See All in Technology
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
640
AI時代のアジャイル開発(XP祭り2024版) / Agile Development in the AI Era in XPJUG
takaking22
13
3.4k
ガバメントクラウド開発と変化と成長する組織 / Organizational change and growth in developing a government cloud
kazeburo
2
400
テストコードの品質を客観的な数値で担保しよう〜Mutation Testのすすめ〜
ysknsid25
2
120
【shownet.conf_】AI技術とUX監視の応用でShowNetの基盤を支えるモニタリングシステム
shownet
PRO
0
270
Understanding and Optimising INP
akshayysharma
0
150
ITエンジニアとして知っておいてほしい、電子メールという大きな穴
logica0419
2
300
エムスリーマネジメントチーム紹介資料 / Introduction of M3 Management Team
m3_engineering
0
250
「ばん・さく・つき・たー!」にならないためにSHIROBAKOから 学んだこと
ysknsid25
3
140
RAGの性能を評価しよう
kurahara
1
280
成果のためのコミュニケーション - 語彙を育てよう -/communication-for-good-outcome-developing-vocabulary
hassaku63
4
140
CVE alive
ennael
PRO
0
360
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
93
13k
Design by the Numbers
sachag
278
19k
RailsConf 2023
tenderlove
28
840
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
44
2k
From Idea to $5000 a Month in 5 Months
shpigford
380
46k
Done Done
chrislema
181
16k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
What's new in Ruby 2.0
geeforr
341
31k
Six Lessons from altMBA
skipperchong
26
3.4k
Code Reviewing Like a Champion
maltzj
519
39k
Thoughts on Productivity
jonyablonski
67
4.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