Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Asynchronous heading extraction. #13

Open
h1mesuke opened this issue Sep 28, 2011 · 3 comments
Open

Asynchronous heading extraction. #13

h1mesuke opened this issue Sep 28, 2011 · 3 comments

Comments

@h1mesuke
Copy link
Owner

現在、unite-outline の見出し抽出は非同期ではないため、見出しの抽出中はユーザーは他の操作が行えない。
大抵の場合、見出しの抽出は瞬時に終わるため、これが問題となる局面は少ないが、

以下の場合に、抽出時の待ち時間が大きくなり、無視できなくなることがある。

  • 見出し抽出に外部プログラムを使う場合
    • C/C++/Java における ctags の使用がこれにあたる
    • Windows では特にプロセスの起動が遅く、
      200行程度のバッファからの見出し抽出に1秒以上を要するとの報告があった
  • ファイルが大きい場合
    • 数万行とかいう規模になってくるとさすがに厳しいか
  • マシンが貧弱な場合

このような場合でも、ユーザーをブロックすることなく見出しの抽出を行えるよう、
見出しの抽出を非同期に行えるようにすべきである。

案1: vimproc を使う

一番有力な案。というか、これ以外にどういうやり方があるものかまったく思いつかないw

もし、ユーザーが vimproc をインストールしており、かつ、オプションで非同期な抽出を許可する設定をしていれば、vimproc を使って非同期に見出しを抽出する。この辺の設定は filetype_option としてファイルタイプごとに持たせられればいいかな。非同期な見出し抽出が必要になるファイルタイプって限られると思うので。

抽出結果はファイルを介して受け渡すのが無難か?
とするならば、常時 FileCache から読むような感じになるか。もはやキャッシュではないなあ。

vimproc について理解を深める必要がある。ソースを読んで仕組みを把握しよう。neocomplcache がまさにこういった vimproc の使い方をしているとのことなので、参考にできるだろう。

問題点

  • vimproc は導入の敷居が高い
    • ビルドが必要、Windows だと特にめんどい

案2: シェルにバックグラウンド実行させる

結局 system() 経由でシェルを叩くんだから、シェルにバックグラウンド実行させるという方法もある。
vimproc は導入の敷居が高いので、なしでもいけるらそっちの方がいい。

問題点

  • シェルによってバックグラウンド実行の指定方法が異なる
    • & だったり &! だったり
    • cmd.exe もこれまた違う
@Shougo
Copy link

Shougo commented Jan 8, 2012

非同期は確かに魅力的ですが、neocomplcache+vimprocがあれだけ苦労したように、デバッグがかなり面倒です。
安定して動作させるにはかなりの苦労が必要になります。注意してください。

@h1mesuke
Copy link
Owner Author

h1mesuke commented Jan 8, 2012

安定して動作させるにはかなりの苦労が必要

Shougoさんが言うからには相当厄介なんでしょうね……
私はまだ neocomplcache が具体的にどのように vimproc を使っているのか、詳細を見ていないので
その辺まだよくわかっていません。vimproc を使うかどうかもまだ検討段階です。

unite-outline で求められている非同期、ということだと、また違った選択肢があるかも知れません。
そういったことも含めて、しばらくは調査期間ということになりそうです。ご忠告感謝!

@Shougo
Copy link

Shougo commented Jan 8, 2012

neocomplcacheの場合はかなりややこしいです。
なぜなら、裏でVimの別プロセスを起動していて、それがキャッシュをするという仕組みだからです。
そっちでエラーになると分からないので……。
厳密にはvimprocはいらないんですが、わざわざ引数をパースするのも面倒なのでvimprocが必要、ということにしています。直接通信できるんなら、まだマシだったんですけどね。

todesking pushed a commit to todesking/unite-outline that referenced this issue Mar 30, 2014
Simple Outlining for coffeescript and jade
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants