2018년 7월 11일
Kotlin/Native v0.8의 출시를 기쁘게 알려드립니다! 이번 릴리스의 주요 포커스는 다음과 같습니다:
- 더 안전한 동시성 프로그래밍
- 표준 라이브러리 기능 확장
- 더 나은 iOS 개발 지원
또한 이번 릴리스에서는 다양한 버그 수정과 최적화도 이루어졌습니다.
AppCode 및 CLion Kotlin/Native 플러그인도 v0.8과 호환되도록 업데이트되었으며, 성능 및 사용성 개선 사항도 포함되어 있습니다.
macOS, Linux, Windows에서 이진 파일을 다운로드할 수 있습니다.
Linux Snap 패키지도 사용 가능합니다.
GitHub 릴리스 페이지는 여기에서 확인하실 수 있습니다.
더 나은 동시성 지원
v0.8 이전에는 Kotlin/Native 애플리케이션에서 싱글톤 객체 상태는 특정 실행 스레드로 지역적으로 유지되어, 서로 다른 스레드의 싱글톤 객체 상태가 동기화되지 않을 수 있었습니다. 이제 싱글톤 객체에 대한 freezing 개념을 확장하여 공유 불변 상태를 허용합니다.
예를 들어, 다음과 같은 코드는
object Config {
var width: Int = 10
private set
init {
val file = fopen("config.txt", "r") ?: return
try {
val buffer = ByteArray(2 * 1024)
while (true) {
val nextLine = fgets(buffer.refTo(0), buffer.size, file)?.toKString()
if (nextLine == null || nextLine.isEmpty()) break
val records = nextLine.split('=')
if (records.size != 2) continue
val key = records[0].trim()
val value = records[1].trim()
when (key) {
"width" -> width = value.toInt()
}
}
} finally {
fclose(file)
}
}
}
설정 파일을 읽고 나중에 Config.width 속성을 제공할 수 있습니다. Config 파일은 프로세스 실행 당 한 번 읽히며, 모든 스레드나 워커에서 사용할 수 있습니다. 발행된 후에 객체는 frozen되며 더 이상 수정할 수 없습니다 (수정 시도 시 InvalidMutabilityException이 발생합니다).
또 다른 개선 사항은 Kotlin/Native에서 원자값과 참조를 사용하는 것입니다. 예를 들어, 위에서 언급한 프로그램 전체 구성에 업데이트 가능한 프로그램 아이콘을 추가하려면 다음과 같이 할 수 있습니다.
object Config {
private val icon_ = AtomicReference<Image>()
val icon: Image
get() = icon_.get()!!
fun updateIcon(file: String) {
val imageData = Image(file)
icon_.compareAndSwap(icon_.get(), imageData.freeze())
}
}
아토믹 연산이므로 icon 데이터는 이미 Atomically 스레드에서 동결(freeze)되어 있습니다. 이렇게 하면 데이터 업데이트가 원자적이며 다른 클라이언트는 일관된 상태를 볼 수 있습니다.
라이브러리 개선
릴리스 0.8에서는 Kotlin/Native의 표준 라이브러리 (kotlin.*)이 expect/actual 메커니즘을 사용하여 다른 플랫폼과 표준화되었으며 대부분의 경우(반사와 일부 동기화 관련 작업을 제외하고) 다른 Kotlin 플랫폼과 일치합니다. 또한 표준 난수 생성기와 컬렉션 셔플링 함수도 이제 사용 가능하여 더 이상 플랫폼별 API를 사용하여 난수를 생성할 필요가 없습니다.
다른 중요한 JetBrains 제공 라이브러리인 kotlinx.coroutines, kotlinx.serialization 및 Ktor HTTP 클라이언트도 실험적인 Kotlin/Native 지원을 받고 있습니다. 따라서 iOS 앱과 Android 애플리케이션에서 동일한 REST API 관련 로직을 공유할 수 있습니다.
iOS 지원 개선
Kotlin/Native를 iOS 개발 기술로 사용할 수 있도록 노력하고 있으며, 이번 릴리스에서는 AppStore에 출시를 방해하는 몇 가지 귀찮은 문제를 해결했습니다. 또한 프레임워크 초기화 문제를 해결하고 32비트 ARM iOS도 지원하여 오래된 장치에서도 Kotlin/Native을 사용할 수 있게 되었습니다.
Kotlin을 이용해 더욱 효과적으로 개발해보세요!
원문
https://blog.jetbrains.com/kotlin/2018/07/kotlinnative-v0-8-released/
댓글