본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin 1.3.30 released

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

2019년 4월 12일

 

Kotlin 1.3.30 릴리스 소식을 기쁘게 알려드립니다. 이 릴리스는 Kotlin 1.3에 대한 새로운 버그 수정 및 툴링 업데이트입니다. 이번 릴리스에서의 주요 포커스 영역은 Kotlin/Native, KAPT 성능 및 IntelliJ IDEA 개선사항입니다.

변경 내용의 전체 목록은 변경 로그에서 확인하실 수 있습니다. 언제나 외부 기여자분들께 감사의 말씀을 드립니다. 이제 세부 내용을 자세히 살펴보겠습니다!


KAPT에서 점진적 주석 처리


KAPT는 현재 실험 모드에서 점진적 주석 처리를 지원합니다. 시도하려면 gradle.properties 파일에 다음 설정을 추가하십시오:

kapt.incremental.apt=true


현재 구현에서는 점진적 주석 처리 모듈의 의존성 ABI(내부 선언 수정 포함)에 대한 비점진적 주석 처리로 이어집니다.

아직 개선 작업이 진행 중이며 향후 릴리스에서 더 개선될 예정이지만, 지금 사용해보고 피드백을 공유하는 것을 권장합니다!


KAPT: 다른 성능 개선 사항


1.2.60 버전에서 빌드 성능을 개선하기 위해 두 가지 옵션을 도입했습니다. 첫 번째는 Gradle 워커를 사용하는 것이었습니다:

kapt.use.worker.api=true


이 옵션은 이번 릴리스에서 개선되었습니다.

두 번째 옵션은 1.3.20 버전에서 도입되었으며, 컴파일 방지(Compile Avoidance)를 활성화합니다. 이 옵션은 KAPT 의존성이 주석 처리 클래스 경로에 명시적으로 선언된 경우에만 가능합니다. 컴파일 경로에서 AP(주석 처리) 검색을 끄고, 따라서 컴파일 방지를 활성화하려면 다음 옵션을 추가하십시오:

kapt.include.compile.classpath=false


이러한 옵션을 기본적으로 활성화할 예정이므로 프로젝트에서 이를 시도하고 피드백을 주시면 감사하겠습니다!

Gradle의 최소 지원 버전은 이제 4.1입니다. Android Gradle Plugin의 경우 3.0입니다.


표준 라이브러리: 부호 없는 숫자 배열 작업


Kotlin 1.3부터 실험 모드에서 부호 없는 숫자 유형을 사용할 수 있습니다. 이 릴리스에서는 부호 없는 유형 및 부호 없는 유형 배열에 대한 더 많은 작업을 지원하며 일반 숫자 유형과 동일한 작업을 수행할 수 있습니다:

 

fun main() {
	val u1 = 2_147_483_649u
	val u2 = 4_000_000_000u
	println(u1.toDouble())
	println(minOf(u1, u2))

	val array: UIntArray = uintArrayOf(u1, u2)
	println(array.max())
	println(array.all { it > Int.MAX_VALUE.toUInt() })
}

 

이제 부호 없는 숫자 배열에 대해 filter 및 map과 같은 많은 함수적 작업을 사용할 수 있으므로 부호 없는 숫자 배열을 Collection으로 구현할 필요가 없으며 성능 오버헤드를 걱정하지 않고 일반 숫자 배열과 같은 방식으로 부호 없는 숫자 배열을 다룰 수 있습니다.


Kotlin/Native


우리는 지원되는 Kotlin/Native 대상 목록을 확장하게 된 것을 기쁘게 알려드립니다. 이 릴리스에서는 Windows 32 비트 대상 (mingw_x86)을 지원합니다. 또한 Windows 및 macOS 사용자는 Kotlin/Native 프로그램을 Linux x86-64, arm32, Android 및 Raspberry PI 기기로 크로스 컴파일할 수 있습니다.

컴파일러 측면에서 0으로 나누기의 나머지를 계산할 때 정의되지 않은 동작에 대한 수정 사항이 추가되었으며, 이제 예외를 throw합니다. 또한 ARM32 및 MIPS 플랫폼에 대한 정렬 관련 문제가 해결되었습니다.


Apple 플랫폼용 Kotlin/Native


Apple 플랫폼에 대해 여러 개선 사항을 준비했습니다. iOS 기기에서 처리하지 않는 예외는 이제 iOS 충돌 로그에 기록됩니다. 예외 백트레이스(디버그 모드에서)에는 이제 iOS 및 macOS에서 심볼 정보가 포함됩니다.

정적 프레임워크도 생성할 수 있으며, 다음 Gradle 스크립트를 사용하거나 명령 줄에서 -Xstatic-framework 명령줄 매개변수를 사용할 수 있습니다.

 

kotlin {
    macosX64 {
        binaries {
            framework {
                isStatic = true
            }
        }
    }
}

 

Cocoapods


