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-native 試してみた
Search
AGAWA Koji
May 27, 2016
Programming
320
0
Share
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
46k
PipeCDプラグインへの期待 / Anticipating PipeCD Plugins
atty303
0
120
EmscriptenでC/C++アプリをWASM化してブラウザで動かしてみた
atty303
0
620
良いソフトウェアとコードレビュー / Good software and code review
atty303
38
18k
Scala + Caliban で作るGraphQL バックエンド / Making GraphQL Backend with Scala + Caliban
atty303
0
580
Scala.jsとAndroidでドメイン層を共有しよう / Scala.js and Android
atty303
0
800
もう一つのビルドツール mill で作る Docker イメージ / Build docker image with mill the yet another build tool
atty303
2
2.5k
Case of Ad Delivery System is Implemented by Scala and DDD
atty303
4
3.6k
ログのメトリックを取ってみる話
atty303
0
1k
Other Decks in Programming
See All in Programming
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
120
Feature Toggle は捨てやすく使おう
gennei
0
430
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.1k
条件判定に名前、つけてますか? #phperkaigi #c
77web
2
970
Vibe하게 만드는 Flutter GenUI App With ADK , 박제창, BWAI Incheon 2026
itsmedreamwalker
0
540
「速くなった気がする」をデータで疑う
senleaf24
0
150
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
320
Don't Prompt Harder, Structure Better
kitasuke
0
410
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
530
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
270
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
3
710
見せてもらおうか、 OpenSearchの性能とやらを!
shunta27
1
180
Featured
See All Featured
Music & Morning Musume
bryan
47
7.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
190
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
160
So, you think you're a good person
axbom
PRO
2
2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
How to build a perfect <img>
jonoalderson
1
5.3k
HDC tutorial
michielstock
1
610
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
110
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
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