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
4.9k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.4k
令和時代のSaaS開発
stormcat24
1
280
History in 5 years of CircleCI and CyberAgent
stormcat24
3
860
Kubernetes Handson Osaka
stormcat24
5
580
Kubernetes Handson
stormcat24
5
4.3k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
330
Base Image Journey 2018
stormcat24
29
140k
kotlin-fest
stormcat24
13
18k
Other Decks in Programming
See All in Programming
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
6.2k
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
350
TypeScript LSP の今までとこれから
quramy
1
450
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
460
がんばりすぎないコーディングルール運用術
tsukakei
1
210
無関心の谷
kanayannet
0
120
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
18
5.5k
単体テストの始め方/作り方
toms74209200
0
360
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
1
210
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
0
350
【TSkaigi 2025】これは型破り?型安全? 真実はいつもひとつ!(じゃないかもしれない)TypeScript クイズ〜〜〜〜!!!!!
kimitashoichi
1
300
List Unfolding - 'unfold' as the Computational Dual of 'fold', and how 'unfold' relates to 'iterate'"
philipschwarz
PRO
0
170
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
94
13k
Designing for humans not robots
tammielis
253
25k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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✋