Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Kotlin/Native
Search
stormcat24
October 19, 2017
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin/Native
2017/10/19 CA.kt #3
stormcat24
October 19, 2017
Transcript
31 slides
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✋
More Decks by stormcat24
See All by stormcat24
素早く賢く失敗するDeveloper Productivityの実現を目指して
stormcat24
4
5.5k
KubernetesのマニフェストをそれなりにCIしたい
stormcat24
4
1.6k
令和時代のSaaS開発
stormcat24
1
380
History in 5 years of CircleCI and CyberAgent
stormcat24
3
930
Kubernetes Handson Osaka
stormcat24
5
660
Kubernetes Handson
stormcat24
5
4.6k
DockerとKubernetesでアプリケーション開発にコンテナをフル活用!
stormcat24
0
420
Base Image Journey 2018
stormcat24
30
140k
kotlin-fest
stormcat24
13
19k
Other Decks in Programming
See All in Programming
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
11k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
330
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
2
630
AI Augmentation Techniques with Liberty
ivargrimstad
1
470
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
980
LLM 101
dalinaum
0
480
SODA - FACT BOOK(JP)
sodainc
1
40k
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
660
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
430
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
Railsバージョンを4倍にした話
optim
0
1k
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
The Cost Of JavaScript in 2023
addyosmani
56
10k
Leo the Paperboy
mayatellez
11
2.5k
Test your architecture with Archunit
thirion
2
2.5k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
630
Navigating Weather and Climate Data
rabernat
0
590
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
610
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Designing for Timeless Needs
cassininazir
1
560
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
470