谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

KotlinのFAQだけ翻訳してみた。

JetBrainsのJVM言語「Kotlin」のドキュメントのFAQだけ翻訳してみました。
http://confluence.jetbrains.net/display/Kotlin/FAQ


多少意訳してたり、勝手に段落分けをしている所もあり原文ままとは言えませんが、
訳が漏れている箇所や誤訳などについて、ぜひコメントをお寄せください。

Kotlinとは何か?

「プロジェクトKotlin」は、JetBrainsが開発した、JVM上で動作する静的型付け言語のコードネームです。
業務用途に利用することを想定して開発しました。

なぜ新しい言語が必要なのか?

JetBrainsではJavaプラットフォームでの開発を長らく続けており、その良さを理解してきました。
その一方で、Java言語にはいくつかの制限や問題がありながらも
互換性の問題で、修正が不可能あるいは困難であることも、分かってきました。


Javaが今後も継続するのは確かでしょうが、
レガシーな問題のない、開発者から熱望されているような機能を搭載した
新しい静的型付けJVM言語は、コミュニティにとって有益なものになると考えています。


本プロジェクトの主なデザインゴールは、以下の通りです。
Java互換の言語を作ること
Javaより安全にすること。たとえば静的なnullチェック機能など
Javaより簡潔であること。型推論、高階層関数(クロージャ)、拡張関数、mixinとfirst-class delegationのサポートなど
・それでいて、実用的な表現。最も成熟した競合であるScalaと比較して、よりシンプルであること。

他の新しい言語ではいけない理由は?

端的に言えば、以下の通りです。
Scalaは複雑すぎて、サポートツールの開発が困難
・Groovyは動的です。そのため、エラーを生みやすく、コードベースが大きくなりやすい。さらに、遅い。
・Gosuは静的型付けですが、全てのgenericsをcovariantとして扱ってしまい、
 Javaが配列の扱いで犯した過ちを繰り返してしまっています。
 さらに言えば、Gosuは本質的にはスクリプト言語です。
・CeylonはJavaと非互換です。なぜならオーバーロードをサポートしていないからです。

いつリリースされるのか?

2011年末にパブリックベータ版の公開を予定しています。

これはオープンソースプロジェクトか? ライセンスは何か?

パブリックベータ版を公開してすぐに、コンパイラIntelliJ IDEAプラグイン
Apache2ライセンスにてオープンソース公開します。

Java互換なのか?

はい。コンパイラーはJavaバイトコードを出力します。
KotlinからJavaを呼び出す事も、JavaからKotlinを呼び出すこともできます。
Javaとの相互運用性」を参照してください(訳注:順次翻訳します)

Java以外のプラットフォームへの展開は?

現在はJavaプラットフォームのみをターゲットにしていますが、
他のプラットフォームも視野に入れています。
JavaScriptは最も魅力的な次のターゲットです。

これは関数型言語ですか? オブジェクト指向言語ですか?

これはオブジェクト指向言語です。
高階層関数と関数リテラルをサポートしますが、関数型言語だというわけではありません。
オブジェクト指向の開発者をターゲットとしています。

Genericsについては?

KotlinはGenericsをサポートしています。
reifiedで、declaration-site varianceとusage-site varianceをサポートしていますが、
ワイルドカードタイプはサポートしていません。(訳注:誰かここの翻訳を助けて!!)

型インタフェースはあるのか? 良いものなのか?

KotlinはGenerics関数の呼び出し時に、イニシャライザの型を利用して
引数や変数の型推論を行います。このおかげでコードが簡略化されます。

セミコロンや中括弧などは使うのか?

セミコロンは任意で使い、中括弧は使います。
変数や関数の型はコロンの右側に書きます(Scala風であり、C言語風ではありません)

なぜ型を右側に書くのか?

その方がコードが読みやすくなると考えているためです。
さらに、いくつかのシンタックスが使えるようになり、
たとえば、型アノテーションを簡単に除外できます。
Scalaを見れば、この表記が問題にならないことはよく分かるでしょう。

この言語は拡張可能か?

いくつかの方法で拡張できるように考えています。
アノテーションへのインライン関数や、型ローダーや、language-quotationsなど。

自作のDSLをこの言語に埋め込むことはできるのか?

はい、Kotlinはそのための機能をいくつか提供しています。
演算子オーバーロード、インライン関数によるcustom control structures、
Infix関数呼び出し、拡張関数、アノテーション、language-quotationsなど。

IDEのサポートはあるのか?

はい。コンパイラーはIntelliJ IDEAのプラグインとして開発されており、
ユーザが利用するIDEも最初から用意します(デバッグやテスト中にも利用しやすいものです)

以下、ユーザからの質問より抜粋

Kotlinでコンパイルしたコードは、依存性があるのか?

はい、全てのKotlinプログラムで、小さなランタイムが必要になります。
いくつかの機能(特にreified genericsなど)で利用するためです。

Eclipseプラグインはあるのか?

考えています。

終わりに。

英文をそのまま掲載している所は、
私の理解が追いつかなかったり、対応する日本語訳を知らないところです。
ぜひ、教えてください! m(_ _)m