Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin/Native
Search
stormcat24
October 19, 2017
Programming
0
1k
Kotlin/Native
2017/10/19 CA.kt #3
stormcat24
October 19, 2017
Tweet
Share
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.4k
令和時代のSaaS開発
stormcat24
1
290
History in 5 years of CircleCI and CyberAgent
stormcat24
3
870
Kubernetes Handson Osaka
stormcat24
5
590
Kubernetes Handson
stormcat24
5
4.4k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
340
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
JSONataを使ってみよう Step Functionsが楽しくなる実践テクニック #devio2025
dafujii
1
530
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
160
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
440
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
850
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
100
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
320
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
為你自己學 Python - 冷知識篇
eddie
1
350
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
350
「待たせ上手」なスケルトンスクリーン、 そのUXの裏側
teamlab
PRO
0
510
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
140
Featured
See All Featured
The Language of Interfaces
destraynor
161
25k
Speed Design
sergeychernyshev
32
1.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Unsuck your backbone
ammeep
671
58k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Rails Girls Zürich Keynote
gr2m
95
14k
Faster Mobile Websites
deanohume
309
31k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Embracing the Ebb and Flow
colly
87
4.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Transcript
Kotlin/Native CA.kt #3 @stormcat24
stormcat24 ‣ CyberAgent, Inc. ‣ FRESH! https://freshlive.tv ‣ https://blog.stormcat.io ‣
Docker Comedian
Ice Break?
Written by @ngsw_taro Congratulations!
I reviewed 2nd, 3rd parts. ‣SparkFramework with Kotlin ‣Spring Boot
with Kotlin
Kotlin/Native
What?
None
“Kotlin/Native that compiles Kotlin directly to machine.”
“without any virtual machine.” (standalone executables)
Kotlin/Native is ‣Compiles directly to native code via LLVM ‣Call
native libraries ‣Cross Platform ‣Windows/Linux/macOS/iOS/Android/Raspberry Pi ‣Version 0.3
Setup $ git clone
[email protected]
:JetBrains/kotlin-native.git $ cd kotlin-native (kotlin-native)$ git
checkout v0.3.4 Get Kotlin/Native Build (kotlin-native)$ ./gradlew dependencies:update (kotlin-native)$ ./gradlew dist (kotlin-native)$ ./gradlew cross_dist Path $ export PATH=$PATH:path-to-path/kotlin-native/dist/bin
Try Quickly fun main(args: Array<String>) { // Not System.out.println() println(“Hello!
Kotlin/Native“) } hello.kt compile $ kotlinc hello.kt -o hello KtFile: hello.kt Execute $ ./hello.kexe Hello! Kotlin/Native
build.gradle buildscript { repositories { mavenCentral() maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies"
} } dependencies { classpath "org.jetbrains.kotlin:kotlin-native-gradle-plugin:0.3.3" } } apply plugin: 'konan' konanArtifacts { KonanExample { } }
Native Library
Today’s Example HTTP GET Request By using libcurl
Create *.def file ‣Library definition file ‣Link Kotlin/Native to Native
libraries ‣Generate interoperability stubs ‣Define in build.gradle
Define *.def file headers = curl/curl.h compilerOpts=-I/usr/local/include linkerOpts.osx = -L/opt/local/lib
-L/usr/local/opt/curl/lib -lcurl src/main/c_interop/libcurl.def build.gradle apply plugin: 'konan' konanInterop { Libcurl { includeDirs '/usr/local/opt/curl/include', '.' } } konanArtifacts { KonanExample { useInterop 'libcurl' } }
Implementation curl.kt import kotlinx.cinterop.* import libcurl.* fun main(args: Array<String>): Unit
{ if (args.size == 0) { return } val url = args.first() val curl = curl_easy_init() curl_easy_setopt(curl, CURLOPT_URL, url) val res = curl_easy_perform(curl) when (res) { CURLE_OK -> println("HTTP Request OK") else -> println("HTTP Request NG") } }
Call Library In C #include <curl/curl.h> CURLcode curl_easy_perform(CURL * easy_handle);
fun curl_easy_perform(curl: COpaquePointer?): CURLcode { return kniBridge40(curl.rawValue) } typealias CURLcode = kotlin.Int val CURLE_OK: CURLcode = 0 val CURLE_UNSUPPORTED_PROTOCOL: CURLcode = 1 val CURLE_FAILED_INIT: CURLcode = 2 … Stub in Kotlin/Native
Execute Build Execute $ ./gradlew build $ ls build/konan/bin Curl.kexe
Curl.kt.bc $ build/konan/bin/Curl.kexe https://blog.stormcat.io <!DOCTYPE html> <html lang="ja-jp"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> (...) HTTP Request OK
Interoperability
Interop types ‣Int => kotlin.Int ‣T* => CPointer<T> ‣void* =>
COpaquePointer? ‣
Memory Management ‣Automated memory management by Cycle Collector ‣https://github.com/JetBrains/kotlin-native/blob/master/ runtime/src/main/cpp/Memory.cpp
‣When using Native Library…?
Memory allocation Allocate memory val buffer = nativeHeap.allocArray<ByteVar>(size) ... nativeHeap.free(buffer)
memScoped val fileSize = memScoped { val statBuf = alloc<statStruct>() val error = stat("/", statBuf.ptr) statBuf.st_size }
Use IDEA
<- Uncheck Java
Code Completion
Impressions
Impressions ‣Very experimental and challenging ‣Interoperability is difficult ‣Lack of
Ecosystem, fundamental libraries ‣Not enough code completion ‣If gRPC support Kotlin/Native?
Thanks✋