본문 바로가기
Kotlin/Release Notes

[Kotlin Release Notes] Kotlin 1.3.70 Released

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

2020년 3월 3일

 

코틀린 1.3.70의 최신 버전을 소개해 드립니다.

 


이 점진적인 업데이트에서는 주요 새로운 기능은 제공하지 않습니다. 그러나 기존 기능을 개선하고 문제를 해결하며 실험적인 기능을 추가하기 위해 최선을 다하였습니다. 다음은 Kotlin 1.3.70의 주요 업데이트 내용입니다:

  • 표준 라이브러리에서 Kotlin 컬렉션을 위한 새로운 함수와 클래스 추가.
  • IntelliJ Kotlin 플러그인에서 다양한 개선 사항: *.gradle.kts 지원 개선, 테스트, 디버깅, 자동 완성 등.
  • Kotlin/JVM 컴파일러가 이제 Java 8 이상의 대상에 대한 바이트코드에 유형 주석을 생성합니다.
  • 번들 최적화, npm 종속성 선언, Kotlin/JS를 위한 오랫동안 기다려온 새로운 문서 제공.
  • Kotlin/Native를 위한 더 빠른 컴파일 및 디버깅 지원.
  • IDE 및 명령줄 도구에서 스크립트 지원 개선.

 

변경 내용의 전체 목록은 변경 로그에서 확인하실 수 있습니다. 항상 외부 기여자분들께 감사드립니다.

자세한 내용을 살펴보겠습니다!

 

표준 라이브러리 변경 사항


새로운 함수는 모두 실험적인 상태로 표준 라이브러리에 추가되었습니다.


공용 라이브러리에서 StringBuilder 확장


StringBuilder는 이미 공용 표준 라이브러리인 kotlin.text 패키지에 존재했습니다. 그러나 많은 중요한 멤버가 누락되었거나 JVM에서만 사용 가능했습니다. 이제 JVM의 StringBuilder 기능이 공용 기대 클래스에 해당 플랫폼에서의 구현과 함께 추가되었습니다. 이것은 필요한 모든 멤버가 있기 때문에 공용 코드에서 효과적으로 StringBuilder를 사용할 수 있음을 의미합니다.


KClass에서 작업


JVM에서는 이제 KClass의 일부 기본 유용 멤버가 kotlin-reflect 종속성이 더 이상 필요하지 않습니다.

 

import kotlin.reflect.cast

@OptIn(ExperimentalStdlibApi::class)
fun main() {
    val kClass = String::class
    println(kClass.simpleName) // String
    println(kClass.qualifiedName) // kotlin.String

    println(kClass.isInstance("abc")) // true
    println(kClass.isInstance(10)) // false
    println(kClass.cast("abc")) // abc
}

 

이전에는 실행 시 Kotlin 리플렉션 구현을 제공해야 했습니다. 이제 추가 종속성 없이도 이러한 간단한 멤버를 사용할 수 있습니다.


실험적 어노테이션의 이름 변경 (@Experimental 및 @UseExperimental)


알 수 있듯이 Kotlin에는 실험적 기능을 사용하기 위한 내장 메커니즘이 있습니다. 이것은 표준 라이브러리에서 실험적인 것 자체 또는 다른 실험적 선언을 사용하는 선언을 표시하는 어노테이션을 포함합니다. 이전 버전에서는 @UseExperimental 및 @Experimental이었습니다.

이 메커니즘의 범위를 확장하기로 결정했습니다. 실험 상태에 있는 것이 사용 API에 동의를 요구하는 유일한 이유가 아니기 때문입니다. 예를 들어 API가 내부적이거나 일부 제한을 가질 수 있습니다. 이에 따라 어노테이션의 이름을 변경하였습니다. @OptIn 및 @RequiresOptIn이 각각 @UseExperimental 및 @Experimental을 대체하였습니다. 컴파일러 인수 -Xuse-experimental은 -Xopt-in으로 변경되었습니다. -Xexperimental에 대해서는 사용 빈도가 낮고 복잡성을 증가시키기 때문에 삭제합니다. 이전 선언 @Experimental 및 @UseExperimental은 1.3.70에서는 지원되지만 1.4에서는 삭제될 예정입니다.


