코틀린 upgrade 1.3.7 to 1.5.0

Kotlin|2021. 5. 28. 20:10

코틀린 버전이 아주 빠르게 올라가고 있습니다

마침 Jetbrains 홈페이지에서 1.5.0 출시에 대해 소식을 들을수 있었고

최근 재설계 되는 프로젝트에 맞춰 코틀린 버전업을 하면 좋을것 같아서

각 버전별 차이점을 조금씩 살펴보며 기록을 남깁니다.

(Native와 JS에 대한 내용은 살펴보지 않았습니다)

 

Version : 1.3.7, release : 20.03.03

 

표준 라이브러리에 대한 새로운 함수 및 클래스

* StringBuilder 멤버들 없던것들 추가(JVM에서는 별 영향 없을듯..)

* KClass에 대해 더이상 "kotlin-reflect"를 필요로 하지 않고, JVM에 의존적이지 않음(JVM에서는 별 영향 없을듯..)

* @Experimental @UseExperimental은 1.4 부터는 사용되지 않음, @OptIn, @RequiresOptIn으로 대체

* 시간 측정 API, Clock ClockMark 이름이 TimeSource TimeMark 로 변경

* ArrayDeque 추가

* Collection builders

  * collections의 builder 함수, builderList, buildset, buildMap 추가, 결과는 read-only collection

* reduceOrNull(), randomOrNull() 추가(기존 reduce(), random()은 emptyCollection이면 exception)

* scan() 추가, fold 처럼 acculated

 

InteliJ Kotlin 플러그인 개선

* gradle.kts 지원

* 자동완성개선

* 신규 색상 스키마

* 디버깅 개선

 

 

출처

https://blog.jetbrains.com/kotlin/2020/03/kotlin-1-3-70-released/

 

Version : 1.4.0, release : 20.08.17

IDE 성능 및 안정성 향상을 포함한 Kotlin의 전반적인 개발환경을 개선하는데 초점

* 코루틴 디버거 도입

* 새로운 컴파일러, 목표는 속도 개선, 모든 플랫폼을 통합하며 확장기능의 API 제공(1.5에서는 디폴트로..)

 

신규 기능

* 코틀린 인터페이스에 SAM(Single Abstract Method) 컨벤션

* 라이브러리 개발자를 위한 명시적 API(메소드 가시성 수정 등)

* 일반 파라미터, 네임드 파라미터 혼용 가능

* 후행 콤마(trailing comma)

* callable method ref(::callableMethod)

* loop 내에 when에서 라벨없이 break와 continue 사용가능

 

 

 

출처

https://blog.jetbrains.com/kotlin/2020/08/kotlin-1-4-released-with-a-focus-on-quality-and-performance/

 

 

Version : 1.4.10, release : 20.09.07

블로그 글이 안보이네요..^^;;

 

 

Version : 1.4.20, release : 20.11.23

 

JVM 신규 기능 지원(invokedynamic을 통한 String concatenation)(1.5에 기본값으로 변경 예정)

* JDK9 부터 String 을 합치는 부분은 dynamic method invocation(invokedynamic)을 통해 수행한다.

* 이전보다 더 빠르고 메모리를 적게 소모하며 바이트코드 변경없이 최적화 할수 있는 여지를 제공한다.

  * ex) 이전에는 StringBuilder로 하나한 연결 했던 바이트 코드를 생성했기 때문에 최적화할 여지가 더 없지만, ivokedynamic을 통해 bootstrap method를 호출하는 형태의 바이트코드로 생성되고 bootstrap method는 호출되는 시점에 생성되기 때문에 최적할 여지가 생김(Bootstap에 호출은 보통 StringConcatFactory.makeConcatWithConstrants를 호출한다고 함

* invokedynamic : https://docs.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html#invokedynamic

  * https://openjdk.java.net/jeps/280

  * https://www.baeldung.com/java-string-concatenation-invoke-dynamic

 

성능 개선 및 KMM프로젝트에 대한 에러 핸들링

* 주로 Kotline/Native

* String.replace 성능 개선

JDK Path

 

출처

https://blog.jetbrains.com/kotlin/2020/11/kotlin-1-4-20-released/

 

Version : 1.4.30, release : 21.02.04

1.4.x에 마지막 릴리즈

1.5.0에 계획된 많은 실험적인 기능들 추가

 

언어 기능 및 컴파일러

* new JVM backend BETA

  * JVM backend : 코틀린 코드를 JVM에 동작하기 위한 바이트 코드로 생성하는데 활용되는 백엔드

* Value class, JVM records, sealed interface

  * Inline classes(Value class) : 인라인 클래스는 별도의 언어 기능이였지만, 현재는 하나의 매개변수가 있는 Value 클래스에 대해 JVM 최적화가 되었음, Value 클래스보다는 일반적인 개념이며 추후 다양한 최적화를 지원함.

  * JVM record : JDK14에 공개된 record에 대한지원, kotline의 data class와 유사

    * https://openjdk.java.net/jeps/395

  * sealed interface : 해당 인터페이스를 구현하거나 상속받은 클래스 혹은 인터페이스는 동일한 컴파일 단위 및 동일한 패키지에 있어야함, 그전에는 같은 파일에 존재했어야 했으나, 1.5에서는 다른파일에도 존재가능

    * JDK15에 도입되었으며 Kotlin 에서 JVM17이상 사용하는 경우에는 JVM에 있는 sealed class를 사용되도록 할것임

빌드 툴

  * 코틀린 gradle 플러그인에 캐시지원 설정

    * 주로 안드로이드 처럼 빌드가 오래걸리는 케이스에 대한...

 

 

출처

https://blog.jetbrains.com/kotlin/2021/02/kotlin-1-4-30-released/

 

Version : 1.5.0, release : 21.05.05

1.4.30에 도입되었던 신규 기능의 stable 버전

* JVMRecord 지원

  * data 클래스에 @JvmRecord 어노테이션 사용시 JVM에 record를 활용하도록 됨

* sealed class

  * 이전에는 모든 상속받은 클래스는 같은패키지 같은 파일내에 있어야 했지만, 현재는 다른 파일에서도 가능

* value class,  1개의 필드를 가진 value holder 클래스 이며 메모리 할당 오버헤드 없이 사용할수 있도록 함, 단, @JvmInline을 반드시 써줘야함

 

Kotlin/JVM

* 신규 JVM IR(Intermediate Representation) compiler 도입

* 람다를 invokedynamic로 컴파일(실험 기능)

* 디폴트 JVM은 1.8, 1.6은 사용중단* 

 

 

 

출처

https://blog.jetbrains.com/kotlin/2021/05/kotlin-1-5-0-released/

댓글()