LoginSignup
4
4

More than 5 years have passed since last update.

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

Posted at

リポジトリ

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

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言語)とくらべたら楽しそうだけど、言語に詳しく無いので難しい。

4
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4