2016년 7월 14일
코틀린 1.0.X 버전은 점진적인 업데이트와 도구 기능을 제공하고 있습니다. 우리는 코틀린 1.1에서 새로운 언어 기능을 개발하고 있습니다. 오늘은 1.1의 첫 번째 미리보기 버전을 발표합니다. 베타 버전은 아니지만, 호기심 많고 용감한 분들께서 새로운 흥미로운 기능을 사용해보고 소중한 피드백을 주시면 감사하겠습니다.
호환성
이 버전은 코틀린의 안정된 버전이 아닙니다. 미래의 1.1 미리보기 버전에서는 문법, API, 명령줄 스위치 및 기타 모든 것이 변경될 수 있습니다. 안정된 코틀린 버전이 필요하면 1.0.X 버전을 계속 사용하시기 바랍니다.
피드백
임시적으로 보장되지 않은 이러한 호환성 부재의 장점은 여러분의 피드백을 즉시 활용할 수 있다는 점입니다! 여러분의 의견을 전달하는 가장 좋은 방법은 KEEP(Kotlin Evolution and Enhancement Process)입니다. 아래에서 제시된 제안과 관련된 이슈에 의견을 남겨주시면 됩니다. 코틀린 1.1 M01에서의 구현은 KEEPs에 설명된 기능의 프로토 타입입니다.
개요
1.1 M01 버전의 전체 변경 로그는 여기에서 확인하실 수 있습니다.
코루틴
우리는 모두 블로킹이 고부하 상황에서 좋지 않고 폴링은 피해야 한다는 것을 알고 있습니다. 또한 세계는 푸시 기반 및 비동기 방식으로 점점 변화하고 있습니다. 많은 언어들(2012년 C#부터)은 async/await 키워드와 같은 전용 언어 구조를 통해 비동기 프로그래밍을 지원합니다. 코틀린에서는 이 개념을 일반화하여 라이브러리가 고유한 버전의 이러한 구조를 정의할 수 있도록 하였으며, async는 키워드가 아닌 단순히 함수입니다.
이 설계는 다양한 비동기 API의 통합을 가능하게 합니다. futures/promises, 콜백 전달 등도 포함됩니다. 또한 yield와 같은 게으른 생성기(lazy generator)와 일부 다른 사용 사례도 포괄할 수 있습니다.
그래서, 코틀린 1.1의 중요한 기능 중 하나인 코루틴을 소개합니다. 이것은 "비선점 멀티태스킹을 위한 프로그램 구성 요소를 일반화하는 CS 용어"입니다. 하지만 여기서는 이론에 빠지지 않겠습니다 :)
fun main(args: Array<String>) {
val future = async<String> {
(1..5).map {
await(startLongAsyncOperation(it)) // 긴 작업이 실행되는 동안 일시 중단
}.joinToString("\n")
}
println(future.get())
}
코루틴의 큰 장점은 스레드를 차단하지 않고 일시 중단할 수 있으며, 일반적인 순차적인 코드와 같이 보입니다. 자세한 설명과 예제는 별도의 KEEP 저장소에서 확인하고 관련된 이슈에 의견을 남기십시오.
우리는 이곳에서 코루틴 기반 라이브러리를 프로토 타입으로 제작 중이며, 이는 나중에 표준 라이브러리에 포함될 예정입니다. 이에는 JDK의 CompletableFuture, 비동기 IO(NIO), RxJava 및 Swing의 UI 스레드에서 작업을 오프로드하는 것도 포함됩니다. 이 저장소에는 예제와 라이브러리 자체도 포함되어 있습니다. 사용 방법은 readme 파일에 나와 있습니다.
타입 별칭
코틀린 1.1에서는 다음과 같이 작성할 수 있습니다.
typealias Action<T> = (T) -> Unit
이는 Action<T>를 (T) -> Unit과 교환 가능하게 사용할 수 있음을 의미합니다. 다시 말해서, 이것은 진정한 별칭(alias)입니다. 타입 별칭은 코드에서 여러 곳에서 사용되는 긴 타입을 줄이는 데 유용합니다:
- 복잡한 시그니처를 가진 함수 타입: UserAction = (User, Context) -> ActionResponse
- 복잡한 제네릭 타입
Multimap<K, V> = Map<K, List<V>>
질문들을 예상하면서 말씀드리자면, 이 기능은 별칭된 타입이 원본 타입에 할당할 수 없는 경우를 다루지 않습니다(해스켈의 newtype과 유사한 경우): 예를 들어 우리가 측정 단위를 구현하려고 시도하고 다음과 같이 말한다고 가정해보겠습니다.
typealias Length = Double
typealias Weight = Double
이는 크게 도움이 되지 않을 것입니다. 왜냐하면 Length는 Weight에 자유롭게 할당될 수 있기 때문입니다. 사실, 이들은 모두 일반적인 Double에 할당될 수 있습니다. 이러한 사용 사례의 중요성을 이해하고 있으며, 이러한 경우를 미래에 다루기로 계획하고 있습니다. 아마도 값을 가진 클래스(value classes)를 통해 이를 다룰 것입니다. 하지만 지금은 타입 별칭만 사용할 수 있습니다.
더 읽기 및 의견 남기기
바운드 호출 참조
코틀린 1.0에서는 String::length와 같이 클래스 이름을 사용하여 함수(또는 속성)에 대한 참조를 얻을 수 있습니다. 1.1에서는 바운드 참조를 추가하고자 합니다. 즉, 변수(또는 다른 표현식)인 mystr::length와 같이 사용할 수 있을 것입니다. 이러한 참조는 수신자에 바인딩되어 있으며, 이는 일부 함수 적용의 특별한 경우입니다(적어도 현재로서는 일반적인 경우에는 지원하지 않습니다).
더 읽기 및 의견 남기기
로컬 위임 속성 및 인라인 속성
위임된 속성은 매우 유용한 추상화입니다. 이제 우리는 함수 또는 코드 블록 내부에서도 위임된 속성을 허용합니다. 예를 들어 다음과 같이 할 수 있습니다.
fun example(foo: (Bar) -> Foo, bar: Bar) {
val memoizedFoo by lazy { foo(bar) }
// foo 대신 memoizedFoo를 사용하여 한 번만 계산되도록 합니다.
if (someCondition && memoizedFoo.isValid()) {
memoizedFoo.doSomething()
}
}
DSL 및 스크립트도 이 기능을 활용할 수 있을 것입니다.
더 읽기 및 의견 남기기로 이동합니다.
우리는 이제 속성 접근자를 인라인할 수 있습니다.
신축적인 실드 클래스 및 데이터 클래스 규칙
우리는 데이터 클래스와 실드 클래스에 일부 제약을 완화하였습니다.
이제 데이터 클래스는 다른 클래스에서 상속받을 수 있습니다. 자동 생성된 메서드가 슈퍼 클래스에서 정의된 메서드를 덮어쓸 수 있음에 유의하십시오!
실드 클래스의 경우, 그들의 하위 클래스가 정의될 수 있는 범위를 확장하였습니다. 이전에는 실드 클래스 자체 내부에서만 정의할 수 있었지만, 이제는 동일한 파일 내 어디에서든 정의할 수 있습니다.
여기에서 더 읽기 및 의견 남기기: 링크로 이동합니다.
스크립팅
아마도 이미 들으셨겠지만, 우리는 곧 Gradle 빌드 스크립트를 Kotlin으로 작성할 수 있게 될 것입니다. 이는 이러한 스크립트를 편집하는 IDE 경험을 크게 개선하고 정적 타입 검사를 통해 신뢰성을 높일 것입니다. 이 프로젝트는 우리에게 일반적인 Kotlin 스크립팅을 개발할 동기를 제공했습니다: 여러 도구의 맥락에서 Kotlin 스크립트를 사용하고 일반적인 명령 줄 지원을 가능하게 하는 인프라를 개발 중입니다.
제안서에서 더 많은 세부 정보를 확인하십시오.
Java 7/8 지원
우리는 Java 8에 대한 개선된 지원을 위해 작업 중입니다: 1.1은 이전에 있었던 Stream API와 관련된 문제를 해결하고, Java 클라이언트가 기본 메서드를 원활하게 구현할 수 있도록 인터페이스에서 기본 메서드 생성을 지원합니다. 여기서 제안된 내용을 읽고 의견을 남기십시오.
8 버전 클래스 파일의 생성을 활성화하려면 -jvm-target 1.8 커맨드 라인 스위치를 제공하십시오.
또한 표준 라이브러리에 새로운 함수를 추가하고 있습니다. 이러한 함수들은 1.6 이상의 Java API에 의존하므로, kotlin-stdlib 대신에 Maven/Gradle 빌드에서 이러한 API를 추가하는 kotlin-stdlib-jre7 및 kotlin-stdlib-jre8 새로운 아티팩트를 도입하고 있습니다. 이 아티팩트를 사용하면 AutoCloseable.use(), 정규식 명명 그룹 지원 및 스트림 관련 함수와 같은 추가 기능을 사용할 수 있습니다. API가 필요한 경우 이러한 아티팩트를 사용하십시오.
표준 라이브러리에 관련된 제안을 읽고 논의하십시오.
JavaScript
우리는 JavaScript 백엔드에 열심히 작업하고 있습니다. 1.0에서 사용 가능한 모든 언어 기능을 이미 포함하고 있으며, JavaScript(런타임) 모듈 시스템을 통합하고자 합니다. 이 모든 기능은 Kotlin 1.0.X 버전에서도 사용 가능합니다.
여기서 JavaScript와 관련된 제안을 찾을 수 있습니다.
기여자들
dotlin, Valdemar0204, ensirius 및 geoand 사용자분들께 이 버전에 대한 기여에 대해 감사드립니다!
사용 방법
Maven/Gradle에서. 프로젝트에 http://dl.bintray.com/kotlin/kotlin-eap-1.1 (“Set me up!” 아래의 지침 참조) 저장소로 추가하십시오. Kotlin 아티팩트에 대한 버전으로 1.1-M01을 사용하십시오.
IDE에서. Kotlin 1.0.3을 실행 중이라면, Tools → Kotlin → Configure Kotlin Plugin Updates로 이동한 다음 Update channel 드롭다운 목록에서 "Early Access Preview 1.1"을 선택하십시오.
동일한 대화 상자에서 Check for updates를 누르고 새 버전이 표시되면 Install을 선택하십시오.
try.kotlinlang.org에서. 하단 오른쪽 모서리의 드롭다운 목록을 사용하여 컴파일러 버전을 변경할 수 있습니다.
SDKMan을 사용하는 경우. sdk install kotlin 1.1-M01을 실행하십시오.
항상 여러분의 의견을 환영합니다.
좋은 코틀린 사용하십시오!
원문
'Kotlin > Release Notes' 카테고리의 다른 글
[Kotlin Release Notes] Kotlin 1.1-M02 is here! (0) | 2023.09.02 |
---|---|
[Kotlin Release Notes] Kotlin 1.0.4 is here (0) | 2023.09.02 |
[Kotlin Release Notes] Kotlin 1.0.3 Is Here! (0) | 2023.09.02 |
[Kotlin Release Notes] Kotlin 1.0.2 is Here (0) | 2023.09.02 |
[Kotlin Release Notes] Kotlin 1.0.1 is Here! (0) | 2023.09.02 |
댓글