最適化とガベージコレクション戦略を学ぶ "解読 JavaScriptエンジン" #nodefest #nodefestA

"Demystifying JavaScript Engines" @a0viedo
1
Gleb Bahmutov @bahmutov

Nodefest: two such large rooms show a lot of Japanese Nodejs enthusiasts #nodefest pic.twitter.com/ELQPFu5I9X

2016-11-13 10:39:42
拡大
Ryotaro Ikeda @chlere

ランタイム時に頻繁に実行される部分のみをdetectしてその部分だけをコンパイルする = JITコンパイラの基本的な考え方 #nodefestA

2016-11-13 10:40:48
Yosuke Furukawa @yosuke_furukawa

source code から parse されて bytecode に実行するが、JITコンパイラーがそれを補助する形で実行速度が改善されている #nodefest #nodefestA

2016-11-13 10:40:59
Ryotaro Ikeda @chlere

(多分初出はSpiderMonkeyとかTraceMonkeyとかその当たりだろうなぁ,多分) #nodefestA

2016-11-13 10:41:51
kiwi ٩(๑❛ᴗ❛๑)۶ @koga_wiwi

2006年のJavaScriptはソースコードをパースしてbiteコードにし、インタプリタ実行していたので遅かった。その後、JITでまとめて機械語に変換するようになったので早くなった。 #nodefestA

2016-11-13 10:42:11
Yosuke Furukawa @yosuke_furukawa

Object allocation の時にproperty access が起きるが、その際にHidden classと呼ばれる"隠れたType"を作ることでメモリアロケーションとアクセスを改善。 #nodefest #nodefestA

2016-11-13 10:43:17
azu @azu_re

hidden classについてはV8のデザイン読むと良い #nodefest #nodefestA "Design Elements · v8/v8 Wiki" github.com/v8/v8/wiki/Des…

2016-11-13 10:43:33
リンク GitHub v8/v8 v8 - The official mirror of the V8 git repository
Ryotaro Ikeda @chlere

evalの中にはJITが入っていけないからねー #nodefestA

2016-11-13 10:44:22
Ryotaro Ikeda @chlere

optimizing compiler / unoptimizing compiler という考え方 #nodefestA

2016-11-13 10:45:14
じょう @joe_re

optionを意識したargumentsのparse素で書くと本当にめんどい.. #nodefest

2016-11-13 10:45:59
Ryotaro Ikeda @chlere

JITって実行時コンパイラだからコストをバカスカ使ってoptimizingするわけにいかないんだよね.そこで従来まではunoptimizingコンパイラしか使えなかったが,最近ではある程度のoptimizingコンパイラを前者の情報を基に実行してるみたい #nodefestA

2016-11-13 10:46:02
azu @azu_re

#nodefestA optimizeを殺してくるevalとかの話はこの辺を読むといい "Optimization killers · petkaantonov/bluebird Wiki" github.com/petkaantonov/b…

2016-11-13 10:46:22
リンク GitHub petkaantonov/bluebird bluebird - :bird: :zap: Bluebird is a full featured promise library with unmatched performance.
Yosuke Furukawa @yosuke_furukawa

SpiderMonkeyはinterpreterからバイトコードに変換、baseline JITと呼ばれるJITをかけた後にIon Monkeyでより詳細解析して、JITの段階を変えてる。 #nodefest #nodefestA pic.twitter.com/v4XQ3Uu0mb

2016-11-13 10:49:54
拡大
Masahiko Murakami @fossamagna

違った型の型を引数に指定されたりするブロックではオプティマイズできないというようなはなしはTypeScriptの型のよいところを説明する記事でも同じ話題を見た気がする。 #nodefestA #nodefest

2016-11-13 10:49:55
やぬすさん / TAKAGI Kensuke @janus_wel

SpiderMonkey は実行回数によって最適化が必要かどうかを決めてて、実行によって得られた型情報を使って最適化するらしい #nodefest #nodefestA

2016-11-13 10:50:26
azu @azu_re

V8だとbailoutの理由とコードまとめられたリポジトリとかある #nodefestA "vhf/v8-bailout-reasons: A list of Crankshaft bailout reasons with e…" github.com/vhf/v8-bailout…

2016-11-13 10:51:52