Kotlinの実装をつまみ読みした

  • 6
    いいね
  • 1
    コメント

リポジトリ

https://github.com/JetBrains/kotlin
jvmおなじみのディレクトリ階層で奥深くにソースコードが埋もれていてちょっとつらい。

Kotlinソースコード探訪が非常に役立った。

つまみ読み

実装に使ってる言語

jvmらしくJavaとKotlinがほとんど。

Kotlinの構成
Screen Shot 2016-12-17 at 11.41.10 PM.png

参考1:Scalaの構成
Screen Shot 2016-12-17 at 11.42.57 PM.png

参考2:Swiftの構成
Screen Shot 2016-12-17 at 11.41.59 PM.png

Scala96.6%はなんなんだ。

data class

DataClassMethodGenerator

generatorはKotlin持ち。

https://github.com/JetBrains/kotlin/blob/master/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/DataClassMethodGenerator.kt
abstract

testData

で、本体がどこにいるのかよくわからなかったが、compilerにテストがあるのでおそらくその辺。
https://github.com/JetBrains/kotlin/tree/master/compiler/testData/loadJava/compiledKotlin/dataClass

data class(やclassやconstructor)のテストの引数の個数は0と1と2でそれぞれチェックしてた。

function

https://github.com/JetBrains/kotlin/blob/master/core/builtins/src/kotlin/reflect/KFunction.kt

Represents a function with introspection capabilities.

という情報の管理はKotlinで実装している。

Array

ArrayとArraysが存在している。

https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Array.kt
こっちは getsetiterator のようなArrayにありがちなメソッドが書いてある。
(flattenとかunzipはこっち
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/src/kotlin/collections/Arrays.kt)

https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Arrays.kt
の方は、 ByteArray (→ byte[] )だったり CharArray (→ char[] )だったりと表現されるものたちのあつまり。

この微妙なArray(s)の違いはRange(s)でも発生してた。
https://github.com/JetBrains/kotlin/blob/master/core/builtins/src/kotlin/Range.kt
https://github.com/JetBrains/kotlin/blob/master/core/builtins/src/kotlin/Ranges.kt

collectionについては
https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib/src/kotlin/collections
を読むと楽しそう。

自動生成

上記
https://github.com/JetBrains/kotlin/blob/master/core/builtins/native/kotlin/Arrays.kt
のファイルは自動生成されたもので、
https://github.com/JetBrains/kotlin/blob/master/generators/src/org/jetbrains/kotlin/generators/builtins/arrays.kt
にそれらしきものが存在している。

Swiftではgybで配列回して生成してたが、こちらは BuiltInsSourceGenerator なるものにテンプレを書くしくみらしい。Arraysはそこに enum class PrimitiveType で列挙している型を突っ込んでまわすらしい。

感想

Scala(やゆかいなjvm言語)とくらべたら楽しそうだけど、言語に詳しく無いので難しい。

この投稿は Kotlin Advent Calendar 201617日目の記事です。