실험적 시간 측정 API의 이름 변경


또한 Duration 및 Time 측정 API의 이름을 변경하였습니다. Clock 및 ClockMark는 각각 TimeSource 및 TimeMark로 변경되었습니다. 이전 이름은 현재로서는 이제는 사용되지 않지만 향후에 삭제 예정입니다.


더블 엔디드 큐 구현: ArrayDeque


코틀린 표준 라이브러리에 이중 엔디드 큐 구현인 kotlin.collections.ArrayDeque 클래스를 추가하여 기쁘게 생각합니다! 커뮤니티에서 요청한 내용입니다. Java 표준 라이브러리의 java.util.ArrayDeque 클래스를 사용할 수는 있지만 Kotlin/JS, Kotlin/Native 및 공용 코드에서 사용할 수 있는 공통 구현이 없었습니다. 이제 실험적인 상태로 이러한 구현이 사용 가능합니다.

더블 엔디드 큐를 사용하면 큐의 시작 및 끝에서 요소를 추가/제거할 수 있으며 상환 시간에 실행할 수 있습니다.

 

@OptIn(ExperimentalStdlibApi::class)
fun main() {
    val deque = ArrayDeque(listOf(1, 2, 3))

    deque.addFirst(0)
    deque.addLast(4)
    println(deque) // [0, 1, 2, 3, 4]

    println(deque.first()) // 0
    println(deque.last()) // 4

    deque.removeFirst()
    deque.removeLast()
    println(deque) // [1, 2, 3]
}

 

더블 엔디드 큐는 코드에서 큐 또는 스택이 필요할 때 기본적으로 사용할 수 있습니다. kotlin.collections.ArrayDeque 구현은 크기가 조절 가능한 배열을 사용합니다. 내용물을 원형 버퍼, 배열에 저장하고 이 배열은 가득 차면 크기를 조절합니다.

개념적으로 ArrayDeque의 구현은 java.util.ArrayDeque의 구현과 매우 유사합니다. 그러나 새로운 구현은 Kotlin/JVM에서 이 클래스를 사용할 때만 사용됩니다. 다른 컬렉션과는 달리 ArrayList를 만들고 JVM으로 컴파일하면 내부적으로 java.util.ArrayList 클래스가 사용됩니다. Java의 ArrayDeque는 Collection 인터페이스만 구현하는 반면, Kotlin의 ArrayDeque는 MutableList를 구현합니다. 이것은 Java의 ArrayDeque에서 불가능한 인덱스를 사용하여 모든 요소에 액세스할 수 있음을 의미합니다.

ArrayDeque 클래스를 실험적 상태로 릴리스하고 피드백을 기다리고 있습니다!


컬렉션 빌더


또 다른 중요한 새로운 기능은 컬렉션을 위한 빌더 함수인 buildList, buildSet 및 buildMap입니다. 이러한 빌더 함수를 사용하여 생성 단계에서 가변 컬렉션을 편리하게 조작하고 읽기 전용 컬렉션을 결과로 얻을 수 있습니다.

 

@OptIn(ExperimentalStdlibApi::class)
fun main() {
    val needsZero = true
    val initial = listOf(2, 6, 41)

    val ints = buildList { // this: MutableList
        if (needsZero) {
            add(0)
        }
        initial.mapTo(this) { it + 1 }
    }
    println(ints) // [0, 3, 7, 42]
}

 

이러한 빌더 함수는 buildString과 유사하게 구현됩니다. buildList는 람다를 수신자로 사용하여 인수로 취합니다. 람다 내부의 암시적 "this" 수신자는 MutableList 유형을 가지며 buildList는 결과로 읽기 전용 List를 반환합니다.

조건, 여러 초기 컬렉션 수정 및 결과 병합과 같은 복잡한 조작을 수행해야 할 때 빌더 함수를 사용하는 것이 종종 더 가독성이 좋고 성능 면에서 더 효과적일 수 있습니다. 이러한 함수들도 현재 실험적 상태로 릴리스되었습니다.


reduceOrNull() 및 randomOrNull() 대응 함수


