Kotlin 1.1 リリース – JavaScriptサポート、コルーチン(coroutine)等々

本日Kotlin 1.1をリリースいたしました。これはKotlinの大きな前進になります。

Kotlin 1.1

Kotlin 1.1の新機能

Kotlin 1.1には数多くの言語機能の改善が含まれています。JavaScriptサポートとコルーチンは中でも大きなハイライトになります。他はタイプエイリアスbound callable referenceslambdaのdestructuringにも注目してください。新しい機能の一覧はWhat’s new ページよりご確認いただけます。(実行可能なサンプルコードを是非お試しください!)。

JavaScriptサポート

Kotlinは真のフルスタック言語となることを目指しています 。Kotlin 1.1をもって言語の全機能はJVM / Android並びにJavaScriptで動作するようになりました。(JavaScriptでReflectionはご利用いただけませんが、動作するよう計画はしています。)つまり、Webアプリケーションは全てKotlinで書くことができるようになったということです。JetBrains内ではすでに知見を蓄積しつつあります。Kotlinでフルスタックを書くことについて、チュートリアルなどの資料を今後公開していく予定です。

Kotlin for JavaScriptはダイナミックタイプによって「ネイティブのJavaScript」と相互運用が可能です。またDefinitelyTyped のタイプヘッダを使って著名なライブラリを型安全に利用できます。

詳しくはドキュメント(英語)をご覧ください。

コルーチン(Coroutines)

Kotilnのコルーチンを使うとノンブロッキングで非同期なコードを、プレーンで同期的なコードと同じくらいストレートに表現することが出来ます。

非同期プログラミングは大きな注目を集めていますが、ただひとつノンブロッキングコードへの移行を難しくしているのはそれがシステムに無視できない複雑さをもたらしてしまうことです。Kotlinはバージョン1.1でコルーチンを第一級市民として取り扱い、関数のサスペンドを可能にすることでこの複雑さを抑制します。コンピュテーションの表現である関数(またはラムダ)はスレッドをブロックすることなくサスペンドさせることができ、またあとで再開させられます。

技術的にはコルーチンはライトウェイトな協調マルチタスキング(ファイバーと非常に良く似ており、起動と維持、サスペンドコストがほぼかかりません)で、簡単に組み立て、カスタマイズが可能です。

JetBrainsはフレキシビリティを最大化するようコルーチンを設計しており、言語としてはわずかな仕様だけで、大部分はライブラリとして実現されています。kotlinx.coroutinesプロジェクトはRx、CompletableFuture、NIO、JavaFx、Swingを基盤としたライブラリを提供しています。似たようなライブラリはAndroidやJavaScript向けにも書けます。C#のasync/await、Pythonのgenerators/yield、Goのchannels/selectといった機能もKotlinのライブラリとして表現できます。:

// runs the code in the background thread pool
fun asyncOverlay() = async(CommonPool) {
    // start two async operations
    val original = asyncLoadImage("original")
    val overlay = asyncLoadImage("overlay")
    // and then apply overlay to both results
    applyOverlay(original.await(), overlay.await())
}
 
// launches new coroutine in UI context
launch(UI) {
    // wait for async overlay to complete
    val image = asyncOverlay().await()
    // and then show it in UI
    showImage(image)
}

詳しくはドキュメント(英語)をご覧ください。

重要なお知らせ: Kotlinのコルーチンは様々なメリットをもたらしますが、とても新しいデザインですのでとりわけ100%正しくて完成していると確信をもたらすに十分なテストが必要です。よってこの機能は実験的な機能としてオプトインフラグ(-Xcoroutines=enable)で有効化される形になっています。大幅な言語仕様の変更はない見込みですが、Kotlin 1.2で幾分APIの調整が入る可能性はあります。

ツールセット

Kotlin 1.1はKotlinのツールセットにおいてメジャーリリースではありません。ツール機能が言語のリリース自体に影響を与えるべきではないと考えております。Kolin 1.0.xからは主に:

  • メジャーIDE向けのKotlinプラグイン: IntelliJ IDEA、Android Studio、Eclipse、そしてNetBeans
  • IntelliJ IDEAとGradleでインクリメンタルコンパイル
  • Spring、JPA、Mockitoのコンパイラプラグイン(クラスをopenにして、引数無しコンストラクタを生成)
  • kaptのアノテーションプロセッシング
  • AndroidプロジェクトのLintサポート
  • 数多くのIDEインテンション、インスペクション、クイックフィクス、リファクタリング、コード補完改善

