neovim = VM
注意: 
この発表は 4 年前好評だった 
某発表のリメイクである。
自己紹介 
 ハンドルネーム:暗黒美夢王(Shougo) 
 Vim大好き 
 CPUやOSの話も好きだったのだ、昔はな…… 
 職業:闇の Vim 使い 
 Vim歴:8年目 
 .vimrcの行数を数えるのはやめた
今日はneovimの話をしよう。
neovimとは? 
意見が合わずに 
fork した 
Vim
なぜneovimなのか? 
カーネル / VM探検隊 in つくば 
↓ 
カーネル / VIM探検隊 in New Place 
↓ 
カーネル / neovim探検隊 
↓ 
neovim 
自然な発想!
まじめな解説 
アプリケーション 
アプリVMM 
ホストOS 
ケーション 
ハードウェア 
Type II VMM 
アプリケーション 
ホストOS 
アプリ 
ケーション 
ハードウェア 
neovimmer's Environment
「neovimは環境」 
 neovimはマルチプラットフォーム(予定) 
 neovimさえあれば、その上で様々なアプリケーショ 
ンが動作する 
例: テトリス, Twitterクライアント, シェル, 端末, スネーク 
辞書ビューワ, ファイラー,Rogue, 某落ち物ゲーム 
 よって、neovim = VMの式がなりたつ 
 最近は軽量な仮想化が流行しているので neovim 
はその流れに乗ることができる(はず)
neovimの低レベルレイヤー 
 neovimはVim ScriptとLuaで拡張が可能(予定) 
 Vim ScriptはOS用語でいえばDevice Driver 
 それでも実現不能な場合は外部と通信するか、 
ソース本体を書き換えて Pull Request 
 ソース変更 = カーネルそのものを書き換え 
 外部と通信 = カーネルモジュール 
 各々で読み換えてください
neovimの通信機能 
 全てをneovimだけでやることは不可能なので、外部 
との通信機能が必要 
 VMでいうところの、VM RPC (Remote Procedure 
Call) 
 neovim は MessagePackRPCを実装している 
 外部プログラムとの通信機能もEmacsを超える 
 外部インタフェースやGUIはMessagePackRPCで実現
Emacsとの比較 
 Emacsはシェルと通信するための機能が充実して 
いた 
例: shell­mode, 
term­mode, 
eshell­mode, 
comint­mode... 
 しかし、neovimも理論上同じことが出来る 
 Emacsの利点はだんだん薄れていくのでは?
vimproc 
 外部インタフェースを用いず、Vimで非同期通信を 
行うには必須であった 
 しかし、neovimには標準で非同期通信機能が実装 
されているので必要性が薄れる 
 とはいえ一応 neovim でも動くよ!
おまけ 
 neovimの弱点:開発者が足りない 
 Vimのアップストリームでの変更をどれだけマージで 
きるか 
 XEmacsと同じ道を辿らなければよいが 
 neovimについて詳しい話が聞きたい? 
 今年の Vim conference で聞けるだろう。クックック……

neovim = VM