CocoaPods와의 실험적 통합이 별도의 Gradle 플러그인으로 추가되었습니다. 이것은 Kotlin/Native 프로젝트를 .podfile 종속성으로 변환하며 Podfile에 포함할 수 있게 합니다. 이를 통해 Xcode에서 가져오고 빌드하는 경험이 Swift 또는 Objective-C pods로 작업할 때와 동일해집니다. 또한 CocoaPods 종속성을 Kotlin/Native 프로젝트로 가져오고 사용하기 쉽게 만들었습니다. 이 플러그인은 Kotlin/Native 프로젝트에 프레임워크를 가져오기 위한 모든 필요한 구성 단계를 수행합니다. 참고로, 이러한 종속성을 가져오고 빌드하기 위해 Xcode 프로젝트가 필요합니다.

 

// 플러그인 적용
plugins {
    id("org.jetbrains.kotlin.multiplatform") version "1.3.30"
    /// 코코아팟 지원을 위한 새로운 플러그인
    id("org.jetbrains.kotlin.native.cocoapods") version "1.3.30"
}
​
// 코코아팟은 podspec에 버전이 있어야 합니다.
version = "1.0"
​
kotlin {
    cocoapods {
        summary = "a Kotlin/Native module"
        homepage = "homepage"
​
        pod("AFNetworking", "~> 3.2.0")
    }
}

 

./gradlew podspec을 실행하면 Podfile 파일에 포함할 .podspec 파일이 생성됩니다. 팟을 가져오려면 pod() 함수를 사용할 수 있습니다.

 

C interop


이제 콜백 함수에서 구조체를 반환하는 것을 지원하며, staticCFunction은 이제 CValue<T> 반환 유형을 지원합니다! 예를 들어 C 함수를 호출하고 Kotlin으로 구현된 함수에서 구조체를 반환할 수 있습니다:

 

typedef struct { /*... */} result_value;
void *functionWithCallback(result_value (*fun_pointer)() );

 

또한 다음과 같은 변경 사항이 있습니다:

  • C-99 부울 유형이 올바르게 매핑됩니다.
  • UTF-32 C-스트링이 Kotlin String 클래스로 매핑됩니다.
  • C 컴파일러 내장 함수가 platform.builtins 패키지에 포함됩니다.
  • libffi 라이브러리는 더 이상 사용되지 않습니다.
  • Objective-C interop에 대한 Clang 모듈이 지원됩니다.
  • IDE에서 C interop 정의 파일(.def)을 지원합니다.

 

Kotlin/Native IDE 지원


IDE에서 Kotlin/Native를 지원하기 위한 지속적인 작업 결과를 기쁘게 알려드립니다.

IntelliJ IDEA 외에도 CLion 2019.1 및 AppCode 2019.1용 Kotlin/Native 플러그인을 제공할 예정입니다. 모든 IDE에서는 C  interop 정의 파일(.def)을 지원하며, 코드 완성은 아직 제공하지 않지만 지원됩니다.

 


CLion과 AppCode를 위해 백트레이스에서 소스 코드로 이동하는 내비게이션과 디버거 지원 개선 사항도 추가했습니다.


IntelliJ IDEA 지원


디버깅 개선 사항


코루틴 디버깅을 더 쉽게 만들기 위해 노력하고 있습니다. 코루틴 코드를 디버깅할 때 이제 "비동기 스택 추적(Async stack trace)"이라는 별도의 스택 추적을 볼 수 있습니다. 작은 예제를 살펴보겠습니다:

 


디버깅을 위해 suspend 함수 또는 람다 내에서 중단점에서 멈출 때(예: 라인 13에서), "비동기 스택 추적"은 추가로 중단 지점의 변수 상태(라인 12에서의 상태)를 보여줍니다. 현재 코루틴에서 마지막 중단 지점(라인 12 및 4)부터 시작하는 중단 함수 스택 트레이스 전체를 검색하고 변수의 저장된 값을 확인할 수 있습니다.

 


코틀린 코드를 디버깅하는 동안 변수의 값을 관찰하기 위해 "코틀린 모드(Kotlin mode)"를 선택할 수 있습니다. Kotlin 아이콘을 클릭한 후 변수를 이전처럼 보조 JVM 이름이 아닌 Kotlin 이름으로 볼 수 있습니다.

 

fun main() {
	1.foo()
}

fun Int.foo() {
	with("ab") {
		println(this + this@foo)  // breakpoint
	}
}

 

항상 누락된 변수를 watches(감시)를 사용하여 추가할 수 있으며, 위 화면 스크린샷처럼 'variables(변수)' 및 'watches(감시)' 창을 병합하거나 분리하는 방식을 선호에 따라 선택할 수 있습니다.

 

인터랙티브 모드를 사용한 스크래치 파일


Kotlin에서 스크래치 파일을 사용하여 코드베이스에서 작은 실험을 수행할 수 있습니다. 이제 리턴되는 결과를 실시간으로(주어진 시간 후) 표시하는 인터랙티브 모드를 사용할 수 있습니다. 스크립트를 명시적으로 다시 실행하지 않고도 결과를 확인할 수 있습니다.


