본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin/Native v0.8 released

by 노력남자 2023. 9. 5.
반응형

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/

반응형

댓글