Slide 1

Slide 1 text

Kotlin/Native Alec Strong

Slide 2

Slide 2 text

package com.sample import java.util.ArrayList object Main { @JvmStatic fun main(args: Array) { val names = ArrayList() names.add("Shawn") names.add("Matt") names.add("Alec") names.add("James") names.add("Egor") names.forEach(System.out::println) } }

Slide 3

Slide 3 text

What is native? machine code

Slide 4

Slide 4 text

What is machine code?

Slide 5

Slide 5 text

What is byte code? machine

Slide 6

Slide 6 text

What is managed code? byte
 machine

Slide 7

Slide 7 text

What is unmanaged code? managed
 byte
 machine

Slide 8

Slide 8 text

What is kotlin?

Slide 9

Slide 9 text

Front End .kotlin Kotlin Compiler

Slide 10

Slide 10 text

Front End .kotlin Middle End IR Kotlin Compiler

Slide 11

Slide 11 text

Front End .kotlin Middle End IR Back End IR .class Kotlin Compiler

Slide 12

Slide 12 text

Front End .c / .cpp LLVM

Slide 13

Slide 13 text

Front End .c / .cpp Middle End IR LLVM

Slide 14

Slide 14 text

Front End .c / .cpp Middle End IR IR Back End .exe … LLVM

Slide 15

Slide 15 text

Front End .c / .cpp Middle End IR Back End IR .exe … LLVM Clang

Slide 16

Slide 16 text

Front End .c / .cpp Middle End IR Back End IR .exe … LLVM Clang

Slide 17

Slide 17 text

Front End .kotlin Middle End IR Back End IR .kexe … Kotlin/Native Compiler Konan LLVM

Slide 18

Slide 18 text

Why?

Slide 19

Slide 19 text

How?

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

import java.util.ArrayList object Main { @JvmStatic fun main(args: Array) { val names = ArrayList() names.add("Shawn") names.add("Matt") names.add("Alec") names.add("James") names.add("Egor") names.forEach(System.out::println) } }

Slide 23

Slide 23 text

import java.util.ArrayList object Main { @JvmStatic fun main(args: Array) { val names = ArrayList() names.add("Shawn") names.add("Matt") names.add("Alec") names.add("James") names.add("Egor") names.forEach(System.out::println) } }

Slide 24

Slide 24 text

import java.util.ArrayList object Main { @JvmStatic fun main(args: Array) { val names = ArrayList() names.add("Shawn") names.add("Matt") names.add("Alec") names.add("James") names.add("Egor") names.forEach(System.out::println) }A }

Slide 25

Slide 25 text

fun main(args: Array) { val names = ArrayList() names.add("Shawn") names.add("Matt") names.add("Alec") names.add("James") names.add("Egor") names.forEach(::println) }A

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Kotlin Stdlib

Slide 28

Slide 28 text

Kotlin Stdlib (And things built using kotlin stdlb)

Slide 29

Slide 29 text

Kotlin Multiplatform

Slide 30

Slide 30 text

Platform Agnostic Code

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

apply plugin: 'konan'

Slide 33

Slide 33 text

konanArtifacts { program('foo') // executable 'foo' library('bar') // library 'bar' bitcode('baz') // bitcode file 'baz' interop('qux') // interoperability dynamic('quux') // dynamic library frameworkA('quuux')A//AObjective-C }A

Slide 34

Slide 34 text

konanArtifacts { frameworkA('quuux')A//AObjective-C }A

Slide 35

Slide 35 text

iOS

Slide 36

Slide 36 text

• No swift header support • Enums • Generics • Value Types • Garbage Collection

Slide 37

Slide 37 text

Garbage Collection

Slide 38

Slide 38 text

Kotlin/Native