Enviar pesquisa
Carregar
Kink: invokedynamic on a prototype-based language
•
3 gostaram
•
1,765 visualizações
T
Taku Miyakawa
Seguir
Tecnologia
Vista de apresentação de diapositivos
Denunciar
Compartilhar
Vista de apresentação de diapositivos
Denunciar
Compartilhar
1 de 24
Baixar agora
Baixar para ler offline
Recomendados
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
Clojure
Clojure
Uehara Junji
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Lockfree Queue
Lockfree Queue
Kumazaki Hiroki
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
形式手法とalloyの紹介
形式手法とalloyの紹介
Daisuke Tanaka
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
なおき きしだ
Recomendados
冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
Clojure
Clojure
Uehara Junji
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Lockfree Queue
Lockfree Queue
Kumazaki Hiroki
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
形式手法とalloyの紹介
形式手法とalloyの紹介
Daisuke Tanaka
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
なおき きしだ
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
yhara
講座Java入門
講座Java入門
Tokai University
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
y_taka_23
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
Yasumasa Suenaga
Hacking Ruby with Python
Hacking Ruby with Python
Taisuke Yamada
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる
5t111111
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
MITSUNARI Shigeo
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
Hadoop jobbuilder
Hadoop jobbuilder
Taku Miyakawa
Kink の宣伝
Kink の宣伝
Taku Miyakawa
Mais conteúdo relacionado
Mais procurados
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
yhara
講座Java入門
講座Java入門
Tokai University
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
y_taka_23
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
Yasumasa Suenaga
Hacking Ruby with Python
Hacking Ruby with Python
Taisuke Yamada
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
MITSUNARI Shigeo
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる
5t111111
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
Ransui Iso
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
Kazuki Ohta
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
MITSUNARI Shigeo
ゆるバグ
ゆるバグ
MITSUNARI Shigeo
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
Mais procurados
(20)
Javascriptで無限ループを実現する5つの方法
Javascriptで無限ループを実現する5つの方法
講座Java入門
講座Java入門
BLS署名の実装とその応用
BLS署名の実装とその応用
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
AWS は形式手法の夢を見るか? - モデル検査器 Alloy によるインフラ設計
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
Hacking Ruby with Python
Hacking Ruby with Python
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
Rubyの拡張をCrystalで書いてみる
Rubyの拡張をCrystalで書いてみる
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
HPC Phys-20201203
HPC Phys-20201203
Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
ゆるバグ
ゆるバグ
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
Destaque
Hadoop jobbuilder
Hadoop jobbuilder
Taku Miyakawa
Kink の宣伝
Kink の宣伝
Taku Miyakawa
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
Taku Miyakawa
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen Algorithm
Taku Miyakawa
擬似乱数生成器の評価
擬似乱数生成器の評価
Taku Miyakawa
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
コルーチンの実装について
コルーチンの実装について
Taku Miyakawa
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
Taku Miyakawa
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Taku Miyakawa
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Yuji Kubota
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
Yuji Kubota
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Yuji Kubota
Graph Algorithms Part 1
Graph Algorithms Part 1
Taku Miyakawa
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Taku Miyakawa
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
Destaque
(16)
Hadoop jobbuilder
Hadoop jobbuilder
Kink の宣伝
Kink の宣伝
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
Matrix Multiplication in Strassen Algorithm
Matrix Multiplication in Strassen Algorithm
擬似乱数生成器の評価
擬似乱数生成器の評価
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
コルーチンの実装について
コルーチンの実装について
Quasar: Actor Model and Light Weight Threads on Java
Quasar: Actor Model and Light Weight Threads on Java
金勘定のためのBigDecimalそしてMoney and Currency API
金勘定のためのBigDecimalそしてMoney and Currency API
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Prepare for Java 9 #jjug
Prepare for Java 9 #jjug
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
Graph Algorithms Part 1
Graph Algorithms Part 1
言語設計者が意味論を書くときに考えていたこと
言語設計者が意味論を書くときに考えていたこと
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
Semelhante a Kink: invokedynamic on a prototype-based language
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
Yoshifumi Yamaguchi
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
JDK 10 へようこそ
JDK 10 へようこそ
David Buck
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
なおき きしだ
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
なおき きしだ
Weeklycms20120218
Weeklycms20120218
Yoshi Sakai
Programming camp 2008, Codereading
Programming camp 2008, Codereading
Hiro Yoshioka
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Kentaro Ohkouchi
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
mxnetで頑張る深層学習
mxnetで頑張る深層学習
Takashi Kitano
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
Programming camp code reading
Programming camp code reading
Hiro Yoshioka
Semelhante a Kink: invokedynamic on a prototype-based language
(20)
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
MoteMote Compiler Plugin
MoteMote Compiler Plugin
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
JDK 10 へようこそ
JDK 10 へようこそ
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
Weeklycms20120218
Weeklycms20120218
Programming camp 2008, Codereading
Programming camp 2008, Codereading
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
Programming camp 2010 debug hacks
Programming camp 2010 debug hacks
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
mxnetで頑張る深層学習
mxnetで頑張る深層学習
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Programming camp code reading
Programming camp code reading
Mais de Taku Miyakawa
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Taku Miyakawa
Java Quine Golf
Java Quine Golf
Taku Miyakawa
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Taku Miyakawa
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Taku Miyakawa
Java オブジェクトの内部構造
Java オブジェクトの内部構造
Taku Miyakawa
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Taku Miyakawa
Mais de Taku Miyakawa
(6)
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
Java Quine Golf
Java Quine Golf
Processing LTSV by Apache Pig
Processing LTSV by Apache Pig
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
Java オブジェクトの内部構造
Java オブジェクトの内部構造
Kink: developing a programming language on the JVM
Kink: developing a programming language on the JVM
Último
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Hiroshi Tomioka
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Último
(11)
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/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
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
論文紹介: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 Integrations
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Kink: invokedynamic on a prototype-based language
1.
Kink: プロトタイプベース言語で の invokedynamic
(構想) @miyakawa_taku 2012-02-22 JJUG Night Seminar
2.
1 要旨 • Kink という
JVM 言語を作っています • JavaScript や Lua と同様に、クラスのないオブ ジェクト指向言語です • invokedynamic がどこに使えるものか考えて みました
3.
2 論点 • Kink の紹介
– クラスのない世界 – なんでもメソッド – 気になる性能は? • invokedynamic の使い所 – スロットアクセスの最適化 – SwitchPoint で実行モード切り替え
4.
3 論点 • Kink の紹介
– クラスのない世界 – なんでもメソッド – 気になる性能は? • invokedynamic の使い所 – スロットアクセスの最適化 – SwitchPoint で実行モード切り替え
5.
4 クラスのない世界 • クラスはなく値だけがある • データもメソッドもいきなり値のスロット
(≒フィールド) に突っ込む &DOG = value DOG.&bark = { 'Bow!' } printline(DOG.bark) # => Bow!
6.
5 クラスのかわりに親 • 自分自身がスロットを持っていなかったら親
から取ってくる • 親のことをプロトタイプとも言う &PROTODOG = value('bark' : { 'Bow!' }) &DOG = PROTODOG.child printline(DOG.bark) # => Bow!
7.
6 親/子関係の一つ覚え • つまり子は親の名前空間を継承する • 様々な仕組みを親/子関係で実現する
– クラス / インスタンス (のようなもの) – 親クラス / 子クラス (のようなもの) – 外側のスコープ / 内側のスコープ
8.
7 なんでもメソッド •
足し算も掛け算もメソッド • 条件分岐もメソッド • 代入もメソッド • 引数渡しもメソッド
9.
8 足し算も掛け算もメソッド • 演算子はメソッドの構文糖
(TOP + BOTTOM) * HEIGHT TOP.plus(BOTTOM).multiply(HEIGHT)
10.
9 条件分岐もメソッド • if-then-else は
bool 値のメソッド (N % 2 == 0).then { 'even' } { 'odd' } (N % 2 == 0).then({ 'even' } { 'odd' })
11.
10 代入もメソッド • スロットへの代入はスロットのメソッド
&NUM = 42 &NUM.assign(42)
12.
11 引数渡しもメソッド • 引数渡しは仮引数列 (スロットのリスト)
のメ ソッド &diff = { (&X &Y) X - Y } &diff = { [&X &Y] = _args X - Y }
13.
12 気になる性能は? • tarai(13 6
0) (たらい回し関数、竹内関数) で マイクロベンチマーク &tarai = { (&X &Y &Z) (X <= Y).then { Y }{ tarai(tarai(X - 1 Y Z) tarai(Y - 1 Z X) tarai(Z - 1 X Y)) } } printline(tarai(~ argv.map { __.int }))
14.
13 結果: bc よりは速い GNU
bc 1.06.95 Kink 2012-02-19 C Ruby 1.8.7 scm 5e5 Python 2.6.6 mawk 1.3.3 C Ruby 1.9.2 Lua 5.0.3 Groovy 1.7.0 JRuby 1.6.6 0 20 40 60 80 100 120 140 160 秒
15.
14 つまりこんな言語 • クラスがなくて値だけがある • 代入も制御構造もメソッド呼び出し •
速くするのはかなり難渋する • あと、末尾呼び出しでスタックオーバーフロー が起きないことを保証しています
16.
15 論点 • Kink の紹介
– クラスのない世界 – なんでもメソッド – 気になる性能は? • invokedynamic の使い所 – スロットアクセスの最適化 – SwitchPoint で実行モード切り替え
17.
16 処理系の作り • プログラムはJVM バイトコードにせず、「評価
器」を作って実行する (cf. SICP 4章) call call &loop.do { print("twift!") slot proc slot proc loop } chunk chunk プログラム 抽象構文木 評価器
18.
17 invokedynamic の使い所 • そもそもJVM
バイトコードにしないので、メソッ ド呼び出しがいきなり invokedynamic になるこ とはない • ただし、高速化のためにバイトコード生成を 使っている所はあって、そこに invokedynamic が使えるかも
19.
18 スロットアクセスの最適化 • スロットアクセスを速くするため、スロット集合
のクラスを実行時に生成している • 本来はアクセス元のコードでキャッシュを効か せて速くする (現在は未実装) • ここに invokedynamic が使えそう DOG DOG.bark bark { "Bow!" } jump { "Pong!" } ここに使う
20.
19 スロットアクセスの最適化 • キャッシュヒット →
フィールドを直接取得 • キャッシュミス → フォールバック • MethodHandles#guardWithTest が使えそう if (slots.getClass() == #cachedClass) { test return ((#cachedClass) slots).bar; target } else { deoptimize(); fallback return slots.get("bar"); }
21.
20 SwitchPoint で実行モード切り替え • スロットやリストへの代入はメソッド呼び出し •
毎回メソッドを呼ぶと大変なコストなので、可 能な限りショートカット処理している • ここで SwitchPoint#guardWithTest が使えそう if 代入メソッドは再定義されていない? ショートカット処理 else 真面目にメソッド呼び出し
22.
21 SwitchPoint で実行モード切り替え • SwitchPoint
は MethodHandle のファクトリ – SP.guardWithTest(target, fallback):MethodHandle – 通常は target が実行される – SwitchPoint が invalidate されると、それ以降は fallback が実行される • 処理の実行モードを切り替えるのに使える – 代入処理の MH を SwitchPoint で生成 – 代入メソッドが再定義されたら invalidate
23.
22 invokedynamic の使い所 (rep) •
クラスのない言語でも充分使い所はある – スロットアクセスの最適化 – 実行モード切り替え
24.
23 参考 • Kink Programming
Language – http://code.google.com/p/kink-lang/ • V8 JavaScript Engine – http://code.google.com/p/v8/ – スロットアクセスを最適化する仕組みのパクリ元 (Hidden Class) • An efficient implementation of SELF – http://dl.acm.org/citation.cfm?id=74884
Baixar agora