2014-04-14
JVM オペコードのリファレンスビューアが便利
使い方
" Vundle の場合 " vimrc に追記&再読込して :BundleInstall Bundle 'ebc-2in2crc/vim-ref-jvmis' " NeoBundle の場合 " vimrc に追記&再読込して :NeoBundleInstall NeoBundle 'ebc-2in2crc/vim-ref-jvmis'
Jvmis というコマンドが勝手に定義されるので、調べたいオペコードの上にカーソルを置いて :Jvmis を実行すると ref.vim インタフェースでリファレンスを閲覧出来ます。
リファレンスは The Java Virtual Machine Instruction Set から引いて来るので環境によっては一瞬もたつきますが、デフォルトでキャッシュを有効にしているので2回目以降は素早く引くことが出来ます *1
これでバイトコードリーディングがはかどりますね。
動機
Java を書いていると「このクラス / メソッドは中で何やってるんだろ」みたいなことが良くあります。
そんな時に限ってソースコードが同梱されていなかったりするため *2 javap コマンドで逆アセンブルすることになります。
バイトコードというだけあって覚えなければいけない数は非常に少ないのですが、時々「あれ、このオペコードのスタックどうだっけ」ということがあり、その度にリファレンスを引くのが非常に面倒でした *3
そんな時に TokyoVim#18 に参加することになり、何かテーマを決めなくては…ということでリファレンスを素早く引けるようにしました。
実装
当初、リファレンスビューアのコアに @thinca さんの vim-ref を使わせてもらい、ソースを自分で作ろうと思っていました。
が、やはり @thinca さん作の webdict ソースで概ね目的が達成されることが分かったので、取得したデータを見やすくフォーマットするところを作れば良いだけでした。
おかげで大変ラクが出来ました。@thinca さん、ありがとうございます!
課題
aload_0, aload_1 といったオペコードはリファレンス上は aload_<n> のように記載されていて、vim-ref-jvmis ではこのあたりの読み替えもしています。
そのためかビューア上でのハイライトが効かず少し寂しいので、いずれ手を入れたいです。
後はドキュメントも書かないといけませんね…
- 6 http://t.co/L5yuFNYAhv
- 5 https://www.google.co.jp/
- 4 http://t.co/55iDRrEya5
- 1 http://api.twitter.com/1/statuses/show/455702630363172864.json
- 1 http://api.twitter.com/1/statuses/show/455728703205408768.json
- 1 http://hatenablog.com/k/keywordblog/Java?mode=rss
- 1 http://rebelmouse.com/
- 1 http://t.co/1JkXPWc7SQ
- 1 http://vim.g.hatena.ne.jp/
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/ebc_2in2crc/20120729/1343557350&ei=I_9LU66VGtfo8AXgoYHADw&usg=AFQjCNGSwPO9bU-cq7SbBQGNm97JGCeI0w&sig2=flqHEBmJ6Qe-aVDNegN6DQ&bvm=bv.645425