Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

リポジトリ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away