Kotlin에서 이 관례를 알고 계실 것입니다. 첫 번째 함수는 작업이 불가능한 경우 예외를 throw하고 두 번째 함수는 null을 반환합니다. 예를 들어 string.toInt() 및 string.toIntOrNull()과 같습니다. 이제 새로운 randomOrNull() 및 reduceOrNull() 대응 함수를 추가하였으며 동일한 관례를 따릅니다.

 

@OptIn(ExperimentalStdlibApi::class)
fun main() {
    val list = listOf(1, 2, 3)
    println(list.randomOrNull()) // 2
    println(list.reduceOrNull { a, b -> a + b }) // 6

    val emptyList = emptyList<Int>()
    println(emptyList.randomOrNull()) // null
    println(emptyList.reduceOrNull { a, b -> a + b }) // null
}

 

.random() 또는 reduce()를 사용하는 경우 컬렉션이 비어 있는 경우 예외가 발생합니다.


scan() 함수


리스트 및 시퀀스 작업을 위한 새로운 함수 세트를 추가하고 있습니다. 이것들은 "스캔" 개념을 나타냅니다. 비슷한 함수는 이미 다른 라이브러리와 언어에 존재합니다.

scan()은 fold()와 밀접하게 관련이 있습니다. scan()과 fold() 모두 주어진 이진 연산을 값 시퀀스에 적용하지만 scan()은 중간 결과의 전체 시퀀스를 반환하고 fold()는 최종 결과만 반환합니다.

 

@OptIn(ExperimentalStdlibApi::class)
fun main() {
    val ints = (1..4).asSequence()
    println(ints.fold(0) { acc, elem -> acc + elem }) // 10

    val sequence = ints.scan(0) { acc, elem -> acc + elem }
    println(sequence.toList()) // [0, 1, 3, 6, 10]
}

 

fold와 마찬가지로 scan은 초기 누산기 값을 취합니다.

 


Kotlin을 사용하여 결과 유형이 요소 유형과 동일하고 첫 번째 요소를 초기 값으로 사용할 수 있는 경우 reduce() 및 scanReduce() 함수를 사용할 수 있습니다.

참고로 scan() 및 scanReduce()를 시퀀스에 사용할 때 결과로 시퀀스를 반환하며 자연스럽게 게으른 특성을 가집니다. 이것은 결과 시퀀스에서 데이터를 요청할 때 스캔 프로세스가 시작되며 특정한 종단 작업(다른 시퀀스가 아닌 결과를 반환하는 작업)을 호출할 때만 작동한다는 것을 의미합니다. 예를 들어 toList() 또는 max()와 같은 작업을 호출할 때 스캔 프로세스가 시작됩니다. 리스트에서 scan() 및 scanReduce()를 사용할 때 결과로 리스트를 반환합니다.


IntelliJ IDEA 지원


이 릴리스에는 IntelliJ IDEA에서의 Kotlin 지원을 위한 여러 개선 사항이 포함되어 있습니다. 가장 흥미로운 것들을 살펴보겠습니다.


.gradle.kts 지원


1.3.70에서는 IntelliJ IDEA의 Gradle Kotlin DSL 스크립트 (.gradle.kts 파일) 지원을 개선하기 위해 노력하였습니다. 결과적으로 Kotlin 플러그인의 최신 버전은 Kotlin 빌드 스크립트와 관련된 구문 강조 표시, 자동 완성, 검색 및 기타 측면에서 성능이 향상되었습니다. 개선 사항에 대한 자세한 검토는 이 블로그 게시물에서 제공됩니다. 모든 변경 사항과 개선 사항을 즐기려면 IntelliJ IDEA 2019.2 이상 및 Gradle 6.0 이상을 사용해야 합니다.


코드 완성


1.3.70에서는 IntelliJ IDEA에서 Kotlin 코드 완성을 크게 개선했습니다. 이제 완성 제안에는 객체에서 선언된 함수, 확장 함수를 포함한 객체 수준의 재정의 및 중첩된 객체에서 선언된 함수도 포함됩니다.

 

 

새로운 색상 스키마


