2018년 4월 19일
우리는 Kotlin 1.2.40 버전의 출시를 기쁘게 알려드립니다. 이 버그 수정 및 도구 업데이트는 Kotlin 1.2를 위한 새로운 업데이트입니다! 이 업데이트에는 다음과 같은 내용이 포함되어 있습니다:
- 실험적인 멀티플랫폼 프로젝트의 플랫폼 모듈이 하나 이상의 expectedBy 종속성을 가질 수 있도록 허용합니다.
- 인라인 함수 내에서 crossinline suspend 매개 변수를 지원하도록 변경되었습니다.
- 인터페이스 메서드를 Java에서 디폴트로 만드는 @JvmDefault 주석을 추가하였습니다 (실험적인 기능).
- Kotlin IntelliJ 플러그인에 새로운 검사와 의도 기능이 추가되었습니다.
- 서브 타입의 컴패니언 객체를 통한 스코프에 가져온 타입의 짧은 이름 사용을 제한하거나 경고 메시지를 표시하는 것이 더 이상 권장되지 않습니다.
- 컴파일러와 IDE 플러그인에서 알려진 문제를 많이 수정하였으며, 성능이 개선되었습니다.
이 업데이트는 IntelliJ IDEA 2017.1에서 2018.1까지, 그리고 Android Studio 3.0, 3.1, 3.2 Canary 모두와 호환됩니다.
이번 릴리스에 포함된 외부 기여자들에게 감사드립니다: Toshiaki Kameyama, Mikaël Peltier, Alexey Belkov, meztihn, Gaetan Zoritchak, Yoshinori Isogai, Cuihtlauac Alvarado, Egor Neliuba, Elifarley C., Felix Guo, Jake Wharton, Raluca Sauciuc, Renaud Paquay, Rodrigo B. de Oliveira, Valeriy Zhirnov, Yanis Batura, Yuta Sakata, Kenji Tomita, yukuku.
이번 릴리스에 대한 모든 변경 사항은 변경 로그에서 확인하실 수 있습니다.
멀티플랫폼 프로젝트 개선 사항
이번 업데이트는 실험적인 멀티플랫폼 프로젝트 기능을 위한 여러 가지 개선 사항을 가져왔습니다.
플랫폼 모듈은 이제 공통 모듈에서 선언된 내용에 대해 하나 이상의 expectedBy 종속성을 제공하고, 실제 플랫폼별 구현을 제공할 수 있습니다. 이는 플랫폼 모듈에 여러 개의 expectedBy 종속성을 추가함으로써 수행됩니다. 예를 들어:
apply plugin: 'kotlin-platform-jvm'
// ...
dependencies {
expectedBy project(":io-common")
expectedBy project(":data-common")
// ...
}
expectedBy 종속성은 여전히 비-전이적이므로, 일반 모듈인 app-common이 다른 모듈 lib-common에 의존한다면, 플랫폼 모듈에서 lib-common에 대해 실제 구현을 제공하려면 두 모듈을 모두 expectedBy 종속성으로 수동으로 지정하거나, app-common에 대해서만 expectedBy 종속성을 추가하고 기존 플랫폼 모듈에 대한 컴파일 종속성을 추가할 수 있습니다.
또 다른 개선 사항은 expect 함수와 생성자의 기본 매개 변수를 지원합니다:
expect class StringMatcher {
fun match(value: String, matchStrictly: Boolean = false): Boolean
}
기본 매개 변수 값은 expect 선언에서만 허용됩니다. 실제 대응 함수에는 기본 값을 지정하지 마십시오.
Crossinline suspend 함수 매개 변수
이 업데이트에서는 인라인 함수의 crossinline suspend 매개 변수 지원을 활성화합니다. 이러한 매개 변수는 중첩된 중단 함수 및 람다에서 호출할 수 있습니다:
inline fun schedule(crossinline runner: suspend () -> Unit) {
launch(CommonPool) {
runner()
}
}
Java 인터페이스 디폴트 메서드 선언 지원
이 릴리스에서는 JVM 대상 1.8 이상을 위한 디폴트 인터페이스 메서드 생성을 실험적으로 지원합니다. 이 기능은 기본적으로 비활성화되어 있으며, -Xenable-jvm-default 컴파일러 플래그를 사용하여 활성화할 수 있습니다. 그런 다음 인터페이스 멤버에 본문이 있는 경우 @JvmDefault 주석(kotlin.jvm 패키지에서 제공)을 사용하여 표시할 수 있습니다:
interface Foo {
@JvmDefault
fun foo(): Int = 0
}
Kotlin 1.2.x에서 이 기능은 실험적이므로 설계 및 구현이 미래 업데이트에서 변경될 수 있습니다. 이 때문에 컴파일러 플래그 이름도 변경될 수 있습니다.
컴패니언 객체 서브타입을 통한 스코프로 가져온 타입의 가시성 제한
Kotlin 1.3에서 컴패니언 객체를 통해 가져온 분류자의 잠재적인 파괴적인 변경 사항과 관련하여 부드러운 마이그레이션을 제공하기 위해 이 업데이트에서는 IDE 플러그인에 대한 경고와 마이그레이션 도구를 도입하였습니다.
이제 타입 Foo의 본문이 자체 컴패니언 객체의 슈퍼타입이나 Foo의 슈퍼타입의 컴패니언 객체, 이러한 컴패니언 객체의 슈퍼타입에서 선언된 짧은 (비한정된) 타입 이름을 사용하는 경우 적절한 import 문이 없는 경우에는 경고 메시지가 표시되며 해당 import 문이 자동으로 추가됩니다. 한 예는 다음과 같습니다:
interface Bar {
companion object {
class FromBarCompanion
}
}
class Foo : Bar {
fun foo(): FromBarCompanion = TODO()
// Warning: access to this type by short name
// is deprecated and is going to be removed.
}
Kotlin 1.3에서는 이러한 짧은 이름은 퀄리파이하거나 import되지 않는 한 더 이상 보이지 않게 될 것입니다. 이 계획된 변경 사항은 총 150만 줄 이상의 Kotlin 코드가 있는 실제 프로젝트에서 테스트되었으며, 그 영향은 최소한의 것으로 예상됩니다.
이 변경 사항의 자세한 설명 및 동기에 대해서는 KT-21515을 확인하십시오.
IntelliJ IDEA 플러그인 개선 사항
람다에서 명시적인 반환 추가 및 제거를 위한 새로운 의도 기능이 추가되었습니다.
그 외의 IDE 플러그인 변경 사항
- 새로운 어노테이션 사용 사이트 타겟 추가 및 제거를 위한 의도 기능;
- 불필요한 명시적인 컴패니언 객체 참조를 강조하고 제거하기 위한 검사 기능;
- 많은 안정성 및 성능 개선 사항.
컴파일러 변경 사항
Kotlin 1.2.40 업데이트는 Kotlin 컴파일러의 알려진 문제를 여러 가지 수정하였으며, 성능이 개선되었습니다.
컴파일러가 생성하는 코드는 이제 여러 가지 경우에서 더 효율적입니다. 이에는 컴패니언 객체의 비공개 속성에 접근, 열거형 항목의 동등성 확인, Long 숫자 비교 등이 포함되며 이는 기여자 Mikaël Peltier의 공헌으로 이루어졌습니다.
업데이트하는 방법
플러그인을 업데이트하려면 Tools → Kotlin → Configure Kotlin Plugin Updates로 이동하여 Check for updates now 버튼을 누르십시오. 또한 Maven 및 Gradle 빌드 스크립트에서 컴파일러 및 표준 라이브러리 버전을 업데이트하는 것을 잊지 마십시오.
일반적으로 새 릴리스에서 문제가 발생하는 경우 포럼이나 Slack (여기에서 초대를 받으실 수 있음), 또는 이슈 트래커에 문제를 보고해주시기 바랍니다.
Kotlin을 해보세요!
원문
https://blog.jetbrains.com/kotlin/2018/04/kotlin-1-2-40-is-out/
'Kotlin > Release Notes' 카테고리의 다른 글
[Kotlin Release Notes] Embedding Kotlin Playground (0) | 2023.09.05 |
---|---|
[Kotlin Release Notes] Kotlin/Native v0.7 released: smoother interop, frozen objects, optimisations and more. (0) | 2023.09.05 |
[Kotlin Release Notes] Kotlin/Native Plugin for AppCode (0) | 2023.09.05 |
[Kotlin Release Notes] Kotlin 1.2.30 is out (0) | 2023.09.05 |
[Kotlin Release Notes] Kotlin/Native v0.6 is Here! (0) | 2023.09.05 |
댓글