Slide 1

Slide 1 text

scala-native ࢼͯ͠Έͨ @atty303

Slide 2

Slide 2 text

scala-native ͱ͸? 4 ωΠςΟϒόΠφϦΛు͘ Scala ίϯύΠϥ 4 LLVM ϕʔε 4 LLVM ͷ Scala ϑϩϯτΤϯυ 4 ϝϞϦ؅ཧ͸ Bohem GC

Slide 3

Slide 3 text

LLVM IR Λు͘·Ͱ

Slide 4

Slide 4 text

LLVM IR Ҏ߱

Slide 5

Slide 5 text

ϥϯλΠϜϥΠϒϥϦ 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 ͱ͔)

Slide 6

Slide 6 text

ϥϯλΠϜϥΠϒϥϦ 4 ࠓͷͱ͜Ζ .a ΍ .so ͸࡞Εͳ͍Α͏Ͱɺશ෦ιʔε͔ΒϏϧυ͠ ͯϦϯΫͯ͠Δ 4 Java API ͕جૅతͳ΋ͷ͔͠ͳ͍ → طଘͷ Java ࢿ࢈͸࢖͑ͳ͍ 4 JVM Ͱ͸ͳ͍ͷͰ .class ͸࢖͑ͳ͍ → .jar ΋࢖͑ͳ͍ 4 Pure Scala ͷϥΠϒϥϦ͸࢖͑Δ 4 C ͷϥΠϒϥϦ΋࢖͑ΔͷͰؤுΔ 4 ঢ়گతʹ͸ scala-js ͱಉ͡?

Slide 7

Slide 7 text

ݴޠ࢓༷ 4 ΄ͱΜͲ Scala ͱಉ͡ 4 ωΠςΟϒͷͨΊͷ֦ு͕͋Δ

Slide 8

Slide 8 text

ߏ଄ମએݴ @struct class Vec( val x: Double, val y: Double, val z: Double ) 4 C ͷ struct ͱͷ૬ޓӡ༻ͷͨΊ ? 4 ελοΫʹ഑ஔͰ͖Δ class Λએݴ͢ΔͨΊ ? 4 C# ͷ class(ࢀরܕ)/struct(஋ܕ) ͷΑ͏ͳৼ෣͍?

Slide 9

Slide 9 text

ελοΫͱϙΠϯλ @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 ͰϙΠϯλૢ࡞!!!

Slide 10

Slide 10 text

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 ܕ͕͋Δ

Slide 11

Slide 11 text

ಈ͔͢ scala-native ͷ demo ϓϩδΣΫτ ͷ࣮ߦ࣌ؒΛൺֱͯ͠ΈΔ 4 ϨΠτϨʔγϯάͷϓϩάϥϜ

Slide 12

Slide 12 text

Ϗϧυ $ git clone git@github.com:scala-native/scala-native.git $ cd scala-native/docker $ ./manage.sh build $ ./manage.sh run 4 scala ϥΠϒϥϦͷ git clone ʹࣦഊͨ͠Γͨ͠ͷͰ build.sbt ͷ಺༰ΛखಈͰ࣮ߦͨ͠Γ…

Slide 13

Slide 13 text

࣮ߦ࣌ؒ native | 12.2008 clang | 10.9654 jvm | 10.7632 gcc | 7.3218 4 time ίϚϯυͰ 5 ճܭଌͨ͠ͱ͖ͷฏۉ஋ 4 ࣮ߦ଎౓͸ॳظஈ֊ͷׂʹ͸݈ಆ͍ͯ͠Δ 4 LLVM ͍͢͝!

Slide 14

Slide 14 text

ىಈ࣌ؒ jvm | 0.2758 native | 0.004 4 ىಈ࣌ؒ͸଎͍! 4 ͚Ͳ JVM ͷ 0.3 ඵऑ΋ผʹ஗͍ͱ͍͏΄ͲͰ͸ͳ͍…

Slide 15

Slide 15 text

࢖͍Ͳ͜Ζ 4 PC (Desktop / Server) ʹ͸ඞཁͳͦ͞͏͔ͳ… 4 ARM ʹϏϧυͰ͖ΔΑ͏ʹͳΕ͹… 4 JVM Λಈ͔͢΄ͲϦιʔεͷͳ͍Ϛγϯ(IoT)޲͚ͷϓ ϩάϥϜΛ Scala Ͱॻ͚Δͱ͔ 4 iOS ͷωΠςΟϒΞϓϦΛ Scala Ͱॻ͚ΔՄೳੑ?

Slide 16

Slide 16 text

ࢀߟ 4 ࡞ऀ Denys Shabalin ࢯͷϓϨθϯ https://github.com/densh/talks/blob/ 517b20c30dd4aaf390785039cdd002f623eaa91e/ 2016-05-11-scala-goes-native.pdf