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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
stormcat24
October 19, 2017
Programming
0
1.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
5.2k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.5k
令和時代のSaaS開発
stormcat24
1
320
History in 5 years of CircleCI and CyberAgent
stormcat24
3
880
Kubernetes Handson Osaka
stormcat24
5
610
Kubernetes Handson
stormcat24
5
4.4k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
360
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
260
Fluid Templating in TYPO3 14
s2b
0
110
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.7k
Implementation Patterns
denyspoltorak
0
260
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
510
CSC307 Lecture 03
javiergs
PRO
1
480
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
530
CSC307 Lecture 07
javiergs
PRO
0
520
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.2k
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
700
CSC307 Lecture 04
javiergs
PRO
0
650
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
170
Featured
See All Featured
How to Ace a Technical Interview
jacobian
281
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
150
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
100
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
120
How Software Deployment tools have changed in the past 20 years
geshan
0
31k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Speed Design
sergeychernyshev
33
1.5k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
290
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✋