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

Post on 09-Jul-2020

9 views 0 download

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

K/N S/P

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

DistraKted boyfriend

На пальцах

LLVM Frontend

Native runtime

K/N

Frontend (compiler)

LLVM

C/C++/ObjC

Swift

Kotlin

Backend

LLVM Optimizer

x86

ARM

MIPS

Платформы

Kotlin stdlib

kotlin

kotlin.collections

kotlin.io

kotlin.math

kotlin.coroutines

kotlin.reflect

kotlinx.cinterop

K/N “stdlib”

platform.posix

platform.linux

platform.osx

platform.windows

platform.android

platform.ios

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

.h

.def

cinterop .klib

Артефакты

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

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

import kotlinx.cinterop.*

import platform.posix.*

import mqtt.*

fun main(args: Array<String>) {

…}

Типы

u_byte => kotlin.Int

int* => CPointer<kotlin.Int>

enums => [kotlin.Int, enum]

struct => class

typedef => typealias

Указатели

CPointer<T>.pointed => T

T.ptr => CPointer<T>

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

nativeHeap.alloc<T>()

nativeHeap.allocArray<T>(size)

nativeHeap.free(ptr)

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

memScoped {

alloc<T>()

}

Строки

CPointer<ByteRef>.toKString() => String

String.cstr => CValuesRef<ByteRef>

cinterop .def

# Dynamic library

headers = libastral.h

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

# Static library

staticLibraries = libastral.a

libraryPaths = /usr/local/lib64

Поддержка IDE

Демо

Итоги

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

Спасибо!