Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
scala-native 試してみた
Search
AGAWA Koji
May 27, 2016
Programming
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
scala-native 試してみた
社内 Scala Meetup 2016-05-26
AGAWA Koji
May 27, 2016
More Decks by AGAWA Koji
See All by AGAWA Koji
Software Architecture in an AI-Driven World
atty303
79
48k
PipeCDプラグインへの期待 / Anticipating PipeCD Plugins
atty303
0
140
EmscriptenでC/C++アプリをWASM化してブラウザで動かしてみた
atty303
0
700
良いソフトウェアとコードレビュー / Good software and code review
atty303
38
19k
Scala + Caliban で作るGraphQL バックエンド / Making GraphQL Backend with Scala + Caliban
atty303
0
620
Scala.jsとAndroidでドメイン層を共有しよう / Scala.js and Android
atty303
0
830
もう一つのビルドツール mill で作る Docker イメージ / Build docker image with mill the yet another build tool
atty303
2
2.6k
Case of Ad Delivery System is Implemented by Scala and DDD
atty303
4
3.7k
ログのメトリックを取ってみる話
atty303
0
1.1k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Webの地図
yosuke_furukawa
PRO
6
4.7k
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
270
新卒PdEのリアル
ryu1013
1
510
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
200
Heart of Swift Concurrency
koher
0
950
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
190
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
270
Workers Cache を知る
syumai
0
120
アクセシビリティから考える情報設計
high_g_engineer
0
380
JRuby: Past, Present, and Future
headius
0
170
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Why Our Code Smells
bkeepers
PRO
340
58k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Transcript
scala-native ࢼͯ͠Έͨ @atty303
scala-native ͱ? 4 ωΠςΟϒόΠφϦΛు͘ Scala ίϯύΠϥ 4 LLVM ϕʔε 4
LLVM ͷ Scala ϑϩϯτΤϯυ 4 ϝϞϦཧ Bohem GC
LLVM IR Λు͘·Ͱ
LLVM IR Ҏ߱
ϥϯλΠϜϥΠϒϥϦ 4 scala-native/javalib 4 scala-js ͔Β͖࣋ͬͯͨ Java API ࣮ 4
io, lang, math, util ͙Β͍ 4 scala-native/nativelib 4 scala-native ϥϯλΠϜ 4 Annotation ఆٛϙΠϯλܕͳͲ 4 scala-native/scalalib 4 Scala ϥϯλΠϜϥΠϒϥϦ 4 scala-native/clib 4 C ͷඪ४ϥΠϒϥϦ (stdlib.h, stdio.h ͱ͔)
ϥϯλΠϜϥΠϒϥϦ 4 ࠓͷͱ͜Ζ .a .so ࡞Εͳ͍Α͏Ͱɺશ෦ιʔε͔ΒϏϧυ͠ ͯϦϯΫͯ͠Δ 4 Java
API ͕جૅతͳͷ͔͠ͳ͍ → طଘͷ Java ࢿ࢈͑ͳ͍ 4 JVM Ͱͳ͍ͷͰ .class ͑ͳ͍ → .jar ͑ͳ͍ 4 Pure Scala ͷϥΠϒϥϦ͑Δ 4 C ͷϥΠϒϥϦ͑ΔͷͰؤுΔ 4 ঢ়گతʹ scala-js ͱಉ͡?
ݴޠ༷ 4 ΄ͱΜͲ Scala ͱಉ͡ 4 ωΠςΟϒͷͨΊͷ֦ு͕͋Δ
ߏମએݴ @struct class Vec( val x: Double, val y: Double,
val z: Double ) 4 C ͷ struct ͱͷ૬ޓӡ༻ͷͨΊ ? 4 ελοΫʹஔͰ͖Δ class Λએݴ͢ΔͨΊ ? 4 C# ͷ class(ࢀরܕ)/struct(ܕ) ͷΑ͏ͳৼ͍?
ελοΫͱϙΠϯλ @struct class Rect(val w: Double, val h: Double) {
def area: Double = w * h } def main(args: Array[String]): Unit = { val p: Ptr[Rect] = stackalloc[Rect] // ελοΫׂΓͯͷϙΠϯλ !p = new Rect(2, 3) // ϙΠϯλ͕ࢦ͢ϝϞϦͷ֨ೲ fprintf(stdout, c"%f\n", (!p).area) // ϙΠϯλͷࢀর֎͠ } 4 Scala ͰϙΠϯλૢ࡞!!!
C ؔͷݺͼग़͠ @extern object stdio { def printf(format: CString, args:
Vararg*): CInt = extern } def main(args: Array[String]): Unit = { stdio.printf(c"hello, world!") } 4 CString = Ptr[Byte] ͳͲͷΑ͏ʹ C ͷܕͱޓੑͷ͋Δ Scala ܕ͕͋Δ
ಈ͔͢ scala-native ͷ demo ϓϩδΣΫτ ͷ࣮ߦ࣌ؒΛൺֱͯ͠ΈΔ 4 ϨΠτϨʔγϯάͷϓϩάϥϜ
Ϗϧυ $ git clone
[email protected]
:scala-native/scala-native.git $ cd scala-native/docker $ ./manage.sh
build $ ./manage.sh run 4 scala ϥΠϒϥϦͷ git clone ʹࣦഊͨ͠Γͨ͠ͷͰ build.sbt ͷ༰ΛखಈͰ࣮ߦͨ͠Γ…
࣮ߦ࣌ؒ native | 12.2008 clang | 10.9654 jvm | 10.7632
gcc | 7.3218 4 time ίϚϯυͰ 5 ճܭଌͨ͠ͱ͖ͷฏۉ 4 ࣮ߦॳظஈ֊ͷׂʹ݈ಆ͍ͯ͠Δ 4 LLVM ͍͢͝!
ىಈ࣌ؒ jvm | 0.2758 native | 0.004 4 ىಈ͍࣌ؒ! 4
͚Ͳ JVM ͷ 0.3 ඵऑผʹ͍ͱ͍͏΄ͲͰͳ͍…
͍Ͳ͜Ζ 4 PC (Desktop / Server) ʹඞཁͳͦ͞͏͔ͳ… 4 ARM ʹϏϧυͰ͖ΔΑ͏ʹͳΕ…
4 JVM Λಈ͔͢΄ͲϦιʔεͷͳ͍Ϛγϯ(IoT)͚ͷϓ ϩάϥϜΛ Scala Ͱॻ͚Δͱ͔ 4 iOS ͷωΠςΟϒΞϓϦΛ Scala Ͱॻ͚ΔՄೳੑ?
ࢀߟ 4 ࡞ऀ Denys Shabalin ࢯͷϓϨθϯ https://github.com/densh/talks/blob/ 517b20c30dd4aaf390785039cdd002f623eaa91e/ 2016-05-11-scala-goes-native.pdf