Submit Search
Upload
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
•
3 likes
•
3,207 views
U
Uehara Junji
Follow
implement Brainf*ck compiler using Indy with BytecodeDSL.
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 28
Download now
Download to read offline
Recommended
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
Uehara Junji
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
Uehara Junji
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
groovy 2.1.0 20130118
groovy 2.1.0 20130118
Uehara Junji
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
Uehara Junji
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
Uehara Junji
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Recommended
GroovyServ concept, how to use and outline.
GroovyServ concept, how to use and outline.
Uehara Junji
Markup Template Engine introduced Groovy 2.3
Markup Template Engine introduced Groovy 2.3
Uehara Junji
G* Workshop in fukuoka 20120901
G* Workshop in fukuoka 20120901
Uehara Junji
New feature of Groovy2.0 G*Workshop
New feature of Groovy2.0 G*Workshop
Uehara Junji
groovy 2.1.0 20130118
groovy 2.1.0 20130118
Uehara Junji
enterprise grails challenge, 2013 Summer
enterprise grails challenge, 2013 Summer
Uehara Junji
Introduce Groovy 2.3 trait
Introduce Groovy 2.3 trait
Uehara Junji
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
Uehara Junji
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
GContractsの基礎
GContractsの基礎
Takahiro Sugiura
Groovy indy 20120222
Groovy indy 20120222
Nobuhiro Sue
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
debug-ito
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみた
toru tom
Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
清水樹
2012-09-09.nagoyapm07
2012-09-09.nagoyapm07
IWATA Susumu
More Related Content
What's hot
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Uehara Junji
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
Uehara Junji
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
Uehara Junji
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Uehara Junji
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
GContractsの基礎
GContractsの基礎
Takahiro Sugiura
Groovy indy 20120222
Groovy indy 20120222
Nobuhiro Sue
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
debug-ito
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
kyon mm
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみた
toru tom
Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
What's hot
(20)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
Groovy base gradle_20130309
Groovy base gradle_20130309
Groovyの紹介20130323
Groovyの紹介20130323
Read Groovy Compile process(Groovy Benkyoukai 2013)
Read Groovy Compile process(Groovy Benkyoukai 2013)
Gws 20130315 gradle_handson
Gws 20130315 gradle_handson
GContractsの基礎
GContractsの基礎
Groovy indy 20120222
Groovy indy 20120222
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
Perlワンライナーで全てのモジュールにuse v5.8.0つける!
ZynqMPのQEMU
ZynqMPのQEMU
The History of Groovy #GroovyBase
The History of Groovy #GroovyBase
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
WebRTCがよく分からないから調べて試してみた
WebRTCがよく分からないから調べて試してみた
Grailsのススメ(仮)
Grailsのススメ(仮)
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Similar to Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
清水樹
2012-09-09.nagoyapm07
2012-09-09.nagoyapm07
IWATA Susumu
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
React Native GUIDE
React Native GUIDE
dcubeio
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
Tomomi Imura
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
2bo 2bo
Building Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
Yoji Shidara
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみた
Tomoyuki Sugita
memcached proxy server development and operation
memcached proxy server development and operation
Tatsuhiko Kubo
RGtk2入門
RGtk2入門
Masahiro Hayashi
こんにちはGroovy
こんにちはGroovy
irof N
Power Assert and perl.js
Power Assert and perl.js
Goro Fuji
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
Takayuki Shimizukawa
Rx java x retrofit
Rx java x retrofit
Shun Nakahara
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
Hiromu Yakura
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Tetsuyuki Kobayashi
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
Yasuhiro Ishii
Sinatra and heroku for mac
Sinatra and heroku for mac
Naoyuki Mitsuboshi
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Yahoo!デベロッパーネットワーク
Similar to Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
(20)
Zend Frameworkで始める携帯サイト
Zend Frameworkで始める携帯サイト
2012-09-09.nagoyapm07
2012-09-09.nagoyapm07
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
React Native GUIDE
React Native GUIDE
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
[Tokyo NodeFest 2015] Hardware Hacking for Javascript Developers
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
Building Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
Node-RED のフローを isaax で配信してみた
Node-RED のフローを isaax で配信してみた
memcached proxy server development and operation
memcached proxy server development and operation
RGtk2入門
RGtk2入門
こんにちはGroovy
こんにちはGroovy
Power Assert and perl.js
Power Assert and perl.js
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
Rx java x retrofit
Rx java x retrofit
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
20130713 オープンハードセミナー raspberry_piに何かつないで遊ぼう
Sinatra and heroku for mac
Sinatra and heroku for mac
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
Hadoop-3.2.0の新機能の紹介とJava9+対応のコミュニティ動向
More from Uehara Junji
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
Uehara Junji
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Uehara Junji
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
Groovy 1.8の新機能について
Groovy 1.8の新機能について
Uehara Junji
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Uehara Junji
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Uehara Junji
Clojure
Clojure
Uehara Junji
Groovy, Transforming Language
Groovy, Transforming Language
Uehara Junji
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Uehara Junji
Lisp Builder
Lisp Builder
Uehara Junji
G*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Uehara Junji
Groovy Now And Future
Groovy Now And Future
Uehara Junji
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Uehara Junji
Groovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Uehara Junji
More from Uehara Junji
(17)
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Groovy kisobenkyoukai20130309
Groovy kisobenkyoukai20130309
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Groovy 1.8の新機能について
Groovy 1.8の新機能について
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Jggug ws 15th LT 20110224
Jggug ws 15th LT 20110224
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy(Groovyを気軽に使いこなそう)
Easy Going Groovy(Groovyを気軽に使いこなそう)
Clojure
Clojure
Groovy, Transforming Language
Groovy, Transforming Language
Jggug Nagoya 20090925 Groovy
Jggug Nagoya 20090925 Groovy
Lisp Builder
Lisp Builder
G*WS 3rd Lightning talk
G*WS 3rd Lightning talk
Groovy Now And Future
Groovy Now And Future
Seasar Conference2008 Grails(Final)
Seasar Conference2008 Grails(Final)
Groovy Conference2008 Nttsoft
Groovy Conference2008 Nttsoft
Recently uploaded
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Recently uploaded
(14)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
Indy(Invokedynamic) and Bytecode DSL and Brainf*ck
1.
3 Bytecode DSL & Indy &
Brainf*ck G*Workshop Z 2013/09/20 上原潤二(NTTソフトウェア株式会社) 13年9月20日金曜日
2.
JGGUG G*Workshop Z
Copyright(C) NTT Software. 自己紹介 上原潤二(@uehaj) NTTソフトウェア(株)Grails推進室 JGGUG(日本Grails/Groovyユーザグループ)運営委員 書籍: プログラミングGROOVY(技術評論社) Grails徹底入門(翔泳社) ブログ「Grな日々」 GroovyServ, LispBuilder, GVM(JVM written in Groovy)開発者 2 13年9月20日金曜日
3.
JGGUG G*Workshop Z
Copyright(C) NTT Software. 今日の内容 Indyの基礎 Bytecode DSL Brainf*ckを実装してみた G*Magazine Vol.7の宣伝 3 13年9月20日金曜日
4.
JGGUG G*Workshop Z
Copyright(C) NTT Software. テーマ:Indyで遊びたい Indy: Java VM上での動的言語の実行を効 率化することを目的とした一連の機能拡張 (JSR 292) 気軽でない ASM面倒くさい ByteCode DSLを使おう! 4 13年9月20日金曜日
5.
35 Bytecode DSL 13年9月20日金曜日
6.
JGGUG G*Workshop Z
Copyright(C) NTT Software. ByteCode DSL Groovyの内部DSLで実現されたJava バイトコードのアセンブラ ASMのラッパー Indy対応! (重要) 6 @groovyx.ast.bytecode.Bytecode int fib(int i) { iload 1 iconst_2 if_icmpge l1 iload 1 _goto l2 l1 aload 0 iload 1 iconst_2 isub invokevirtual '.fib', '(I)I' aload 0 iload 1 iconst_1 isub invokevirtual '.fib' ,'(I)I' iadd l2 ireturn } 13年9月20日金曜日
7.
JGGUG G*Workshop Z
Copyright(C) NTT Software. BytecodeDSL 以下で@Grab可 groovyによる実行 7 @GrabResolver(name="maven-‐repox", root = "https:// raw.github.com/uehaj/maven-‐repo/gh-‐pages/snapshot") @Grab('groovyx.ast.bytecode:groovy-‐bytecode-‐ast:0.2.0-‐ separate-‐asm') import groovyx.ast.bytecode.Bytecode $ groovy fib.groovy 102334155 13年9月20日金曜日
8.
3 BytecodeDSLでHello Indy! 8 @GrabResolver(name="maven-‐repo", root="https://raw.github.com/uehaj/maven-‐repo/gh-‐pages/snapshot") @Grab("groovyx.ast.bytecode:groovy-‐bytecode-‐ast:0.2.0-‐separate-‐asm") import
groovyx.ast.bytecode.Bytecode import java.lang.invoke.* import java.lang.invoke.MethodHandles.Lookup import static org.objectweb.asm.Opcodes.H_INVOKESTATIC class HelloIndy { public static CallSite bootstrap(Lookup lookup, String methodName, MethodType type) { assert methodName == 'xx' MethodHandle mh = lookup.findVirtual(java.io.PrintStream, "println", MethodType.methodType(void,[String])) return new ConstantCallSite(mh) } @Bytecode static main(args) { getstatic 'java/lang/System.out','Ljava/io/PrintStream;' ldc 'Hello Indy' invokedynamic 'xx', '(Ljava/io/PrintStream;Ljava/lang/ String;)V', [H_INVOKESTATIC, 'HelloIndy','bootstrap', [CallSite, Lookup, String, MethodType]] vreturn } } 13年9月20日金曜日
9.
3 実行 9 $ groovy -Dgroovy.target.bytecode=1.7
HelloIndy.groovy Hello Indy 13年9月20日金曜日
10.
310 Indy!! 13年9月20日金曜日
11.
JGGUG G*Workshop Z
Copyright(C) NTT Software. Indy Indyの動作は知ってますよね?? 11 13年9月20日金曜日
12.
3 従来のinvoke系命令のイメージ バイトコード命令 バイトコード命令 Invokestatic/virtual/interface命令 メソッド バイトコード命令 return命令 バイトコード命令 (1)Java VMによって解決さ れて呼び出される : 13年9月20日金曜日
13.
3 invokedynamic命令のイメージ バイトコード命令 バイトコード命令 Invokedynamic命令 メソッド バイトコード命令 return命令 バイトコード命令 (1)Java以外の言語処理系 ランタイムによって解決 される : 13年9月20日金曜日
14.
3 invokedynamicのイメージ(2) バイトコード命令 バイトコード命令 Invokedynamic命令 バイトコード命令 : ? (2)クラスファイル上はブートスト ラップメソッドというメソッドに 紐付けられている Bootstarpメソッド バイトコード命令 return命令 (1)クラスロード時には未定 13年9月20日金曜日
15.
3 invokedynamicのイメージ(3) バイトコード命令 バイトコード命令 Invokedynamic命令 バイトコード命令 : 呼び出し先決定メソッド バイトコード命令 return命令 BootStrapメソッドを指すMH (2)BootstrapメソッドはCallSiteオブジ ェクトを返す CallSite 呼び出し先メソッ ドを参照するMH (1)BootStrapメソッドを示す MH(MethodHandle)で表現されている 13年9月20日金曜日
16.
3 invokedynamicのイメージ(5) バイトコード命令 バイトコード命令 Invokedynamic命令 バイトコード命令 : CallSite (1)invokedyamic命令にCallSiteが紐付 けられる この結び付きはJVMの実行を通じて以後不可逆、不変なので、以下のようにinvokedynamic がCallSiteに置き変わると考えても良いかも知れない。 (※CallSiteオブジェクトは複数の invokedynamic命令でシェアされ得る点でこのイメージは正確ではない。) バイトコード命令 バイトコード命令 CallSite バイトコード命令 呼び出し先メソッドを参照するMH 呼び出し先メソッ ドを参照するMH 13年9月20日金曜日
17.
3 CallSite 呼び出し先メソッドを参照するMH invokedynamicの最終形 バイトコード命令 バイトコード命令 メソッド バイトコード命令 return命令 バイトコード命令 MHによるメソッド参照 : 13年9月20日金曜日
18.
3 CallSite 呼び出し先メソッドを参照するMH (Mutable¦Volatile)CallSite バイトコード命令 バイトコード命令 バイトコード命令 : (1) メソッド1 メソッド2 × Groovyで言うところのmetaClassの変更のタイミングで実際のメソッドの差し替え を行なうことができるCallSiteもある。(これがキモ) 結局、「ポインタを解した呼び出し先アドレスの間接参照」を オブジェクト指向的に、型安全に行なっている。 13年9月20日金曜日
19.
3 Indyって結局何? メソッド呼び出し先を間接参照を使って書き換える しくみ 他言語メソッドの呼び出しが想定ユースケースだが技術 的にはそれに限らない(Java 8 Lambdaとか) 他言語だから、環境を持ち回したり引数をラップ・アン ラップする処理が必要になる場合がある メソッド呼び出しに伴なう前後処理(MHに対する高階 操作:後述)をJVM管理下で構成・実行するしくみがあ ることがメリット ➡最適化(インライン展開)期待 ➡そういう前後処理が不要な場合、速度メリットがあるかは?? ※
「MH呼び出しは速い」は都市伝説 19 13年9月20日金曜日
20.
3 MHに対する高階操作 20 13年9月20日金曜日
21.
321 Brainf*ck 13年9月20日金曜日
22.
3 Brainf*ckをindyで実装してみた : 構成図 22 Brainf*ckソース >+++++++++[<++++ ++++>-]<.>+++++++ [<++++>-]<+.++++++ +..+++.[-]>++++++++ [<++++>-]<.>++++++ +++++[<+++++>-]<.> ++++++++[<+++>-]<. +++.------.--------.[-]>+ +++++++[<++++>-]< +.[-]++++++++++. compile. groovy https://gist.github.com/uehaj/6614136 https://gist.github.com/uehaj/6614447 Brainf*ckコンパイラ 生成コード(Bytecode DSL/indyを使用) groovy groovy “hello world” JVM JVM(Java7) a.groovy 13年9月20日金曜日
23.
3 Brainf*ckとindy 静的言語だからIndyの意味ない (MutableCallSite出番なし) invokedynamicの引数文字列から 一連のMHを連接させたものを BootStrapメソッドで生成してみる 23 invokedynamic 'dummy', '()V',
[H_INVOKESTATIC, 'Brainfuck', 'bootstrap', [CallSite, Lookup, String, MethodType, String]], '>++++++++' 13年9月20日金曜日
24.
3 MHを連接 MethodHandles#filterReturnValu e(MH target, MH
filter) 「filter(target())」を表現するMHを返す。 targetの戻り値の型がvoid、 filterの引数が無しであれば、単にtarget, filterの順にMHを呼び出す filterReternValueの結果を filterReturnValueに与えることで任意個数 のMHを逐次実行できる 24 13年9月20日金曜日
25.
3 CallSite 呼び出し先メソッドを参照するMH MHを連接 バイトコード命令 バイトコード命令 メソッド(+) バイトコード命令 return命令 バイトコード命令 : filterReturlValueの結果得られ る、2つのMHを呼ぶMH filterReturlValueの結果得られ る、2つのMHを呼ぶMH メソッド(+) バイトコード命令 return命令 メソッド(>) バイトコード命令 return命令 13年9月20日金曜日
26.
3 生成コード 26 static void
main(String[] args) throws Exception { // Brainfuckからコンバートされたコード invokedynamic 'dummy', '()V', ... '>+++++++++' _GOTO tmp1 lab1: invokedynamic 'dummy', '()V', ... '<++++++++>-‐' tmp1: getstatic '.data','[B' getstatic '.dp','I' baload ifne lab1 invokedynamic 'dummy', '()V', ... '<.>+++++++' _GOTO tmp2 lab2: invokedynamic 'dummy', '()V', .... '<++++>-‐' tmp2: getstatic '.data','[B' getstatic '.dp','I' baload ifne lab2 invokedynamic 'dummy', '()V', .... '<+.+++++++..+ ++.' _GOTO tmp3 lab3: : >+++++++++ [ <++++++++>- ] <.>+++++++ [ <++++>- ] <+.+++++++..+++. 13年9月20日金曜日
27.
3 実行 27 % cat hello.bf >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++. [-]>++++++++[<++++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+ ++>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]+++++ +++++. %
groovy compile.groovy hello.bf > a.groovy % groovy -Dgroovy.target.bytecode=1.7 a.groovy Hello World! 13年9月20日金曜日
28.
3 まとめ Indyは面白い G*Magazine Vol7乞う期待! 28 13年9月20日金曜日
Download now