본문 바로가기

Kotlin

(번역글) 코틀린 1.4.20 버전 릴리즈 노트

코틀린 1.4.20에서 새로 추가된 것들

코틀린 1.4.20에서는 새로운 experimental 기능과, 기존에 존재하던 기능에 대한 성능향상 및 버그 수정 등이 있었습니다.

 

코틀린/JVM

코틀린/JVM에서는 최신 자바 버전의 기능들을 따라잡는 방향으로 개선사항들이 있었습니다.

 

  • 자바 15 타겟
  • invokedynamic string concatenation

 

1. 자바 15 타겟

 

코틀린/JVM 타겟으로 자바 15버전을 사용할 수 있게 되었습니다.

 

2. invokedynamic string concatenation

invokedynamic string concatenation은 experimental 기능으로 언제든지 없어질 수 있고, 변경될 수 있습니다.

 

코틀린 1.4.20에서는 JVM 9이상이 타겟일 경우 string concatenation을 dynamic invocation하게 컴파일할 수 있습니다. 그렇기 때문에 성능면에서 더 좋아졌습니다.

 

현재, 기능은 experimental 한 상황이고 아래 케이스들에서 사용 가능합니다.

 

  • 연산자 a + b, 명시적 a.plus(b), ( (a::plus) (b) ) 형태에서의 String.plus
  • inline, 데이터 클래스들에서의 toString
  • 하나이고, non-constant한 파라리터를 제외한 string template

invokedynamic string concatenation을 활성화 시키고 싶다면 아래 값들중 하나를 -Xstring-concat 컴파일 옵션에 추가하면 됩니다.

 

  • string들을 StringConcatFactory.makeConcatWithConstants()로 invokedynamic concatenation을 수행시키기 위한 indy-with-constants

  • strings들을 StringConcatFactory.makeConcat()으로 invokedynamic concatenation을 수행시키기 위한 indy

  • StringBuilder.append()와 같은 전통적인 방법으로 전환할 수 있는 inline

 

표준 라이브러리

 

코틀린 1.4.20 표준 라이브러리에서는 파일을 다룰 때 사용할 수 있고, 성능이 좋아진 확장 기능을 제공합니다.

 

  • java.nio.file.Path의 확장 기능
  • String.replace 함수 성능 개선

1. java.nio.file.Path의 확장 기능

 

java.nio.file.Path 확장 기능은 Experimental 합니다. 그렇기 때문에 언제든지 없어질 수 있고, 변경될 수 있습니다.

 

이제 표준 라이브러리에서 java.nio.file.Path의 experimental한 확장 기능을 제공합니다. 이 모던한 JVM 파일 API를 코틀린 스럽게 사용하는 방법은 java.io.File을 확장한 kotlin.io 패키지를 사용하는것과 유사합니다.

 

// construct path with the div (/) operator
val baseDir = Path("/base")
val subDir = baseDir / "subdirectory"

// list files in a directory
val kotlinFiles: List<Path> = Path("/home/user").listDirectoryEntries("*.kt")

 

확장기능은 kotlin-stdlib-jdk7 모듈 내부의 kotlin.io.path 패키지에서 사용가능합니다. 이 확장기능을 사용하려면 @ExperimentalPathApi 어노테이션을 붙여야 합니다.

 

2. String.replace 함수 성능 개선

 

String.replace() 함수 실행 속도가 빨라졌습니다. 대소문자를 구분하는 경우는 indexOf를 기반으로 한 루프로 대체하였고, 대소문자를 구분하지 않는 경우는 정규 표현식 매칭을 사용하였습니다.

 

출처

 

https://kotlinlang.org/docs/whatsnew1420.html