ぼくがかんがえたさいこうのエディタ

LingrでShougoさんの熱い思いを聞いて、ちょっと前に紙に書いたメモを思い出したので電子化してみる。
EmacsVimよりもすごいエディタ、というのはどんなんだろうか、と考えてこんなのになった。

エディタ用スクリプト言語

エディタのスクリプトとなる言語はなんでもいいことにする。
というのはどういうことかというと、
エディタが実行するのは中間言語であって、
他のそれぞれの言語ごとにバインディング*1が用意されている。

で、コンパイルしてしまえば、Perlでも、Pythonでも、Rubyでも、
Vimスクリプトでも、Emacs Lispでも、全てプラグインとして使える。
コンパイルPythonみたいにコンパイルされたバイトコード
存在しないか古かったらコンパイルする。
どの言語かの判別はshebangみたいに
先頭になんかくっつけとけばいいんじゃないかな?

ParrotとかLLVMとかそのための土台は揃ってきてる。
これに限らず、今、古い資産をどうやって生かすかって技術が重要になってきてると思う。

関係ないけど.vimrcとかプラグインとかを
コンパイルしてディレクトリに置くだけで
同じ環境になったらうれしい。
エディタがそのレベルに達するまで
.vimrcを後生大事に持ちつづけるのもすごいと思うけど、そうなったらうれしい。

プラグイン/アドオン マネージャ

Firefoxのアドオンマネージャ + cpan + auto-install.el + Weave + ...
つまり以下のような感じ。

  • インストール
  • 削除
  • アップデート
  • 依存関係を辿ってインストール
    • 便利なライブラリがあればプラグインを開発しようという人が増える!
  • プラグインのテスト環境
  • 設定のバックアップ
  • 設定の共有
    • 「共有」ってサーバー*2へのpushとpull両方できるといいよね
    • ReadItLaterがpushを暗黙に行うので分かりにくいんだよなどうでもいいけど

パッケージ管理マネージャとかについてはよく分かってないので、
それについて調べればもっと「これは便利」みたいなのがあるかもしれない。

ドキュメント

重要。

  • perldoc
  • :help
  • man、

優れたドキュメントがあるところには優れたソフトウェアがある(はず)。
PHPはドキュメントすごいしソフトウェアすごい。
PHP自体にはちょっと残念なところもある。
けどドキュメントでカバーすればそれは仕様。
割と本気で感心してたり。

マルチスレッド

VimEmacsで目下の課題の一つがこのマルチスレッド対応。
どっちも非同期のスクリプト実行ができないのはもったいない。
EmacsでもVimでもできなくはない。
でもかなり難しいし不完全。
コードのメンテナンス的な意味でも限界がある(らしい)。


追記:以下はShougoさんによるとEmacsでは無理らしいです。

*3

追記2:Emacsでの事情をブコメid:tomoyaさんに教えていただきました。

ただ、Emacsではどうか知らないけど、
Vimスクリプトはlibcall()という関数を使ってC関数を呼ぶことができる。
それを使って非同期実行を可能にするという目的のvimprocというものが現在制作中だったり。


あとJavaScriptのsetInterval()やsetTimeout()みたいに
タイマー的な機能があるといいよねということで
メーリングリストリクエストされたらしい
最近vim_devとvim_use見てないので詳しくは分からないけど。

あとマルチスレッド化は今後重要になっていくのか、
それとも古い資産との相性がいい
コルーチンによる擬似スレッド*4が重要になるのか、
まだまだ分からないところ。

about:config

Vimの設定はオプション、変数、とかいろいろ散らばってて分かりにくい。
統一した設定の編集なんかができるといい。
もちろんスクリプト側からの話。

その他

  • arpeggio.vim
    • キーの同時押しはコアでサポートしてほしい
  • Firefoxのポインタファイル
  • 端末版サポートとかいいよもう...
    • まぁあったらうれしいんだけど、GUI使えない時とか
    • GUIキーバインドの融合が最強
    • キーボードだからCUIだなんてこだわる必要はない
  • フックをどこまで許すか
    • 一文字ごとにイベント送って遅くならない?
    • ムーアの法則...は今後も続くんだろうか...
    • Vimではイベントというかmapを使って処理をすることはできる
      • けどキー一つに割り当てられるのは数が限られてる*5
      • モードがあればキーに対応する動作は変えられるけど...
  • operatorとtextobj
  • もう再起動とかしたくない
    • いきなりOSの話になるけどUbuntuuptimeの結果「16:03:22 up 27 days, 3:51, 1 user, load average: 0.77, 0.56, 0.55」
    • 再起動めんどくさい
    • とにかくめんどくさい
    • なんで最近ずっとVim使ってると重くなるんだろ?
      • 多分なんかのプラグインのせいのような気がするけど...
    • 「重い」のって何が原因なんだろう?
      • メモリ使用量は関係あるのか
      • Vimをプロファイリングしたいけどプロファイリングするだけでも重いのに*6さらに重くなるほどつかいたくはないです
      • ようするにめんどい

*1:Vimのif_perlとかif_rubyみたいなもの

*2:ってどこ?

*3:わざわざ赤字にしたのはDisってるわけじゃ...ククク

*4:Coroみたいな

*5:モードごとに通常のマッピングバッファローカルなマッピング

*6:valgrindとかプログラムの動作クソ重くなる