코드 편집기에서 Kotlin 코드의 외관을 원하는 대로 변경할 수 있도록 새로운 사용자 정의 가능한 색상 스키마를 추가했습니다. 특히 suspend 함수 호출 및 프로퍼티 선언을위한 자체 색상 스키마를 설정할 수 있습니다.

 


디버깅 개선 사항


이전 버전에서 Kotlin/Native 디버거는 별도의 중단점 유형을 가졌는데 이는 "여기서 어떤 중단점 유형을 사용해야 할까?"와 같은 애매한 선택으로 사용자를 혼란스럽게 했습니다. 이제 Kotlin Line Breakpoint라는 단일 중단점 유형이 JVM 및 Native 대상 모두에 대해 작동합니다.

 

Kotlin/JS 및 Kotlin/Native 테스트


Kotlin/JS 및 Kotlin/Native에 대한 테스트 결과는 이제 IntelliJ IDEA에서 직접 표시됩니다. 또한 Kotlin/JS의 테스트 필터링을 수정하여 개별 테스트를 실행할 수 있으며 iOS 시뮬레이터를 대상으로 하는 Kotlin/Native 테스트도 "재생" 버튼을 눌러 직접 시작할 수 있게 수정하였습니다.

 

또한 IntelliJ IDEA Ultimate에서는 테스트 선언 근처의 아이콘을 클릭하여 Kotlin/JS 디버깅을 시작할 수 있습니다.

또는 Gradle 도구 창에서 nodeRun, nodeTest 또는 browserTest 작업을 수동으로 선택하여 디버깅을 시작할 수 있습니다. browserRun의 경우 개발 서버를 시작한 후 Attach to Node.js/Chrome 실행 구성을 사용하여 디버거를 연결할 수 있습니다.


다른 주목할 만한 개선 사항


IntelliJ IDEA에서의 Kotlin 지원에서도 다른 개선 사항이 있습니다. 몇 가지 언급할 가치가 있는 개선 사항은 다음과 같습니다.

- 파일 분석 및 복사-붙여넣기 작업의 성능 개선.
- 무의미한 단항 연산자에 대한 새로운 검사. 긴 표현식을 여러 줄로 나눌 때 나타날 수 있습니다.

 


- 다양한 서식 변경, 호출 체인 서식, 줄 바꿈, 간격 및 주석 서식 개선.

 

Kotlin/JVM


Kotlin은 이제 JVM 바이트코드 (대상 버전 1.8+)에서 유형 주석을 생성하여 실행 중에 사용할 수 있습니다. 이 기능은 커뮤니티에서 오랫동안 요청되어 왔으며 기존의 몇 가지 Java 라이브러리를 사용하기가 훨씬 쉽고 새 라이브러리를 작성하는 사람들에게 더 많은 기능을 제공합니다.

다음 예에서 @Foo 주석은 String 유형에 바이트코드로 발행될 수 있으며 라이브러리 코드에서 사용할 수 있습니다.

 

@Target(AnnotationTarget.TYPE)
annotation class Foo

class A {
    fun foo(): @Foo String = "OK"
}

 

바이트코드에서 유형 주석을 발행하려면 다음 단계를 따르십시오:

  • 선언된 주석이 올바른 주석 대상 (Java의 ElementType.TYPE_USE 또는 Kotlin의 AnnotationTarget.TYPE)과 보존 (AnnotationRetention.RUNTIME)을 가지고 있는지 확인하십시오.
  • 주석 클래스 선언과 이 주석을 사용하는 코드 (위 예제의 클래스 A)를 JVM 바이트코드 대상 버전 1.8+로 컴파일하십시오. 이것은 -jvm-target=1.8 컴파일러 옵션을 사용하여 지정할 수 있습니다.
  • 주석을 사용하는 코드를 -Xemit-jvm-type-annotations 컴파일러 옵션과 함께 컴파일하십시오.
    표준 라이브러리의 유형 주석은 현재 1.6 대상 버전으로 컴파일되어 있기 때문에 바이트코드에 발행되지 않습니다.


지금까지 기본적인 경우만 지원됩니다:

  • 메서드 매개변수, 메서드 반환 유형 및 속성 유형에 대한 유형 주석.
  • 불변 프로젝션의 유형 인수, 예: Smth<@Ann Foo>, Array<@Ann Foo>.


