2020.11.26

코틀린 1.4.20 버전 출시··· “JVM용 동적 메소드 호출 지원”

Paul Krill | InfoWorld
새롭게 출시된 ‘코틀린 1.4.20 버전’에서는 이제 JDK 9 또는 그 이상의 타깃에 동적 호출로 문자열 연결을 컴파일 할 수 있다. 

23일(현지 시각) 젯브레인이 JVM, 안드로이드, 브라우저용 언어로 업그레이드된 ‘코틀린 1.4.20 버전’을 출시했다. 이번 릴리즈에서는 동적 메소드 호출을 통한 JVM 기반 문자열 연결을 비롯해 여러 개선사항과 실험적으로 도입한 기능 등이 공개됐다. 
 
ⓒJetbrains

회사에 따르면 JDK 9이 나온 이후로 JVM에서의 문자열 연결은 동적 메소드 호출(바이트코드의 invokedynamiccode 명령어)을 통해 수행돼 왔다. 이는 이전 구현보다 더 빠르게 작동하고, 메모리를 덜 소비하며, 바이트코드 변경 없이 향후 최적화를 위한 공간을 남겨둔다. 

코틀린에서도 성능 개선을 위해 이 메커니즘을 구현했다. 이제 JDK 9 이상의 타깃에서 문자열 연결을 동적호출로 컴파일할 수 있다. 단, 실험적으로 도입된 해당 기능은 Xstring-concat 옵션을 추가해 다음과 같은 사용 사례에서 호출할 수 있다.

• 연산자(a + bcode), 명시적(a.plus(b)), 참조((a::plus)(b)) 형식의 String.plus
• 인라인 및 데이터 클래스의 toString
• 상수가 아닌 단일 인수가 있는 경우를 제외한 문자열 템플릿 

또한 invokedynamic 문자열 연결을 사용하려면 아래의 규칙 가운데 하나를 호출해야 한다. 

StringConcatFactory.makeConcatWithConstants()를 사용하여 문자열에 invokedynamic 연결을 수행하는 indy-with-constants
StringConcatFactory.makeConcat()을 사용하여 문자열에 invokedynamic 연결을 수행하는 indy
StringBuilder.append()을 통해 클래식 연결로 다시 전환하는 inline

코틀린 1.4.20 버전의 명령줄 컴파일러는 기트허브에서 다운로드할 수 있다. 인텔리제이 아이디어(IntelliJ IDEA‎)와 안드로이드 스튜디오 IDE(Android Studio IDE) 사용자는 이곳에서 코틀린 플러그인 업데이트 방법을 확인할 수 있다. 

이 밖에 코틀린 1.4.20 버전의 다른 기능은 다음과 같다.
 
• 이번 릴리스에서 코틀린/JS(Kotlin/JS)는 프로젝트 마법사용 새 템플릿, 효과적인 프로젝트 구성 제어를 위한 향상된 DSL 등을 제공한다. 또한 코드 오류를 무시하고 프로젝트를 컴파일하는 새로운 방법이 IR 컴파일러에 추가됐다. 

• 코틀린/JS 그래들 DSL(Kotlin/JS Gradle DSL)에서 단순화된 프로젝트 설정 및 사용자 정의를 지원한다. 웹팩(Webpack) 구성을 위한 단일 지점도 제공된다. 

• 조정할 수 있는 코틀린/JS 애플리케이션용 템플릿이 코틀린용 프로젝트 마법사에 추가됐다. 템플릿은 브라우저, 노드.js(Node.js), 리액트(React) 애플리케이션용으로 제공된다. 

• 그래들(Gradle) 빌드 스크립트에서 package.json 파일에 항목을 추가할 수 있다. 

• 선택적 얀(yarn) 종속 요소 해결 기능이 실험적으로 도입됐다. 그래들 빌드 스크립트에서 이 기능을 구성해볼 수 있다. 

• JDK 15 타깃이 추가됐다. 

• 코틀린/네이티브(Kotlin/Native)와 코틀린/JVM(Kotlin/JVM) 간의 동작 불일치가 프로퍼티 초기화와 같은 일부 코너 케이스에서 수정됐다. 코틀린/네이티브의 경우 오브젝티브-C(Objective-C) 예외는 코틀린 예외로 래핑할 수 있다. 

• 표준 라이브러리에 실험적으로 도입된 java.nio.file.Path용 확장 기능이 포함돼 있다. 또한 String.Replace 함수 성능이 향상됐다. ciokr@idg.co.kr
 



