k/n s/p · swift kotlin backend llvm optimizer x86 arm mips. ... interop-библиотеки...

21
K/N S/P

Upload: others

Post on 09-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

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-фреймворки

Спасибо!