향후에는 공변 및 반공변 유형 프로젝션에 대한 유형 주석 생성과 내부 유형 (Smth<@Ann Outer.Inner>와 같은)에 대한 주석을 지원할 계획입니다. 지원되는 경우가 이미 대부분의 실제 시나리오를 포함하고 있다고 믿지만 더 복잡한 경우에 유형 주석이 필요한 경우 알려주세요.


Kotlin/JS


Kotlin 1.3.70에서 JavaScript 대상은 번들 크기 측면에서 중요한 최적화를 받으며 종속성, 리소스 및 테스트 처리 방법에 대한 몇 가지 개선 사항이 추가되었습니다. 또한 대상에 대한 문서 개편을 자세히 소개하고 있습니다.

 

번들 최적화


Kotlin 1.3.70부터 org.jetbrains.kotlin.js Gradle 플러그인을 통해 DCE (Dead Code Elimination)가 자동으로 사용 가능하며 수동으로 추가할 필요가 없습니다. 이 최적화 및 JS 프로젝트의 최적화 및 실행을 제어하는 데 사용할 수 있는 새로운 작업 세트를 제공합니다.

개발 중에는 browserDevelopmentRun을 사용하여 번들 개발 서버와 함께 비최적화 실행을 시작하고 browserDevelopmentWebpack을 사용하여 빌드/distributions 폴더에 비최적화 번들을 생성할 수 있습니다. 최적화를 실행하지 않기로 선택하면 빌드 시간이 더 빨라지지만 컴파일된 프로그램의 파일 크기가 더 크게 됩니다.

생산 준비를 할 때는 browserProductionRun을 사용하여 최적화된 실행을 시작하고 browserProductionWebpack을 사용하여 생산용으로 배포하기 적합한 최적화된 번들을 생성합니다. 생산 빌드는 약간 더 오래 컴파일되지만 개발 버전보다 훨씬 더 최적화된 번들을 얻게 됩니다.

 

 

이전의 Gradle 작업 browserRun (이제 browserDevelopmentRun의 별칭) 및 browserWebpack (이제 browserProductionWebpack의 별칭)은 현재 사용 가능하지만 빌드 스크립트에서 이들의 최신 버전과 대체해야 합니다.

이러한 Gradle 작업은 멀티플랫폼 또는 kotlin.js Gradle 플러그인을 사용하는 프로젝트에 사용할 수 있습니다. kotlin.js의 경우 browserDevelopmentRun 및 browserProductionWebpack의 실행에 대한 짧은 작업 별칭인 run 및 build를 사용할 수도 있습니다.

Kotlin/JS Gradle 플러그인을 사용할 때 더 이상 주요 소스 세트를 수동으로 추가하지 않고도 최상위 종속성 블록 내에서 npm 종속성을 선언할 수 있습니다. 따라서 다음 스니펫은 이제 유효합니다.

 

dependencies {
    implementation(npm("react", "16.12.0"))
}

 

Gradle을 통해 Kotlin/JS 브라우저 대상의 테스트를 직접 디버깅할 수 있게 되었습니다. 실패한 테스트를 디버깅하려면 IDE에서 중단점을 설정한 다음 디버그 모드에서 check Gradle 작업을 시작하거나 테스트 세트를 디버그하려면 gutter 아이콘을 사용하십시오. Gradle은 플랫폼을 대상으로 test 작업을 실행하며 디버거는 합성 중단점에서 멈출 것입니다. Gradle이 콘솔에 browserTest 작업을 표시하면 디버거는 합성 중단점에서 중단할 것입니다.

이 단계에서 디버거에서 :browserTest 세션으로 전환하고 "디버거"로 표시된 탭을 선택한 다음 "프로그램 재개" 버튼을 클릭하여 테스트를 실행하기 시작하십시오.

현재 이 프로세스는 IntelliJ IDEA의 디버거를 JS 엔진과 동기화시키기 위해 필요합니다. 디버깅 세션을 시작하는 데 필요한 단계 수가 불편하다는 것을 알고 있으므로 향후 버전에서는 훨씬 더 원활한 디버깅 경험을 제공할 예정입니다.