2020.11.26

코틀린 1.4.20 버전 출시··· “JVM용 동적 메소드 호출 지원”

Paul Krill | InfoWorld
새롭게 출시된 ‘코틀린 1.4.20 버전’에서는 이제 JDK 9 또는 그 이상의 타깃에 동적 호출로 문자열 연결을 컴파일 할 수 있다. 

23일(현지 시각) 젯브레인이 JVM, 안드로이드, 브라우저용 언어로 업그레이드된 ‘코틀린 1.4.20 버전’을 출시했다. 이번 릴리즈에서는 동적 메소드 호출을 통한 JVM 기반 문자열 연결을 비롯해 여러 개선사항과 실험적으로 도입한 기능 등이 공개됐다. 
 
ⓒJetbrains

회사에 따르면 JDK 9이 나온 이후로 JVM에서의 문자열 연결은 동적 메소드 호출(바이트코드의 invokedynamiccode 명령어)을 통해 수행돼 왔다. 이는 이전 구현보다 더 빠르게 작동하고, 메모리를 덜 소비하며, 바이트코드 변경 없이 향후 최적화를 위한 공간을 남겨둔다. 

코틀린에서도 성능 개선을 위해 이 메커니즘을 구현했다. 이제 JDK 9 이상의 타깃에서 문자열 연결을 동적호출로 컴파일할 수 있다. 단, 실험적으로 도입된 해당 기능은 Xstring-concat 옵션을 추가해 다음과 같은 사용 사례에서 호출할 수 있다.

• 연산자(a + bcode), 명시적(a.plus(b)), 참조((a::plus)(b)) 형식의 String.plus
• 인라인 및 데이터 클래스의 toString
• 상수가 아닌 단일 인수가 있는 경우를 제외한 문자열 템플릿 

또한 invokedynamic 문자열 연결을 사용하려면 아래의 규칙 가운데 하나를 호출해야 한다. 

StringConcatFactory.makeConcatWithConstants()를 사용하여 문자열에 invokedynamic 연결을 수행하는 indy-with-constants
StringConcatFactory.makeConcat()을 사용하여 문자열에 invokedynamic 연결을 수행하는 indy
StringBuilder.append()을 통해 클래식 연결로 다시 전환하는 inline

코틀린 1.4.20 버전의 명령줄 컴파일러는 기트허브에서 다운로드할 수 있다. 인텔리제이 아이디어(IntelliJ IDEA‎)와 안드로이드 스튜디오 IDE(Android Studio IDE) 사용자는 이곳에서 코틀린 플러그인 업데이트 방법을 확인할 수 있다. 

이 밖에 코틀린 1.4.20 버전의 다른 기능은 다음과 같다.
 
• 이번 릴리스에서 코틀린/JS(Kotlin/JS)는 프로젝트 마법사용 새 템플릿, 효과적인 프로젝트 구성 제어를 위한 향상된 DSL 등을 제공한다. 또한 코드 오류를 무시하고 프로젝트를 컴파일하는 새로운 방법이 IR 컴파일러에 추가됐다. 

• 코틀린/JS 그래들 DSL(Kotlin/JS Gradle DSL)에서 단순화된 프로젝트 설정 및 사용자 정의를 지원한다. 웹팩(Webpack) 구성을 위한 단일 지점도 제공된다. 

• 조정할 수 있는 코틀린/JS 애플리케이션용 템플릿이 코틀린용 프로젝트 마법사에 추가됐다. 템플릿은 브라우저, 노드.js(Node.js), 리액트(React) 애플리케이션용으로 제공된다. 

• 그래들(Gradle) 빌드 스크립트에서 package.json 파일에 항목을 추가할 수 있다. 

• 선택적 얀(yarn) 종속 요소 해결 기능이 실험적으로 도입됐다. 그래들 빌드 스크립트에서 이 기능을 구성해볼 수 있다. 

• JDK 15 타깃이 추가됐다. 

• 코틀린/네이티브(Kotlin/Native)와 코틀린/JVM(Kotlin/JVM) 간의 동작 불일치가 프로퍼티 초기화와 같은 일부 코너 케이스에서 수정됐다. 코틀린/네이티브의 경우 오브젝티브-C(Objective-C) 예외는 코틀린 예외로 래핑할 수 있다. 

• 표준 라이브러리에 실험적으로 도입된 java.nio.file.Path용 확장 기능이 포함돼 있다. 또한 String.Replace 함수 성능이 향상됐다. ciokr@idg.co.kr
 

X