SlideShare une entreprise Scribd logo
1  sur  70
Télécharger pour lire hors ligne
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をするとみんな喜ぶ

Contenu connexe

Tendances

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.
 

Tendances (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
 

Similaire à Kotlinソースコード探訪

Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
豊明 尾古
 
EmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べたEmitJSの環境をちょこっと調べた
EmitJSの環境をちょこっと調べた
kyon mm
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
 
Scalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミングScalatronで楽しく学ぶ関数型プログラミング
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
 
関数型言語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 #49
shoma h
 

Similaire à 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の非同期処理
 

Plus de 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 リリースを前に
 

Dernier

Dernier (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Kotlinソースコード探訪