일부 해결되지 않은 문제를 해결한 후 Kotlin 코드를 대상으로 하는 Node.js를 디버깅하는 데도 동일한 경험을 제공할 계획입니다.


개선된 문서


Kotlin 1.3.70에서는 Kotlin/JS 대상의 문서와 자습서에 오랜 기다림을 겪은 변경 사항을 적용하여 Kotlin/JS로 작업을 시작하는 데 도움이 되기를 바랍니다. 문서를 새롭게 업데이트하고 오래된 자료를 삭제했습니다. 또한 Kotlin/JS를 사용할 때 일반적인 작업을 개요로 설명하는 새로운 짧은 형식의 자습서 시리즈를 웹 사이트에 추가했습니다. 이 자습서는 Kotlin/JS Gradle 플러그인을 사용하는 방법을 설명하며 Kotlin/JS 대상 애플리케이션을 빌드할 때 일반적인 작업을 다룹니다. "React 및 Kotlin/JS로 웹 애플리케이션 빌드"라는 실전 과정도 업데이트되었으며 이제 Kotlin/JS Gradle 플러그인을 사용하는 방법을 가르칠 수 있습니다.

이러한 변경 사항이 Kotlin/JS로 시작하고 작업하는 데 도움이 되기를 바랍니다. Kotlin/JS로 프론트엔드 개발을 시도하려는 경우 특히 이 문서와 참조 자료를 향상시키는 데 도움이 되는 것으로 알고 있습니다. 따라서 문서나 How-To에서 아직 필요한 중요한 부분이 빠져 있다면 의견을 남겨주시기 바랍니다.

 

Kotlin/Native


성능 최적화


버전 1.3.70에서는 Kotlin/Native 개발 프로세스의 전체적인 성능을 최적화하는 작업의 첫 결과물을 소개하고 있습니다. 컴파일 시간 성능은 Kotlin/Native 개발에서 알려진 약점 중 하나였으므로 컴파일 시간을 줄이기 위한 두 가지 새로운 기능이 있습니다.

  • 이제 Kotlin/Native 컴파일러는 Gradle 데몬에서 직접 실행되므로 각 컴파일마다 새 프로세스를 시작하고 컴파일러를 로드하는 데 걸리는 시간이 없습니다.
  • 디버그 모드에서 컴파일러는 프로젝트 종속성을 캐시합니다. 이제 첫 번째 컴파일은 조금 더 오래 걸리지만 그 이후의 컴파일은 더 빠르게 완료됩니다. 현재 이 기능은 iOS 시뮬레이터 (iosX64)와 macOS (macosX64)에서만 작동합니다. 이 부분에 대해서는 계속 작업 중입니다.

 

실행 중 및 디버그 성능 향상에도 신경을 썼습니다. 1.3.70에서는 객체 할당에 소요되는 시간을 줄였습니다. 이제 더 많은 객체가 스택에 할당되며 (힙 할당보다 빠릅니다) 일부 싱글톤 객체는 컴파일 시간에 생성됩니다. 디버깅 프로세스도 더 빨라졌습니다.


단일 애플리케이션에서 여러 Kotlin 프레임워크 지원


이전에는 애플리케이션이 런타임에서 정의된 Obj-C 클래스가 충돌하여 다른 런타임 인스턴스에서 온 것으로 인해 더 이상 하나 이상의 동적 Kotlin/Native 프레임워크를 사용할 수 없는 알려진 문제가 있었습니다. 이 문제는 1.3.70에서 해결되었으므로 이제 애플리케이션에서 여러 Kotlin/Native 프레임워크를 사용할 수 있습니다. 공통 종속성은 서로 다른 Swift 모듈 (Obj-C 접두사와 함께) 내에서 프레임워크에 포함됩니다.


벡터 유형 지원


1.3.70부터 Kotlin/Native는 SIMD 유형을 지원합니다. 이로 인해 Kotlin/Native에서 사용할 수 있는 더 많은 서드파티 API가 제공되며 Apple의 인기있는 프레임워크인 Accelerate와 SpriteKit과 같은 것들도 사용할 수 있습니다.


스크립팅


