Kotlin과 함께하는 Google Summer of Code 2023
이 문서는 Google Summer of Code with Kotlin 2023을 위한 프로젝트 아이디어 목록을 포함하고 있습니다.
Google Summer of Code 2023은 이미 종료되었습니다. GSoC 2024에 참여하고 싶다면 이 프로젝트 아이디어 목록을 확인해 보세요.
프로젝트 아이디어
Kotlin 멀티플랫폼(Kotlin Multiplatform) 프로토부프(protobuf) [어려움, 350시간]
설명
Kotlin/Native (iOS) 런타임 및 Objective-C 상호 운용성(interop)과 함께 Kotlin/Common 프로토(proto)에 대한 지원을 protoc에 추가합니다.
동기
프로토부프(protobuf)에는 많은 플랫폼 구현이 있지만, Kotlin 멀티플랫폼 프로젝트에서 이를 사용할 수 있는 방법이 현재로서는 없습니다.
예상 결과
Kotlin 멀티플랫폼 프로토부프 지원을 설계 및 구축하며, 결과적으로 다음 항목에 기여하는 것을 목표로 합니다:
- GitHub – protocolbuffers/protobuf: Protocol Buffers – Google's data interchange format
- GitHub – google/protobuf-gradle-plugin
- Kotlin Multiplatform Gradle Plugin
필요 기술 (우대)
- Kotlin
- Objective-C
- C++
Kotlin 컴파일러 오류 메시지 [어려움, 350시간]
설명
K2 Kotlin 컴파일러에 (Rust와 같이) 더 실행 가능하고 상세한 정보를 제공하는 개선된 컴파일러 오류 메시지를 추가합니다.
동기
Rust 컴파일러 오류 메시지는 종종 모든 컴파일러 중에서 단연 가장 도움이 되는 것으로 간주됩니다. Kotlin K2 컴파일러는 Kotlin에서 더 나은 컴파일러 오류를 위한 훌륭한 토대를 제공하지만, 이러한 잠재력은 아직 제대로 활용되지 않고 있습니다.
예상 결과
StackOverflow 및 기타 데이터 소스를 사용하여 사용자에게 큰 가치를 줄 수 있는 일반적인 컴파일러 오류를 찾아냅니다. 이러한 오류 메시지를 개선하기 위해 컴파일러에 직접 기여합니다.
필요 기술 (우대)
- Kotlin
- 컴파일러 아키텍처(Compiler architecture)
Kotlin 멀티플랫폼 라이브러리 [쉬움 또는 보통, 175시간 또는 350시간]
설명
공통적으로 필요한 Kotlin 멀티플랫폼 라이브러리를 제작하여 배포(Maven Central)합니다. 예를 들어, 압축(compression), 암호화(crypto) 등이 있습니다.
동기
Kotlin 멀티플랫폼은 아직 비교적 초기 단계이며, 플랫폼 독립적(Kotlin/Common)이거나 플랫폼별 구현(expect/actual)을 가진 추가적인 라이브러리가 필요합니다.
예상 결과
다른 타겟(Kotlin/JS)보다 JVM/Android 및 Kotlin/Native (iOS)에 더 높은 우선순위를 둔 최소 하나 이상의 Kotlin 멀티플랫폼 라이브러리를 설계하고 배포합니다.
필요 기술 (우대)
- Kotlin
- Objective-C
Groovy에서 Kotlin Gradle DSL로의 변환기 [보통, 350시간]
설명
이 프로젝트는 Gradle 스크립트에 중점을 둔 Groovy-to-Kotlin 변환기 제작을 목표로 합니다. 사용자가 Groovy 스타일의 의존성 선언을 Kotlin 스크립트에 붙여넣으면 IDE가 자동으로 변환해 주는 것과 같은 기본적인 사용 사례부터 시작할 것입니다. 이후에는 더 복잡한 코드 구조와 전체 파일의 변환을 지원하기 시작할 것입니다.
동기
Kotlin Gradle DSL은 인기가 높아지고 있으며, 곧 Gradle 프로젝트 구축을 위한 기본 선택지가 될 것입니다. 하지만 Gradle에 관한 많은 문서와 리소스가 여전히 Groovy를 참조하고 있으며, Groovy 샘플을 build.gradle.kts에 붙여넣으려면 수동 편집이 필요합니다. 또한, Gradle의 많은 새로운 기능이 Kotlin에 먼저 적용될 것이며, 결과적으로 사용자는 Groovy DSL에서 Kotlin DSL로 마이그레이션하게 될 것입니다. 따라서 빌드 설정의 자동 코드 변환은 이러한 마이그레이션을 크게 완화하여 많은 시간을 절약해 줄 것입니다.
예상 결과
Gradle DSL에 중점을 두어 Groovy 코드를 Kotlin으로 변환할 수 있는 IntelliJ IDEA용 플러그인을 제작합니다.
필요 기술 (우대)
- Gradle에 대한 기본 지식
- 파서(parser) 및 일반적인 컴파일러 작동 방식에 대한 기본 지식
- Kotlin에 대한 기본 지식
Eclipse Gradle KTS 편집 [보통, 350시간]
설명
Eclipse에서 Gradle Kotlin Script (KTS)를 편집하는 환경을 개선합니다.
동기
IntelliJ IDEA와 Android Studio는 KTS Gradle 빌드 스크립트 편집을 훌륭하게 지원하지만, Eclipse의 지원은 부족한 편입니다. 정의로 이동(Ctrl-Click), 코드 완성(Code completion), 코드 오류 하이라이팅 등이 모두 개선될 수 있습니다.
예상 결과
KTS 편집을 위한 개발자 경험을 개선하는 Gradle Eclipse 플러그인에 기여합니다.
필요 기술 (우대)
- Kotlin
- Gradle
- Eclipse 플랫폼 및 플러그인
IntelliJ IDEA용 Kotlin 플러그인에서 매개변수 전달(parameter forwarding) 지원 개선 [보통, 350시간]
설명 및 동기
Kotlin 플러그인은 IntelliJ IDEA 및 Android Studio에서 Kotlin 언어 지원을 제공합니다. 이 프로젝트의 범위 내에서, 플러그인의 매개변수 전달(parameter forwarding) 지원을 개선하게 됩니다.
상속(inheritance)보다 구성(composition)을 선호하는 것은 널리 알려진 원칙입니다. IntelliJ IDEA는 상속을 사용하는 코드 작성(IDE가 제안하는 완성 및 퀵 픽스)에 대해서는 훌륭한 지원을 제공하지만, 상속 대신 구성을 사용하는 코드에 대한 지원은 아직 구현되지 않았습니다.
구성을 많이 사용하는 코드로 작업할 때의 주요 문제는 매개변수 전달입니다. 특히 다음과 같은 문제들이 있습니다:
- IDE가 현재 기본 매개변수 값을 사용하는 다른 함수에 인자(argument)로 전달될 수 있는 매개변수 선언의 완성을 제안하지 않습니다.
- IDE가 전달된 매개변수 체인의 이름을 한꺼번에 변경하지 않습니다.
- IDE가 전달될 수 있는 매개변수로 필요한 모든 인자를 채워주는 퀵 픽스를 제공하지 않습니다.
이러한 지원이 절실히 필요한 대표적인 예로 Jetpack Compose가 있습니다. UI 구축을 위한 Android의 현대적인 툴킷인 Jetpack Compose는 함수 구성과 매개변수 전달을 많이 사용합니다. @Composable 함수는 매개변수가 매우 많기 때문에 작업이 금방 지루해집니다. 예를 들어, androidx.compose.material.TextField는 19개의 매개변수를 가지고 있습니다.
예상 결과
- IntelliJ IDEA에서 개선된 매개변수 및 인자 완성 제안.
- 필요한 모든 인자를 동일한 이름과 타입을 가진 매개변수로 채우도록 제안하는 IDE 퀵 픽스 구현.
- 이름 변경(Rename) 리팩터링 시 전달된 매개변수 체인을 함께 변경.
- 매개변수 전달 및 매개변수가 많은 함수와 관련된 기타 모든 IDE 개선 사항.
필요 기술 (우대)
- Kotlin 및 Java에 대한 지식
- 대규모 코드베이스에서 탐색할 수 있는 능력
kotlinx-benchmark 라이브러리 API 및 사용자 경험 강화 [쉬움, 175시간]
설명
kotlinx-benchmark는 Kotlin으로 작성된 멀티플랫폼 코드의 벤치마킹을 위한 오픈 소스 라이브러리입니다. 기본적인 골격은 갖추어져 있지만, 세밀한 벤치마크 구성(시간 단위, 모드 등), JVM과 Kotlin/Native 벤치마킹 간의 기능 동등성(feature parity), 명령줄(command-line) API, 현대적인 Gradle 지원과 같은 편의 기능이 부족합니다. 문서, 통합 테스트 및 예제 또한 미흡한 상태입니다.
동기
라이브러리는 이미 구현되어 있지만, 올바르게 사용하기 어려울 때가 있고 일부 사용자들을 혼란스럽게 합니다. 라이브러리의 사용자 경험을 개선하는 것은 Kotlin 커뮤니티에 큰 도움이 될 것입니다.
예상 결과
- 라이브러리에 사용 예제가 포함된 명확한 문서가 갖춰집니다.
- 라이브러리 API가 단순하고 사용하기 쉬워집니다.
- Kotlin/JVM 코드 벤치마킹을 위한 옵션들을 다른 플랫폼의 코드 벤치마킹에서도 사용할 수 있게 됩니다.
필요 기술 (우대)
- Kotlin
- Gradle 내부 구조(internals)
디버거 내 Kotlin 코루틴용 병렬 스택(Parallel stacks) [어려움, 350시간]
설명
코루틴 디버깅 경험을 개선하기 위해 Kotlin 코루틴용 병렬 스택(Parallel Stacks) 뷰를 구현합니다.
동기
현재 IntelliJ IDEA에서 코루틴 디버깅 지원은 매우 제한적입니다. Kotlin 디버거에는 사용자가 모든 코루틴과 해당 상태를 볼 수 있는 코루틴 패널(Coroutines Panel)이 있지만, 코루틴이 많은 애플리케이션을 디버깅할 때는 그리 도움이 되지 않습니다. JetBrains Rider에는 사용자가 스레드와 해당 스택 트레이스를 그래프 뷰로 검사할 수 있는 병렬 스택 기능이 있으며, 이는 코루틴을 검사하는 데 매우 좋은 방법이 될 수 있습니다.
예상 결과
Kotlin 코루틴 디버거 API를 사용하여, 디버거에 코루틴용 병렬 스택 뷰를 추가하는 IntelliJ IDEA 플러그인을 개발합니다. 코루틴의 그래프 표현을 개선할 수 있는 방법을 찾습니다.
필요 기술 (우대)
- Kotlin
- Kotlin 코루틴
- IntelliJ IDEA 플러그인 개발
