[Kotlin] Kotlin Native

[์›๋ณธ ๋งํฌ]

Kotlin Native๋Š” Kotlin์€ ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํˆด์ฒด์ธ์ด๋‹ค.
Kotlin ๊ณต์‹ ๊ทธ๋ฃน์—์„œ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ์˜คํ”ผ์…œ ๋„๊ตฌ๋‹ค.

์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋ฅผ JVM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค.




์„ค์น˜

Arch๋ฅผ ์“ด๋‹ค๋ฉด yay๋ฅผ ํ†ตํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

yay -S kotlin-native-bin

๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ฝ”ํ‹€๋ฆฐ ๋ฆด๋ฆฌ์ฆˆ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ๋ฐ›์•„๋‹ค๊ฐ€ ํ’€์–ด์“ฐ๋ฉด ๋œ๋‹ค.
https://github.com/JetBrains/kotlin/releases/tag/v2.2.21

์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „์šฉ ๋ช…๋ น ๋„๊ตฌ๋ฅผ ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ด๊ฒŒ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ๋Ÿฌ๋‹ค.




์ปดํŒŒ์ผํ•ด๋ณด๊ธฐ

์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ ์‹คํ–‰ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•ด๋ณด์ž.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด, ์›๋ž˜๋Š” ์ฝ”ํ‹€๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๊ณ , java๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด๋‹ค.

kotlinc Main.kt -include-runtime -d Main.jar
java -jar Main

๋‹น์—ฐํ•˜๋‹ค. ์ฝ”ํ‹€๋ฆฐ์˜ ์ถœ๋ ฅ์€ JVM์— ์˜์กด์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ kotlinc-native๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JVM๊ณผ ๋ณ„๊ฐœ์˜ ์‹คํ–‰ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์‚ฌ์šฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

kotlinc-native ./Main.kt -o main

๊ทธ๋Ÿผ ์ฒ˜์Œ์—๋Š” ๊ฑฐ์ฐฝํ•˜๊ฒŒ ๋ญ˜ ๋ฐ›์œผ๋ฉด์„œ ์ปดํŒŒ์ผ์„ ํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ์ตœ์ดˆ ์ปดํŒŒ์ผ์€ ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํŽธ์ด๋‹ค.

๊ทธ๋Ÿฌ๊ณ  ๋‚˜๋ฉด

.kexe๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์‹คํ–‰ํŒŒ์ผ์ด ์ƒ๊ธด๋‹ค. ๊ทธ๋ƒฅ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
๋์ด๋‹ค.




ํ•œ๊ณ„

Kotlin Native์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ์™„์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ฝ”๋“œ์— Java ์ข…์†์ ์ธ ๋ถ€๋ถ„์ด ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ์ปดํŒŒ์ผ์— ์‹คํŒจํ•œ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ๋•Œ Kotlin Native๋ฅผ ์•„๋ฌด๋„ ์“ฐ์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ด๊ฒƒ ๋•Œ๋ฌธ์ด๋‹ค.
์• ์ดˆ์— ์ฝ”ํ‹€๋ฆฐ์„ ์“ฐ๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๊ฐ€ Java ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด๋ฐ, ๊ทธ๊ฑธ ์ž˜๋ผ๋‚ด๋ฉด ๋ˆ„๊ฐ€ ์“ฐ๋‚˜...

๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„์˜ ์ƒํ™ฉ์—์„œ ํ˜„์‹ค์ ์ธ ๋Œ€์•ˆ์€ GraalVM์ผ ๊ฒƒ์ด๋‹ค. ์–ด์ฐจํ”ผ ์ฝ”ํ‹€๋ฆฐ๋„ jar ํŒŒ์ผ์„ ๋ฝ‘์œผ๋‹ˆ๊นŒ, graalvm์— ๊ทธ๊ฑธ ์ง‘์–ด๋„ฃ์œผ๋ฉด AOT ์ปดํŒŒ์ผ์ด ๋œ๋‹ค. ์‚ฌ์‹ค ์ƒ์œ„ํ˜ธํ™˜์ธ ์…ˆ์ด๋‹ค...

native-image -jar ./Main.jar -o ./main

https://blog.naver.com/sssang97/224104258144




์„ฑ๋Šฅ ์†์‹ค

๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ๋ฒค์น˜๋งˆํฌ ์ข€ ๋Œ๋ ค๋ณด๋‹ˆ๊นŒ, JVM์œผ๋กœ ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ํ˜„์ €ํ•˜๊ฒŒ ๋А๋ฆฌ๋‹ค.
Java๋ฅผ GraalVM์œผ๋กœ ์ปดํŒŒ์ผํ•ด๋„ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ข€ ๋ณด์ด๋Š”๋ฐ, ์ด๊ฑด ๊ทธ๊ฑฐ๋ณด๋‹ค ๋” ์‹ฌํ•˜๋‹ค.

JIT์„ ๋– ๋‚˜์„œ ๊ทธ๋ƒฅ ์ตœ์ ํ™”๋ฅผ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.



์ฐธ์กฐ
https://kotlinlang.org/docs/native-get-started.html