もちろん今後バージョン1.1.xに向けてツールは引き続き改善して参ります。

Kotlinの最初の1年: 採用実績とコミュニティ

端的に申し上げて、Kotlinは成長しています。過去1年で、16万人を超える方々がKotlinを利用しているのを確認してきました。Githubのオープンソースプロジェクトは合計240万行からおよそ4倍にあたる1000万行へと拡大しました。Slackコミュニティは1400名から4倍以上にあたる5700名へ増えました。コミュニティ手動のミートアップやユーザーグループは世界中で開催されています。またKotlinの書籍やオンラインコースもたくさん出版、公開されています。

Kotlin GitHub Stats

Kotlinはサーバサイドと同じくAndroidデベロッパにも人気で、概ねデベロッパ比率は1:1ほどになります。Spring Framework 5.0は Kotlineサポート実装し、vert.x 3.4Gradle 、TeamCityもKotlinをビルドスクリプトとして利用しています。Kotlinを使った他のプロジェクトはkotlin.linkでご確認いただけます。

Amazon Web ServicesPinterestCourseraNetflixUberSquareTrelloBasecampをはじめとする数多くの有名企業もKotlinを使っていることで知られています。Goldman Sachs、Wells Fargo、J.P. Morgan、Deutsche Bank、UBS, HSBC、BNP Paribas、Société Généraleといった有名金融企業が開発している分散台帳であるCordaはコードベースの90%超がKotlinで書かれています。

JetBrainsはKotlinを利用し、Kotlinにコントリビュートし、Kotlinを広めてくださる皆様を歓迎いたします。皆様の支援があってのKotlinです!

次のステップ

Kotlinを真のフルスタック言語とするため、同じコードをマルチプラットフォームにコンパイルできるようツールを整備していきます。これによりクアイアントとサーバ両方で試算を共有できるようになります。JetBrainsはJavaScriptツールとライブラリサポートを引き続き改善して参ります。JavaScript向けのインクリメンタルコンパイルはすでに実装済です。今後1.1.xのアップデートもお楽しみに!

Java 9のリリースが近いですが、Java 9の新機能のサポートもリリース前に提供予定です。

また、当面コルーチンについてのフィードバックをたくさんいただけるものと期待しています。この領域においてパフォーマンス面と機能面の改善がトッププライオリティに位置づけられています。

そして、次のリリースは主にメンテナンス、パフォーマンス改善、バグフィクスに焦点が当てられます。

追記: マルチプラットフォーム化はKotlinの戦略的な方針です。バージョン1.1よりサーバ、デスクトップ、Android端末、ブラウザで動作するようになりました。将来的にはKotlinをネイティブコードにコンパイルしてさらに多くのプラットフォーム(たとえばiOSや組み込みデバイスも含みます)で動くようにしたいと考えています。。JetBrainsの優秀なエンジニア達はこの作業にあたっており、近々面白いものをご覧に入れられる予定です。なおネイティブ化について現在のところ具体的なリリース予定は決まっていません。

インストール方法

いつも通り、try.kotlinlang.orgを使ってオンラインでKotlinを試すことが出来ます。

新しいAPIリファレンスはこちらで、動作を確認しながらご覧いただけます。

互換性: Kotlin 1.1で言語と標準ライブラリは後方互換です。1.0でコンパイルできて、動作していたものは1.1でも引き続き動作します。大きなプロジェクトで慎重にアップデートしたい場合は新機能を無効化するコンパイラスイッチがありますのでご確認ください。 こちらによくある落とし穴について説明しています。

Maven/Gradle: 標準ライブラリのバージョン番号として 1.1.0 を使ってください

IntelliJ IDEA: 2017.1 はKotlin 1.1をバンドルしています。以前のバージョンで使いたい場合はKotlinプラグインをバージョン1.1にアップデートしてください。

Android Studio: Plugin Managerからプラグインをインストール、アップデートしてください。

Eclipse: Marketplaceよりプラグインをインストールしてください。

コマンドラインコンパイラGithub リリースページよりダウンロードできます

[原文]

image description