K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки...

21
K/N S/P

Transcript of K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки...

Page 1: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

K/N S/P

Page 2: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Ведутся работы!

Page 3: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

DistraKted boyfriend

Page 4: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

На пальцах

LLVM Frontend

Native runtime

K/N

Page 5: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Frontend (compiler)

LLVM

C/C++/ObjC

Swift

Kotlin

Backend

LLVM Optimizer

x86

ARM

MIPS

Page 6: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Платформы

Page 7: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Kotlin stdlib

kotlin

kotlin.collections

kotlin.io

kotlin.math

kotlin.coroutines

kotlin.reflect

kotlinx.cinterop

Page 8: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

K/N “stdlib”

platform.posix

platform.linux

platform.osx

platform.windows

platform.android

platform.ios

Page 9: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Сторонние библиотеки

.h

.def

cinterop .klib

Page 10: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Артефакты

Исполняемые файлыДинамические библиотекиKLibraryInterop-библиотекиObjective/C-фреймворкиLLVM биткод

Page 11: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Входная точка

import kotlinx.cinterop.*

import platform.posix.*

import mqtt.*

fun main(args: Array<String>) {

…}

Page 12: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Типы

u_byte => kotlin.Int

int* => CPointer<kotlin.Int>

enums => [kotlin.Int, enum]

struct => class

typedef => typealias

Page 13: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Указатели

CPointer<T>.pointed => T

T.ptr => CPointer<T>

Page 14: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Управление памятью

nativeHeap.alloc<T>()

nativeHeap.allocArray<T>(size)

nativeHeap.free(ptr)

Page 15: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Лексические скоупы

memScoped {

alloc<T>()

}

Page 16: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Строки

CPointer<ByteRef>.toKString() => String

String.cstr => CValuesRef<ByteRef>

Page 17: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

cinterop .def

# Dynamic library

headers = libastral.h

linkerOpts.linux = -L/usr/local/lib -llibastral

# Static library

staticLibraries = libastral.a

libraryPaths = /usr/local/lib64

Page 18: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Поддержка IDE

Page 19: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Демо

Page 20: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Итоги

+ It works!+ Развивается- Недоделанный

Page 21: K/N S/P · Swift Kotlin Backend LLVM Optimizer x86 ARM MIPS. ... Interop-библиотеки Objective/C-фреймворки ...

Спасибо!