기타 기능


프로젝트에서 TODO 항목 목록을 시간마다 확인하십니까? IntelliJ IDEA는 이제 다중 줄 TODO 주석을 올바르게 강조표시하고 목록에 표시합니다.

 


이 릴리스에서는 클래스 이름을 가져올 때 클래스 이름에 대한 가져올 별칭(import alias)을 자동으로 도입하는 수정 사항 및 Kotlin 표준 라이브러리가 아닌 Java 8 인터페이스에서 'forEach' 메서드를 사용할 때 Kotlin 표준 라이브러리가 아닌 Java 8 인터페이스를 사용하는 경고와 같은 유용한 검사 및 퀵 픽스가 추가되었습니다.


Eclipse IDE 플러그인 업데이트


Eclipse IDE 플러그인 0.8.14 버전의 새 릴리스는 Kotlin 1.3.30 컴파일러 지원, 전반적인 안정성을 위한 다양한 버그 수정 및 개선 사항을 제공합니다. 이 업데이트에는 Gradle 프로젝트에 대한 실험적인 지원도 추가되었습니다. 이제 Eclipse Buildship을 사용하여 프로젝트를 가져올 수 있으며, 올바른 Kotlin 플러그인 구성으로 Eclipse 워크스페이스에서 프로젝트를 찾을 수 있습니다.

실험적인 Gradle 통합은 업데이트 사이트 https://dl.bintray.com/jetbrains/kotlin/eclipse-plugin/last/를 통해 설치할 수 있습니다. Eclipse의 도움말 메뉴에서 새로운 소프트웨어 설치 대화상자를 열고 업데이트 사이트 URL을 입력하고 Kotlin-gradle을 선택하십시오.

 

 

Spring Tool Suite에서도 새 Gradle 통합을 사용할 수 있습니다. Kotlin으로 Spring 애플리케이션을 개발하려고 할 때 더 이상 Maven을 사용하지 않아도 됩니다.


JVM 바이트 코드 대상 9 - 12 지정


JVM 버전 9, 10, 11 또는 12에서 코드를 실행하는 경우 해당하는 jvmTarget을 설정할 수 있습니다. 이 설정은 생성된 클래스 파일의 버전에 영향을 미치며 결과 바이트 코드는 낮은 JVM 버전에서 실행되지 않습니다. 아직 더 높은 버전은 낮은 버전에서 존재하는 것보다 더 많은 바이트 코드 최적화나 기능을 추가하지 않았지만 향후 변경될 것입니다.


업데이트 방법


항상 온라인에서 play.kotl.in에서 Kotlin을 시도해보실 수 있습니다.

  • Maven, Gradle 및 npm에서 컴파일러 및 표준 라이브러리의 버전 번호로 1.3.30을 사용하십시오. 자세한 내용은 문서를 참조하십시오.
  • IntelliJ IDEA 및 Android Studio에서 Kotlin 플러그인을 버전 1.3.30으로 업데이트하십시오. Tools | Kotlin | Configure Kotlin Plugin Updates에서 "지금 업데이트 확인" 버튼을 클릭하십시오.
  • Eclipse에서 Marketplace를 사용하여 플러그인을 설치하십시오.
  • 명령줄 컴파일러는 Github 릴리스 페이지에서 다운로드할 수 있습니다.


새 릴리스로 인한 문제가 발생하면 포럼에서 도움을 요청하시거나 Slack (초대장 받기)에서 도움을 요청하시거나 문제를 이슈 트래커에 보고하십시오.

Kotlin으로 더 멋진 프로젝트를 진행하세요!

 

외부 기여


특히 Google에서 KAPT의 증분 컴파일을 지원하기 위해 수고한 동료들에게 감사드립니다!

또한 이 릴리스에 대한 커뮤니티 기여자들에게 감사드립니다. 여러분의 작업에 감사드립니다. 특히 다음과 같은 분들께 감사드립니다:

  • Toshiaki Kameyama
  • Mads Ager
  • Ivan Gavrilovic
  • Ting-Yuan Huang
  • Dereck Bridie
  • denisgaebler
  • kenji tomita
  • Bernhard Posselt
  • Wil
  • Burak Eregar
  • Marcin Moskala
  • Felix Guo
  • shiraji
  • Tor Norbye
  • Yaroslav Ulanovych
  • goodsauce
  • hisaaki.sioiri
  • Pavel Nikitin
  • Mark Punzalan
  • Kevin Peek
  • Jim S
  • Timo Obereder

 

이 분들은 이 릴리스에 기여한 커뮤니티 구성원들 중 일부입니다. 그들의 기여에 감사드립니다.

 

원문

 

https://blog.jetbrains.com/kotlin/2019/04/kotlin-1-3-30-released/

반응형

댓글