SlideShare une entreprise Scribd logo
1  sur  88
オレオレJVM言語を
作ってみる
(四則演算するだけだけど)
関西Javaエンジニアの会 /
ポノス株式会社
阪田 浩一 @jyukutyo
#ccc_c5
会長だけどじゅくちょー
阪田 浩一 @jyukutyo
通称: じゅくちょー
関ジャバ会長
JVMが大好き
ポノス株式会社(スマホゲーム会社)
CCCと僕
• JJUG CCC 5回目となりました
–2017 Fall
–2017 Spring
–2016 Fall
–2016 Spring
–2015 Spring
ハッシュタグ
#ccc_c5
ガンガンツイートを
お願いします!!
今日のゴール
JVMプログラミング言語
の作り方を持って帰る
実装対象として
四則演算
言語のデモ
今日のソースコード
• https://github.com/jyukutyo/JVM-Math-Language
構造の説明
サンプル
(1 + 2) * 3
( 1 + 2 ) * 3
レキサー
パーサー
サンプル
(1 + 2) * 3
( 1 + 2 ) * 3
テキスト
トークン
ツリー
サンプル
(1 + 2) * 3
( 1 + 2 ) * 3
言語認識器
サンプル
(1 + 2) * 3
( 1 + 2 ) * 3
ツリーを
インタプリタに渡し、
定義した
処理を実行させる
モジュール 入力 出力
レキサー
(字句解析)
テキスト
(コード)
トークン
パーサー
(構文解析)
トークン AST(抽象構文木)
AST
インタプリタ
AST 実行結果
構成
モジュール ライブラリ
レキサー ANTLR 4.7
パーサー ANTLR 4.7
ASTインタプリタ Truffle 0.29
ライブラリの役割
ANTLR
ANTLR
ANTLR
• パーサージェネレータ
– http://www.antlr.org/
ツリーを構築するために
“文法”を定義する
ANTLRがしてくれること
“文法”から
レキサー/パーサーの
コードを生成してくれる
“文法”を定義する
方法は?
BNF (EBNF)
(Extended)
Backus–Naur Form
たとえば
ScalaのBNFは
Scalaの仕様にある
The lexical syntax of Scala is given by the following
grammar in EBNF form
...
Expr ::= (Bindings | [‘implicit’] id | ‘_’) ‘=>’ Expr
| Expr1
Expr1 ::= ‘if’ ‘(’ Expr ‘)’ {nl} Expr [[semi] else Expr]
| ‘while’ ‘(’ Expr ‘)’ {nl} Expr
| ‘try’ ‘{’ Block ‘}’ [‘catch’ ‘{’ CaseClauses ‘}’]
[‘finally’ Expr]
| ‘do’ Expr [semi] ‘while’ ‘(’ Expr ’)’
| ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’)
{nl} [‘yield’] Expr
| ‘throw’ Expr
| ‘return’ [Expr]
| [SimpleExpr ‘.’] id ‘=’ Expr
| SimpleExpr1 ArgumentExprs ‘=’ Expr
| PostfixExpr
| PostfixExpr Ascription
| PostfixExpr ‘match’ ‘{’ CaseClauses ‘}’
…
The Scala Language Specification Version 2.9
http://www.scala-lang.org/docu/files/ScalaReference.pdf
今回のBNF
Math.g4
表示します
ANTLRは
.g4ファイルから
レキサー/パーサーを
生成する
$ antlr4 Math.g4
(このコマンドは
ANTLRのJARにある
Toolクラスの実行)
定義した文法を
テストできる
$ antlr4 Math.g4
$ javac -cp antlr-4.7-
complete.jar Math*.java
$ grun Math prog –gui
(1 + 2) * 3
^D
ツリーとノードクラス
ProgContext
ExprContext
ExprContext ExprContext
NumberExprContextParensExprContext
NumberExprContext NumberExprContext
ExprContext ExprContextInfixExprContext
InfixExprContext
ExprContext
ただ、ANTLRの
ツリーのままでは
次のTruffleに
渡せない
ツリーの
移し替えをする
ANTLRは
tree walkingメカニズム
を提供している
tree walk
enterExpr()
ProgContext
ExprContext
ExprContext ExprContext
NumberExprContextParensExprContext
NumberExprContext NumberExprContext
ExprContext ExprContextInfixExprContext
InfixExprContext
ExprContext
exitExpr()
リスナーを実装し、
ParseTreeWalkerに
渡すだけ
ParseTreeWalker
enterProg(ProgContext)
exitProg(ProgContext)
enterInfixExpr(InfixExprContext)
exitInfixExpr(InfixExprContext)
enterParensExpr(ParensExprContext)
exitParensExpr(ParensExprContext)
enterNumberExpr(NumberExprContext)
exitNumberExpr(NumberExprContext)
Walker
リスナーのメソッド
リスナーのベースクラス
もコマンドで
自動生成されている
MathBaseListener
表示します
今回は各ルールから
exitするタイミングで
各ノードを移す
(詳細は後述)
小まとめ
• BNFを定義し、ANTLRにパーサーを
生成させた
• ANTLRのツリーをTruffleでのツリー
に移し替えるため、リスナーを実装
する
よりANTLRを学ぶには
モジュール ライブラリ
レキサー ANTLR 4.7
パーサー ANTLR 4.7
ASTインタプリタ Truffle 0.29
ライブラリの役割
Truffle
Truffle
Truffle
• トラフル(トリュフ)
• 言語実装用フレームワーク
– ASTインタプリタ構築の基盤を提供
• Graalプロジェクトの一部
– Graal自体は新しいJITコンパイラ
– Graal/Truffleを含むGraalVMは
多言語実行環境となるJVM(polyglot)
– Oracle Labs主導
– https://github.com/graalvm/graal/tree/master/truffle
Truffleでの多言語環境
HotSpot VM
JVMCI
Graal
JVM lang Truffle
LLVMJS R Ruby
C C++
Fortran
インタープリタ
Truffleでの言語実装
• TruffleRuby (Ruby)
– https://github.com/graalvm/truffleruby
• FastR (GNU R)
– https://github.com/graalvm/fastr
• Graal.js (JavaScript)
– ECMAScript 262 Version 6/Node.js
• SimpleLanguage (オレオレ言語)
– https://github.com/graalvm/simplelanguage
– 学習用
オレオレJVM言語の実装
HotSpot VM
JVMCI
Graal
JVM lang Truffle
オレオレJVM言語
インタープリタ
(余談)Eclipse OMR
https://www.slideshare.net/MarkStoodley/javaone-2017-mark-stoodley-open-sourcing-ibm-j9-jvm
(余談)Graal & Truffle
• Graalは言語実装そのものは知らない
– Truffleを間に挟んでいる(JVM言語以外)
• JITコンパイルでは(結果として)
複数言語にまたがったコンパイルが
できる
call call
call many times
プロファイリングし
ホットな部分を
JITコンパイル
call call
もちろん
必要に応じて
Deoptimization
する
Truffleを使った言語
Graalは
必須ではなく
通常のHotSpotでも
動作はする(している)
Truffleでの言語実装
1. Truffleでのノードクラスを実装
2. ANTLRのノードからこのノードに
移し替えるANTLRのリスナを実装
3. Truffleでの言語実装に必須の
クラスを実装
4. (入出力などの実装)
Truffleでの言語実装
1. Truffleでのノードクラスを実装
2.
3.
4.
ノードクラス
• Truffle DSL APIを使う
–提供されるアノテーションを
実装コードに付与する
–Truffleのアノテーションプロセッサが
コードを生成する
–アノテーションの種類、意味はJavadoc
を読むしかない
• ドキュメントは整備されていない
今回のノード
• 数値ノード(子ノードなし)
– Long
– BigDecimal(これだけでもよかったがあえて2種類)
• 演算子ノード(子ノード:2つ)
– Add(+)
– Subtract(-)
– Multiply(*)
– Divide(/)
• 括弧ノード
今回は”-1”といった
書き方はサポートしない
演算子ノードのクラス図
ノードのクラス図
ノードのクラス図
かっこに対応する
ノード
実際のコードを
表示します
Binary/Add/BigDecimal
/JVMMathLang
子ノードを持つノードの
処理は、
自動生成される
ノードのクラス図
自動生成コードを
表示します
Truffleでの言語実装
1.
2. ANTLRのノードからこのノードに
移し替えるANTLRのリスナを実装
3.
4.
ANTLR Truffle
NumberExpr
LongNode(整数)
BigDecimalNode(それ以外)
InfixExpr
AddNodeGen(+)
SubNodeGen(-)
MulNodeGen(*)
DivNodeGen(/)
ノードクラスの対応づけ
ParseTreeWalker
enterProg(ProgContext)
exitProg(ProgContext)
enterInfixExpr(InfixExprContext)
exitInfixExpr(InfixExprContext)
enterParensExpr(ParensExprContext)
exitParensExpr(ParensExprContext)
enterNumberExpr(NumberExprContext)
exitNumberExpr(NumberExprContext)
Walker
リスナーのメソッド
MathParseTreeListener
表示します
Truffleでの言語実装
1.
2.
3. Truffleでの言語実装に必須の
クラスを実装
4.
com.oracle.truffle.api.
TruffleLanguage
を継承して実装する
CallTarget parse(ParsingRequest r)
実装は1メソッドのみ
CallTarget parse(ParsingRequest r)
Truffleのエンジンが
呼び出すメソッド
CallTarget parse(ParsingRequest r)
コードをパースし、
AST表現を返す
メソッド
クラス 説明
ParsingRequest
getSource().getInputStream()で
実際のコードを取得する
CallTarget
Truffle.getRuntime()
.createCallTarget(RootNode)で
生成できる
CallTarget parse(ParsingRequest r)
CallTarget parse(ParsingRequest r)
1. ParsingRequest#getSource()
.getInputStream()でInputStreamを取得
2. IuputStreamをANTLRのレキサー/パーサーに
渡す
3. ANTLRのツリーをリスナで
Truffleのノードツリーに変換する
4. ルートノードを
Truffle.getRuntime()
.createCallTarget(RootNode)に渡す
JvmMathLang
表示します
Truffleでの言語実装
1.
2.
3.
4. (入出力などの実装)
最後
テキストを
Truffleのエンジンに
どのように渡し、
結果をどのように
受け取るか?
PolyglotEngine#eval(Source)
すると
PolyglotEngine.Value
で結果が返ってくる
あとはValueからget()する
JvmMathLangMain
表示します
よりTruffleを学ぶには
• コードを読むしかありません
そもそも阪田はどうやったのか?
https://www.youtube.com/watch?v=8Lt8au76emA
このセッションのコード
は公開されていないので、
何度も見て、
見えないコードは
調べて書いて試した
Devoxxセッションの
コードも
• SimpleLanguage (オレオレ言語)
– https://github.com/graalvm/simplelanguage
– 学習用
ベースだった
まとめ
• ANTLR+TruffleであなたもJVM言語が
作れる!
• https://github.com/jyukutyo/JV
M-Math-Language
ご清聴
ありがとうございました

