SlideShare a Scribd company logo
Kotlinソースコード探訪
Kotlin Internal 勉強会
2016-11-26 @yy_yank
          こいつです
          ・JavaとKotlinが好き
          ・viキーバインド好き
          サクラエディタアイコン
ヤンク(@yy_yank)
自己紹介
ということで、恐縮ですが、
発表させてもらいます。
ゆるふわです
その前に、
ちょっとだけ宣伝。。。
Javaのカンファレンス
に登壇します
来週の土曜日です
JVM言語とJava、
切っても切れないその関係
・ひたすらKotlinのリポジトリの各モジュールのソース
を僕が追いかけた結果報告
・たまにソースコードとか出します
・ざっと見た解釈なので間違っていればつっこんでくだ
さい
発表の流れ
internalということなので、
Kotlinのリポジトリを覗いてみる
https://github.com/JetBrains/kotlin
Kotlinリポジトリ
git clone https://github.com/JetBrains/kotlin.git
tree kotlin
Kotlinリポジトリ
・・・・
8104 directories, 49441 files
割とごった煮感がある
Kotlinリポジトリ
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
annotations
・IntelliJ IDEAのExternal Annotation(@NotNull
@Nullable)がほとんど
・annotation.xml
https://www.jetbrains.com/help/idea/2016.2/e
xternal-annotations.html
annotationsモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
build-common
・KotlinとJavaのMix
・Kotlinのビルド用の実装
・srcとoutputファイル情報とか持っている
・クラスやパッケージ情報のキャッシュ処理とか
・build時のファイル生成とか諸々の動きを
やっているイメージ
build-commonモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
compiler
・コンパイルをする(当然)
・ざっくりと見るとコンパイラのフロントエンドとバックエンドとい
う概念を持ってパッケージが構成されている
フロントエンド = ソースコード解析
バックエンド = クラスバイナリ生成
compilerモジュール
compiler
・compiler/backend下にcodegenというコード生成用
のパッケージがある
キーワードや機能ごとにパッケージが切ってある
例)coroutines,extentions,inlineなど
compilerモジュール
こんな感じ
compiler
・大体予想はつくと思いますがcompileはvisitorパターンが
使われています
・KtVisitor<R, D> extends PsiElementVisitor
このクラスが構文木を順に追いかけて評価するようなかたち
(おそらく)
・KtExpression、KtElementなどがそれぞれのイディオムや
要素を表現。KtTokensに予約語など
compilerモジュール
compiler
・SinceKotlinアノテーションで導入タイミングが分かる
例えばCoroutines.ktは@SinceKotlin(“1.1”)
これがリリースバージョンより上だと使えないように制御され
ている
compilerモジュール
compiler
・その他REPL関連のものもこのパッケージ内に入っています
・resolutionというパッケージでsmartcastやスコープの解釈
を行っているようです
compilerモジュール
君はもうkotlincを読んだ
か?
ちょっとコード
kotlinc.bat
rem based on scalac.bat from the Scala distribution
・・・(中略)・・・
if not "%_KOTLIN_RUNNER%"=="" (
"%_JAVACMD%" %_JAVA_OPTS%
"-Dkotlin.home=%_KOTLIN_HOME%" -cp
"%_KOTLIN_HOME%libkotlin-runner.jar" ^
org.jetbrains.kotlin.runner.Main %*
)
else (
"%_JAVACMD%" %_JAVA_OPTS% -noverify -cp
"%_KOTLIN_HOME%libkotlin-preloader.jar" ^
org.jetbrains.kotlin.preloading.Preloader -cp
"%_KOTLIN_HOME%libkotlin-compiler.jar" ^
%_KOTLIN_COMPILER% %*
)
ちょっとコード
kotlinc.bat
object Main {
private val KOTLIN_HOME: File
init {
val home = System.getProperty("kotlin.home")
if (home == null) {
System.err.println("error: no kotlin.home system property
was passed")
System.exit(1)
}
KOTLIN_HOME = File(home)
ちょっとコード
org.jetbrains.kotlin.runner.Main.kt(一部抜粋)
private fun run(args: Array<String>) {
val classpath = Classpath()
var runner: Runner? = null
var collectingArguments = false
val arguments = arrayListOf<String>()
var noReflect = false
classpath.add(".")
var i = 0
ちょっとコード
org.jetbrains.kotlin.runner.Main.kt(一部抜粋)
if ("-help" == arg || "-h" == arg) {
printUsageAndExit()
} else if ("-version" == arg) {
printVersionAndExit()
}else if ("-classpath" == arg || "-cp" == arg) {
classpath.add(next())
}else if ("-expression" == arg || "-e" == arg) {
runner = ExpressionRunner(next())
ちょっとコード
org.jetbrains.kotlin.runner.Main.kt(一部抜粋)
結論
kotlin/compiler/cli/cli-runnerか
ら追いかければなんとかなる
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
core
・大事なものが入っています
・基本的な型を表すもの
(Any、Nonthing、Char、Enum、Number、Stringなどなど)
・リフレクション関連
・ディスクリプタ
coreモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
eval4j
・evalします
・Javaのバイトコードのインタプリタ。デバッガで使うためのも
のらしい
(eval4j is a Java byte code interpreter written in Java. Its primary use
case is implementing expression evaluation in debuggers.)
https://github.com/abreslav/eval4j
・基本的にJavaのスタックマシンの命令セットの
ハンドリングと実行をしているように見えます
eval4jモジュール
fun boxType(value: Value): Value {
val method = when (value.asmType) {
Type.INT_TYPE -> MethodDescription("java/lang/Integer", "valueOf", "(I)Ljava/lang/Integer;", false)
Type.BYTE_TYPE -> MethodDescription("java/lang/Byte", "valueOf", "(B)Ljava/lang/Byte;", false)
Type.SHORT_TYPE -> MethodDescription("java/lang/Short", "valueOf", "(S)Ljava/lang/Short;", false)
Type.LONG_TYPE -> MethodDescription("java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false)
Type.BOOLEAN_TYPE -> MethodDescription("java/lang/Boolean", "valueOf", "(Z)Ljava/lang/Boolean;",
false)
// ・・・・・(中略)・・・・・
false)
else -> throw UnsupportedOperationException("Couldn't box non primitive type
${value.asmType.internalName}")
}
return invokeStaticMethod(method, listOf(value))
}
ちょっとコード
ちょっとコード
override fun newOperation(insn: AbstractInsnNode): Value? {
return when (insn.opcode) {
ACONST_NULL -> {return NULL_VALUE}
ICONST_M1 -> int(-1)
ICONST_0 -> int(0)
ICONST_1 -> int(1)
ICONST_2 -> int(2)
ICONST_3 -> int(3)
ICONST_4 -> int(4)
ICONST_5 -> int(5)
LCONST_0 -> long(0)
・・・・・
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
generators
・Kotlinコードのジェネレータっぽい
・設計書からソースコードを自動生成して生産性100
倍!!とかいうことではないが
・IntArray、DoubleArray、HogeArray・・・
とかめんどくさいから簡単に生成しようよ
というやつです
generatorsモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
grammer
・grmという謎のファイルが入っていて文法表現が書い
てある
・BNFのようなBNFじゃないようなもの(?)
This module contains a semi-formal description of Kotlin grammar.
It is processed by a tool to generate the Kotlin grammar
specification on the Kotlin Web site.
とREADMEには書いてある
grammerモジュール
annotations
: (annotation | annotationList)*
;
annotation
: "@" (annotationUseSiteTarget ":")? unescapedAnnotation
;
annotationList
: "@" (annotationUseSiteTarget ":")? "[" unescapedAnnotation+ "]"
;
ちょっと見てみる
ちょっと見てみる
annotationUseSiteTarget
: "file"
: "field"
: "property"
: "get"
: "set"
: "param"
: "setparam"
;
unescapedAnnotation
: SimpleName{"."} typeArguments? valueArguments?
;
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
idea
・ここはIntelliJ IDEAのKotlin対応の実装が入って
います
・ココにContributeすればIDEでもっと便利に使える
ようになりますね!ぜひ
ideaモジュール
object KotlinHighlightingUtil {
fun shouldHighlight(psiElement: PsiElement): Boolean {
val ktFile = psiElement.containingFile as? KtFile ?: return false
return ktFile is KtCodeFragment || ktFile.isScript ||
ProjectRootsUtil.isInProjectOrLibraryContent(ktFile)
}
fun shouldHighlightErrors(psiElement: PsiElement): Boolean {
val ktFile = psiElement.containingFile as? KtFile ?: return false
return ktFile is KtCodeFragment || ktFile.isScript ||
ProjectRootsUtil.isInProjectSource(ktFile)
}
}
ちょっとコード
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
idea-runner
This module exists for the sole purpose of providing the classpath for the
IDEA run configuration. This run configuration takes a plugin from the
KotlinPlugin artifact instead of the project's 'out' directory, which makes
it possible for our plugin to depend on other plugins such as JUnit plugin. If
you want to debug some patch to IDEA, you can add copy of IDEA class
into this module and modify.
ということでIntelliJ IDEAのプロジェクト構成の場合にKotlin
を動かすというものらしいです
idea-runnerモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
j2k
・JavaをKotlinに変換するためのモジュール
・switchならwhenへコンバートとか
・Javaの型をKotlinの型にコンバート
j2kモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
jps-plugin
・https://github.com/JetBrains/JPS
用のプラグインのようです。Gantベース。
※Gant is Groovy Ant Scripting
jps-pluginモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
js.serializer
js.tests
js.translator
npm.templates
js
・KotlinのJavaScriptランタイム用の実装
jsモジュール
js.dart-ast
js.frontend
js.inliner
js.libraries
js.parse
js
このあたりの仕組みについて、
(もう覚えていない)昔の自分がブログに書いて
いたので、
ご参照いただければと思います
・【コードリーディング】Kotlin to JavaScriptコンパイラメモ
http://yyyank.blogspot.jp/2015/05/kotlinkotlin-to-javascript
.html
jsモジュール
js
ざっくり大事なのは
・K2JSCompiler
・K2JSTranslator
jsモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
lib
・jarが入ってるだけじゃー(許してください)
javax.inject.jar
javax.inject-src.zip
jsr305-1.3.9.jar
※java.injectはJSR330とか@Injectとかそのあたり
※JSR305はソフトウェア欠陥検出。
@NotNullとかのアノテーションのやつです
libモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
libraries
・このモジュールは以外に重要で
Kotlinのstdlib(標準API)の実装とかが入っています
・あとjdk7、jdk8などruntimeごとのブリッジのような
ものも
librariesモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
license
・Kotlin自体のライセンスとサードパーティーの製品の
ライセンスがおいてあります
licenseモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
plugins
・Kotlinに関連するプラグインが実装
android-extensions
annotation-collector
annotation-processing
java-moddle-wrappers
lint
pluginsモジュール
plugins
・Kotlinに関連するプラグインが実装
uast-common
uast-java
uast-kotlin
※UAST=Unified AST
抽象構文木がpluginとはこれ如何に
pluginsモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
spec-docs
・実装仕様というか機能の特徴というか、
そんな感じのことがmdファイルに書かれています
spec-docsモジュール
annotations
build-common
compiler
core
eval4j
generators
grammer
Kotlinリポジトリのモジュール
idea
idea-runner
j2k
jps-plugin
js
lib
libraries
license
plugins
spec-docs
ultimate
ultimate
・IntelliJ IDEAのUE(Ultimate Edition)対応実装
・今のところ
Spring Frameworkに対しての実装のみ
ultimateモジュール
おめでとう!
ここまで理解したあなたは
Kotlin完全マスターです
まとめ
・ということで、internalな世界の浅瀬を歩いてみました
・Kotlinプロジェクトの輪郭は見えてきたのではないかと思い
ます
・JavaScript runtimeとかまだ完成しきっていないのでぜひ
contributeを
・バグがあったらcontributeを
・IDEのサポートもcontributeをするとみんな喜ぶ

More Related Content

What's hot

言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
 
NDS36 Kotlin Cute
NDS36 Kotlin CuteNDS36 Kotlin Cute
NDS36 Kotlin Cute
Yukiya Nakagawa
 
Kotlin
KotlinKotlin
Cowboyとelixir
CowboyとelixirCowboyとelixir
Cowboyとelixir
hayabusa333
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
Teppei Sato
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Hiroki Mizuno
 
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
IntelliJ IDEAとKotlinで作るSpring 5アプリケーションIntelliJ IDEAとKotlinで作るSpring 5アプリケーション
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
CASAREAL, Inc.
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
Keisuke Takahashi
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
yy yank
 
Why Kotlin?
Why Kotlin?Why Kotlin?
Why Kotlin?
Dev Ogiwara
 
React introduntion
React introduntionReact introduntion
React introduntion
YutaShimabukuro
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
yy yank
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
GOMI NINGEN
 
Study Swift
Study Swift Study Swift
Study Swift
Akihiro Urushihara
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
Tsunenori Oohara
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
 
Swiftの実際ダメな所
Swiftの実際ダメな所Swiftの実際ダメな所
Swiftの実際ダメな所
S_Shimotori
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Tomohiro Kumagai
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
 

What's hot (20)

言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
 
NDS36 Kotlin Cute
NDS36 Kotlin CuteNDS36 Kotlin Cute
NDS36 Kotlin Cute
 
Kotlin
KotlinKotlin
Kotlin
 
Cowboyとelixir
CowboyとelixirCowboyとelixir
Cowboyとelixir
 
Flowtype Introduction
Flowtype IntroductionFlowtype Introduction
Flowtype Introduction
 
Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋Coq for Moblie Phone @ ML名古屋
Coq for Moblie Phone @ ML名古屋
 
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
IntelliJ IDEAとKotlinで作るSpring 5アプリケーションIntelliJ IDEAとKotlinで作るSpring 5アプリケーション
IntelliJ IDEAとKotlinで作るSpring 5アプリケーション
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
 
Server Side Kotlin
Server Side KotlinServer Side Kotlin
Server Side Kotlin
 
Why Kotlin?
Why Kotlin?Why Kotlin?
Why Kotlin?
 
React introduntion
React introduntionReact introduntion
React introduntion
 
Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係Jvm言語とJava、切っても切れないその関係
Jvm言語とJava、切っても切れないその関係
 
この実装には問題がある!
この実装には問題がある!この実装には問題がある!
この実装には問題がある!
 
Study Swift
Study Swift Study Swift
Study Swift
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
Swiftの実際ダメな所
Swiftの実際ダメな所Swiftの実際ダメな所
Swiftの実際ダメな所
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
 

Similar to Kotlinソースコード探訪

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
koturn 0;
 
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
Hirotaka Kawata
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介豊明 尾古
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
健一 辰濱
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたkyon mm
 
Java で書かれたAndroid アプリに Kotlin を適用させていく
Java で書かれたAndroid アプリに Kotlin を適用させていくJava で書かれたAndroid アプリに Kotlin を適用させていく
Java で書かれたAndroid アプリに Kotlin を適用させていく
健一 辰濱
 
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたKotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
Naoki Iwata
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
Makoto Kato
 
Kotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へKotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へ
Takaki Hoshikawa
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
LINE Corporation
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 
Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
Hiroto Yamakawa
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングJun Saito
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
Shinya Takamaeda-Y
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
Naoto Gohko
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
Kouji Matsui
 

Similar to Kotlinソースコード探訪 (20)

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
 
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
 
Java で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていくJava で書かれた Android アプリに Kotlin を適用させていく
Java で書かれた Android アプリに Kotlin を適用させていく
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
 
Java で書かれたAndroid アプリに Kotlin を適用させていく
Java で書かれたAndroid アプリに Kotlin を適用させていくJava で書かれたAndroid アプリに Kotlin を適用させていく
Java で書かれたAndroid アプリに Kotlin を適用させていく
 
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたKotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
js-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチjs-ctypes - ネイティブコードを呼び出す新しいカタチ
js-ctypes - ネイティブコードを呼び出す新しいカタチ
 
Kotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へKotlin/Native 「使ってみた」の一歩先へ
Kotlin/Native 「使ってみた」の一歩先へ
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 
Line Creators Studio Android With Kotlin
Line Creators Studio Android With KotlinLine Creators Studio Android With Kotlin
Line Creators Studio Android With Kotlin
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 
Lombok ハンズオン
Lombok ハンズオンLombok ハンズオン
Lombok ハンズオン
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理
 

More from yy yank

Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
yy yank
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
yy yank
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
yy yank
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さない
yy yank
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
yy yank
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
yy yank
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
yy yank
 

More from yy yank (8)

Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門Javaプログラマのための頑張らないGo入門
Javaプログラマのための頑張らないGo入門
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Javaで最強のfizz buzz
Javaで最強のfizz buzzJavaで最強のfizz buzz
Javaで最強のfizz buzz
 
Doma2 with Kotlin
Doma2 with KotlinDoma2 with Kotlin
Doma2 with Kotlin
 
絶対にぬるぽを出さない
絶対にぬるぽを出さない絶対にぬるぽを出さない
絶対にぬるぽを出さない
 
Kotlinあるある言いたい
Kotlinあるある言いたいKotlinあるある言いたい
Kotlinあるある言いたい
 
【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション【こっそり始める】Javaプログラマコーディングマイグレーション
【こっそり始める】Javaプログラマコーディングマイグレーション
 
Kotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前にKotlinメジャーver リリースを前に
Kotlinメジャーver リリースを前に
 

Recently uploaded

FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 

Recently uploaded (14)

FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 

Kotlinソースコード探訪