最適化とガベージコレクション戦略を学ぶ "解読 JavaScriptエンジン" #nodefest #nodefestA
Nodefest: two such large rooms show a lot of Japanese Nodejs enthusiasts #nodefest pic.twitter.com/ELQPFu5I9X
2016-11-13 10:39:42ランタイム時に頻繁に実行される部分のみをdetectしてその部分だけをコンパイルする = JITコンパイラの基本的な考え方 #nodefestA
2016-11-13 10:40:48source code から parse されて bytecode に実行するが、JITコンパイラーがそれを補助する形で実行速度が改善されている #nodefest #nodefestA
2016-11-13 10:40:59(多分初出はSpiderMonkeyとかTraceMonkeyとかその当たりだろうなぁ,多分) #nodefestA
2016-11-13 10:41:512006年のJavaScriptはソースコードをパースしてbiteコードにし、インタプリタ実行していたので遅かった。その後、JITでまとめて機械語に変換するようになったので早くなった。 #nodefestA
2016-11-13 10:42:11Object allocation の時にproperty access が起きるが、その際にHidden classと呼ばれる"隠れたType"を作ることでメモリアロケーションとアクセスを改善。 #nodefest #nodefestA
2016-11-13 10:43:17hidden classについてはV8のデザイン読むと良い #nodefest #nodefestA "Design Elements · v8/v8 Wiki" github.com/v8/v8/wiki/Des…
2016-11-13 10:43:33optimizing compiler / unoptimizing compiler という考え方 #nodefestA
2016-11-13 10:45:14JITって実行時コンパイラだからコストをバカスカ使ってoptimizingするわけにいかないんだよね.そこで従来まではunoptimizingコンパイラしか使えなかったが,最近ではある程度のoptimizingコンパイラを前者の情報を基に実行してるみたい #nodefestA
2016-11-13 10:46:02#nodefestA optimizeを殺してくるevalとかの話はこの辺を読むといい "Optimization killers · petkaantonov/bluebird Wiki" github.com/petkaantonov/b…
2016-11-13 10:46:22SpiderMonkeyはinterpreterからバイトコードに変換、baseline JITと呼ばれるJITをかけた後にIon Monkeyでより詳細解析して、JITの段階を変えてる。 #nodefest #nodefestA pic.twitter.com/v4XQ3Uu0mb
2016-11-13 10:49:54違った型の型を引数に指定されたりするブロックではオプティマイズできないというようなはなしはTypeScriptの型のよいところを説明する記事でも同じ話題を見た気がする。 #nodefestA #nodefest
2016-11-13 10:49:55SpiderMonkey は実行回数によって最適化が必要かどうかを決めてて、実行によって得られた型情報を使って最適化するらしい #nodefest #nodefestA
2016-11-13 10:50:26アカン、 we have only 10 min や #nodefest #nodefestA
2016-11-13 10:50:56V8だと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