Contenu connexe

Tendances

GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
なおき きしだ
 
ぼくとJenkinsおじさんの360日戦争
ぼくとJenkinsおじさんの360日戦争ぼくとJenkinsおじさんの360日戦争
ぼくとJenkinsおじさんの360日戦争
goccy
 

Tendances (20)

非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
 
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれいまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
C# 8.0 非同期ストリーム
C# 8.0 非同期ストリームC# 8.0 非同期ストリーム
C# 8.0 非同期ストリーム
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
ぼくとJenkinsおじさんの360日戦争
ぼくとJenkinsおじさんの360日戦争ぼくとJenkinsおじさんの360日戦争
ぼくとJenkinsおじさんの360日戦争
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 

En vedette (7)

Another compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilation
 
JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座JJUG初心者のためのJava/JJUG講座
JJUG初心者のためのJava/JJUG講座
 
Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)
 
CPUから見たG1GC
CPUから見たG1GCCPUから見たG1GC
CPUから見たG1GC
 
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
サンプルアプリケーションで学ぶApache Cassandraを使ったJavaアプリケーションの作り方
 
サーバサイド Kotlin
サーバサイド Kotlinサーバサイド Kotlin
サーバサイド Kotlin
 
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
 

Similaire à JJUG CCC 2017 Fall オレオレJVM言語を作ってみる