버전 1.3.70에서는 IntelliJ IDEA 및 Kotlin 명령줄 도구와 함께 Kotlin 스크립트를 사용하는 더 나은 경험을 제공하는 개선 사항 집합을 제공합니다. 또한 Kotlin 스크립팅을 익히기 위한 도움말을 제공하고 있습니다. 이 프로젝트에는 표준 스크립트 (* .main.kts)의 예제와 스크립팅 API 사용 및 사용자 정의 스크립트 정의의 예제가 포함되어 있습니다. 이를 시도하고 문제 트래커에서 의견을 공유해 주세요.


컴파일러와 IDE에서 kotlin-main-kts 지원


Kotlin 1.3에서는 kotlin-main-kts 아티팩트를 소개하여 기본 유틸리티 스크립트의 생성과 사용을 단순화했습니다. 이제 Kotlin 컴파일러와 IntelliJ 플러그인에서 기본적으로 로드되므로 *.main.kts 스크립트가 기본적으로 지원됩니다. 특히 이제 클래스 경로에 kotlin-main-kts.jar를 추가하지 않고도 이러한 스크립트를 사용할 수 있습니다. IntelliJ IDEA에서는 *.main.kts 파일에 대한 강조 표시 및 내비게이션을 제공하며 소스 디렉토리 외부에서도 지원합니다. 또한 *.main.kts 스크립트 실행의 성능을 향상시켜 여러 번의 실행을 훨씬 빠르게 만들기 위해 캐싱을 활성화했습니다.


명령줄 도구


명령줄 도구에서도 Kotlin 스크립팅 지원을 확장했습니다. Kotlin 명령줄 컴파일러와 함께 제공되는 kotlin 러너는 이제 스크립트 실행을 지원합니다. kotlin으로 스크립트를 실행하려면 스크립트 파일 이름을 전달하기만 하면 됩니다.

 

kotlin myscript.main.kts

 

이와 같은 호출은 스크립트를 -script 옵션으로 컴파일러를 호출한 것처럼 정확히 실행합니다. kotlin은 .main.kts 스크립트를 기본으로 인식합니다. kotlin 러너는 표현식 평가에도 사용할 수 있습니다. 표현식을 평가하려면 -e/-expression 옵션의 값으로 전달하십시오.

 

kotlin -e "1 + 3 + 70"

 

결과를 즉시 얻을 수 있습니다. 동일한 기능은 Kotlin 명령줄 컴파일러에도 추가되었지만 -Xexpression과 같은 다른 옵션 이름을 사용합니다.

 

kotlinc -Xexpression="1 + 3 + 70"

 

업데이트 방법


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

 

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


새 릴리스로 인해 문제가 발생하는 경우 포럼이나 Slack(여기에서 초대를 받으실 수 있습니다)에서 도움을 요청하거나 문제를 보고해 주시기 바랍니다.

Kotlin을 이용해 더 멋진 개발을 하시길 바랍니다!

 

외부 기여자들에게 감사의 인사를 전합니다.


Fleshgrinder님은 컬렉션용 빌더 함수 지원을 추가한 데 대한 작업에 대해 감사드립니다. adellibovi님은 reduceOrNull() 함수를 추가한 작업에 대해 감사드립니다.

또한 이 릴리스에 포함된 외부 기여자들의 풀 리퀘스트를 제출한 모든 분들께 감사드립니다:

  • pyos
  • Steven Schäfer
  • Toshiaki Kameyama
  • Mark Punzalan
  • Mads Ager
  • Kristoffer Andersen
  • Ivan Gavrilovic
  • Jiaxiang Chen
  • Kevin Bierhoff
  • Alfredo Delli Bovi
  • Tillmann Berg
  • Victor Turansky
  • Alexander Shustanov
  • Leonardo Colman Lopes
  • Juan Chen
  • Jordan Demeulenaere
  • Jim Sproc
  • Burak Eregar
  • Dmitry Jarosh
  • Dat Trieu
  • Dmitry Borodin
  • Efeturi Money
  • Miguel Serra
  • Fleshgrinder
  • Jens Klingenberg
  • Louis CAD

 

당신들의 기여로 Kotlin의 발전에 기여해 주셔서 감사합니다!

 

원문

 

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

반응형

댓글