Kotlinは、バージョン1.1に向けて開発が進められている。 Kotlin言語のリードデザイナ、Andrey Breslav氏は、JetBrain用JVM言語の新バージョンに関するロードマップを説明した。この中で、彼は主な新言語機能について述べている。

Kotlin 1.1はいくつもの新言語機能を提供する。

型エイリアス(type aliases) は、長い型宣言に対する略称指定の仕組みを提供する。 型エイリアスは、新しい型を宣言するものではない。 もともとの型宣言と相互に運用可能な型名を提供するものである。

束縛メソッド参照(bound method references) は、オブジェクトのメンバに対する参照の取得方法を拡張する。 これを使用すると、例えば String クラスの equals メソッドに対する参照を取得できる。取得した参照は、別の箇所で、述語として使用可能である。 val p: Predicate<String> = “foo”::equals なお、すでにKotlin1.0.xより、型に対しては、この機能がサポートされている。

委譲されたプロパティ(delegated properties) は、トップレベル(クラスや関数の中)で利用できる。 fun foo() { val lazyBar by lazy { ... } while (...) { if (...) { lazyBar.doBaz() ... } } } 委譲されたプロパティは、“確実に一度だけ”特定の種類のプロパティを実装するメカニズムである。 たとえば、遅延評価されるプロパティ、観測可能なプロパティ、マップなどに格納されるプロパティなどである。 本機能により、こういったプロパティを、毎回実装する必要がなくなる。

データクラス(data classes) は、継承をサポートする。 これにより、別のデータクラスからの派生が可能となる。 データクラスは、データのみを保持するクラスである。 Kotlinは、データクラスに対し、自動的にアクセサ、 equals 、 hadhCode その他共通メソッドを生成する。 データクラスをシールクラス(sealed class)の中で拡張することも可能になる。 sealed class C() { data class Example(...) : C() }

デストラクチャリング(destructuring) は、名前の組み合わせをラムダ式の引数として指定できるようにする。以下に一例を示す。 forEach の引数として値のペアを渡すと、2つのコンポーネント(k、vの2変数)に分解される。 myMap.forEach { (k, v) -> println(“$k => $v”) }

コルーチン(coroutines)は、Kotlinの非同期振る舞いの骨格を提供する。 Breslav氏によれば、コルーチンは、C# 5にて導入された async/await モデルよりも汎用的である。 Kotlinも async/await を提供する。 しかし、Kotlinの場合はコルーチンを元に構築されており、プリミティブではない。 fun loadImage(url: URL) = async { val bytes = await(loadBytes(url)) bytesToImage(bytes) }

Kotlin1.1は、Java8/9の機能(デフォルトメソッド生成など)を直接サポートする。 加えて、JavaScriptバックエンドが言語機能セットとして取り込まれる。

Kotlinの開発は、Kotlin Evolution and Enhancement Process (KEEP)が主導している。 GitHubリポジトリには全ての計画済みユースケースが記載されている。

Kotlin1.1は旧バージョンに対してソースコード、バイナリのどちらも互換性を維持する。 新バージョンのKotlinコンパイラは、旧バージョンのソースコードやバイナリによって停止することはない。