F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka
 

Similaire à JJUG CCC 2017 Fall オレオレJVM言語を作ってみる (20)

ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Startup JavaScript
Startup JavaScriptStartup JavaScript
Startup JavaScript
 
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
Cookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming ParadigmCookpad Summer Intern 2015 - Programming Paradigm
Cookpad Summer Intern 2015 - Programming Paradigm
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
今からでも遅くないC#開発
今からでも遅くないC#開発今からでも遅くないC#開発
今からでも遅くないC#開発
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
ES6,7で書ける JavaScript
ES6,7で書ける JavaScriptES6,7で書ける JavaScript
ES6,7で書ける JavaScript
 
Spock's world
Spock's worldSpock's world
Spock's world
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
Racc でおてがる構文解析
Racc でおてがる構文解析Racc でおてがる構文解析
Racc でおてがる構文解析
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 

Plus de Koichi Sakata

KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
Koichi Sakata
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
Koichi Sakata
 

Plus de Koichi Sakata (20)

Introduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVMIntroduction to JIT Compiler in JVM
Introduction to JIT Compiler in JVM
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte Buddy
 
Great Ideas in GraalVM
Great Ideas in GraalVMGreat Ideas in GraalVM
Great Ideas in GraalVM
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
Kanjava 201804 Java News
Kanjava 201804 Java NewsKanjava 201804 Java News
Kanjava 201804 Java News
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
 
from Java EE to Jakarta EE
from Java EE to Jakarta EEfrom Java EE to Jakarta EE
from Java EE to Jakarta EE
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project Amber
 
KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
“Purikura” culture in Japan and our web application architecture
“Purikura” culturein Japan andour web application architecture“Purikura” culturein Japan andour web application architecture
“Purikura” culture in Japan and our web application architecture
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったデブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わった
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
日本からJavaOneに行こう!
日本からJavaOneに行こう!日本からJavaOneに行こう!
日本からJavaOneに行こう!
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 
How Scala code is expressed in the JVM
How Scala code is expressed in the JVMHow Scala code is expressed in the JVM
How Scala code is expressed in the JVM
 
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
 

Dernier

Dernier (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/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
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介: 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
 
論文紹介: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...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

JJUG CCC 2017 Fall オレオレJVM言語を作ってみる