-
Notifications
You must be signed in to change notification settings - Fork 11
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
今後のVim scriptをどうするのかについて検討する #48
Comments
廃止する必要はなくて、内部の1st classなスクリプト言語をVimL以外に変更し、 私がそもそもそれを言い出した真の目的は、 別issue建てるべきか? |
今日もう一度Luaの言語仕様を見てみましたが、Vim scriptにかなり似ているし、 そういえば、Vimはmappingの実装もハードコーディングでひどかったですね……。
はい。Vim本体は言語を拡張するのではなくて、エディタとしての機能に専念すべき、それは私もそう思います。
せっかくなので、もうちょっと深く議論してからにしましょう。 |
この意味では、別のissueで思いついたif_cでも良いわけだ。 |
そうですね。 |
Vim scriptの利点: Vim scriptの欠点: 最近、Vim scriptについて色々と考えることが増えてきました。 が、現在の外部インタフェースには次の問題があります。 外部インタフェース全般: http://vim-users.jp/2013/01/vim-advent-calendar-2012-ujihisa-2/
|
Pythonインタフェースの利点: Pythonインタフェースの欠点: Luaインタフェースの利点: Luaインタフェースの欠点: mrubyインタフェースの利点: mrubyインタフェースの欠点: その他の言語: |
何の言語を利用するにせよ、標準で有効にすることと安定性の確保が必要不可欠となると思います。 ※;ちなみに、if_luaを使っているプラグインをkaoriyaさんのもの以外で見たことがないんですよね……。 |
この議論、一度vim_devに持っていく必要があるんでしょうかね? |
https://twitter.com/tyru/status/315697636554444800
https://twitter.com/kaoriya/status/315703919231791104
|
vimlparser標準同梱->Luaにトランスレート->Luaを標準で有効化(big以上?)→if_lua標準化という流れ? vim7.4がもうすぐみたいだし、ここの議論もそろそろ本格的にやったほうが良いような気がする。 |
mrubyってそういうこと謳ってましたっけ。
一応標準のものを全部列挙しておきますか。 |
それが本来の目的ではないですが、機能を絞ってあるため一応CRubyより高速のようです。
ありがとうございます。サポートしている言語の数は多いんですけどね……。今の状態ではいかんせん使いにくい。 |
テストスクリプトを書いてみました。 https://gist.github.com/Shougo/5231273 結果がなかなか衝撃的です。 n = 10 n = 15 n = 20 n = 25 結論: |
VimLだけFib内の条件式が違いません? |
@k-takata たしかにw 100倍は到底縮まらないと思いますが、フェアではないですねw |
if_rubyも入れて、再測定しました。条件式も修正しています。
ちなみに、一度目の実行はインタプリタの起動に若干時間がかかるのでそれは除外してあります。 |
さらにスクリプトを改造、単体で動作するようにして試しました。 n = 5 |
それぞれのインタプリタのバージョンは?
if_luaの60倍程度の遅さですか。インタプリタそのものの性能はそんなものだとして、後はVimとの間で頻繁にデータをやりとりする場合のオーバーヘッドはどうなのかというのも気になりますね。 |
環境は、Ubuntu 12.10のディストリビューションにて標準でインストールされるものです。
頻繁にやり取りをすると、文字列との変換が発生するので遅くなります。やり取りは最小限にするほかないと思いますね。 |
各インタフェースの速度比較用に、汎用的なベンチマークスクリプトは欲しいですね。 |
Dict, ListについてはLuaは直接Vim scriptとやりとりできるようなのでそこのオーバーヘッドは小さいものと考えられます。 |
あとは、KaoriyaさんのVimがデフォルトでluaインタフェースが有効になっているといろんな人が幸せになる予感はします。 |
@Shougo なってるよ。別途インストールする必要はあるけど。 |
ふむふむ。Luaを同梱できると一番良いですね。 |
1000倍w |
とりあえず次から LuaJIT の DLL をバンドルすることに決めましたwww |
こういう場合、 |
@mattn 👍 ちなみにこの場合は 優劣 じゃないかなw |
速度の比較として書いたのですが、確かにわかりづらいですね。
それは素晴らしい。vim-jpが推す、Vim scriptに代わる第二言語はif_luaで決まりですかね。 |
つまり |
えぇ、pythonで定義した関数の呼び出しは遅いです。 vimスクリプトとして利用する場合に関して言えば、そこよりもスクリプトの読み込み速度が重要だと思います。 |
文字化け修正しました。
Lua自体はバイトコード生成&読込みできるハズなので、工夫次第ですかね。 |
バイトコードのキャッシュで早くなるのはファイルの読み込み速度だけらしいですね。あと、キャッシュの更新処理はそれなりに遅くなります。キャッシュ化でどれだけ速度が変化するのか、まずは計測してみてはどうでしょう。 |
@Shougo zshをよく知らないのですが、あれって内部でオペコードにコンパイルしてるんですか? |
https://gist.github.com/methane/5268143 |
でも、 vim スクリプトも読み込むときにバイトコード作ってないとは言え構文解析はしてるだろうし、 |
構文解析(白目 |
@Shougo ごめんなさい、会話が食い違っていたかもしれません。 でも、最初にやることは if_lua でプラグインを書いた時に vim スクリプトに比べて足りない点を |
起動速度は明確に落ちません。なぜなら、Luaインタプリタの起動がとても早いからです。1msかからないので誤差の範囲。
zshがOPコード形式なのかどうかはよくわかりません。が、zshにはスクリプトのコンパイルを行うzcompileというコマンドがあり、何らかの最適化をしているのではないかと考えています。
だとは思うのですが、自動的にキャッシュするインタプリタはPythonくらいしか聞かないですね。
はい。それは思います。が、そういう部分は一時的にVim scriptを呼び出して解決するべき問題のような気もしていて、 |
インタプリタの起動時間じゃなくて、 Lua コードの読み込み時間を気にしています。
これは、Cで書かれたvimスクリプトの解析処理を Lua に書き換えて速くなるという意味でしょうか?
phpは負荷が大きいなら APC などのバイトコードキャッシュがほぼ必須になっています。 一般的に構文解析&簡単な最適化&OPコードの生成という一連の動作はかなり重いので、
はい、メリットはもちろんあります。
インタフェースを増やすとメンテナンスが大変になりますよね。 |
https://gist.github.com/methane/5268614 10000行の代入文で試してみました。 さらに、 Lua JIT を使うと、ソースから実行しても lua のバイトコードキャッシュ使った状態に近い速度が出ました。 |
実際に見てみないとわかりませんが、私はVim scriptのほうが解析が遅いと考えています。一度ベンチマークをとってみたいですね。if_luaでのLuaスクリプト読み込みと、sourceの読み込みでどちらが高速なのか。
いいえ。Cで書かれたVim scriptの解析処理を同じくCで書かれたLua scriptの解析処理に置き換えれば早くなるのではないかという予想です。
ふーむ。その割にはデフォルトでキャッシュする処理系は少ないですよね……。メリットが大きいなら大抵の処理系で採用しそうなものですが。 |
呼び出し頻度が高いものを抽出する作業が面倒そうですね。他の外部インタフェースでは大幅に関数を追加しているのはないので、それがどれだけ受け入れられるかがわかりません。できればLua側に関数があれば良いというのには同意です。Luaインタフェースを利用する場合、Vim以外の外部のライブラリに頼ることは難しいと考えられるため。
ふむ。確かに、キャッシュされると読み込みは高速ですね。 ただ最近の流行だと、起動時にはそもそもスクリプトを読み込まないのが主流なんですよね。キャッシュがどれだけ効果があるのかなぁという気はしています。 |
はい、私もこのベンチマークを見た限りでは、Luaのソース読み込みは充分に高速なのでキャッシュは要らないと思います。 |
ここに書くべきか迷いますが一応書かせて貰います。場違いコメントすみません。 vimは保守的なアプリケーションである事は皆さんご存知の通りで、おそらくBramはデフォルトのスクリプト言語を入れ替えるのには難色を示すと思います。ランタイムの要る処理系、バージョンアップにより互換性を失う処理系、それらはvimが欲している物ではないだろうし、それらがバージョンアップ等で動かくなる事でvimが使えなくなる事は、unixエンジニアにとって命取りになる事を意味していて、Bramがみすみす足を踏み入れる事はしないでしょう。 本件、研究課題として面白いと思っています。 https://twitter.com/mattn_jp/status/316948480788680704 何かしらの言語を取り入れるという事は、vimスクリプトでないvimrc(exrc)を含むvim scriptを解釈出来る処理系と、その追加言語の処理系を2重で管理する事になります。おそらく現状のvimrcが記述出来なくなる事に猛反発を食らうのは絶対で、だったらなおさらトランスレータがいいという理由にも納得は出来るのですが、それをやるのは道のりが遠すぎる気がしてならないのです。
前者の解決策としてトランスレータもあると思いますが、あり得る方向としては 「vim scriptは廃止する。全ユーザにvimrcの記述を時期を見計らって捨ててもらう。それまではXXX言語と併用可能とする。」 という可能性しか無いんじゃないかと思っています。それにはおそらく数年以上のスパンが必要かなと思います。そして数年経てばluaよりも良い言語が出てきても可笑しくないとも思います。 それに比べて後者は、それほど突飛な変更でなければ結構パッチウェルカムな状態にあると思っています。 |
それは単に別issue立てるべきでは? |
@koron パフォーマンスチューニング案を押したいという訳でなく、一度 vim-dev に持ち込んで議論した方がいいかもしれないと思っています。深刻に思ってるの、おそらくvim script大好きな日本人くらいしかいないんじゃないの?って気もします。 |
日本人に多いのは確かですが、MarcWeber氏やYouCompleteMeの作者のVal Markovic氏、UltiSnips作者のHolger Rapp氏など現在のVim scriptに否定的な見方を持っている人は何人かいます。 最近だと、こういう記事もありました。 http://delvarworld.github.com/blog/2013/03/16/just-use-sublime-text/ Vim scriptを真面目に書いたことがある人があまりに少ないので少数派に見えるのかも知れません。
はい。私もそう思います。特にPyなんとかさんはランタイムが大きすぎるし互換性の問題があるのでデフォルト言語になることはないでしょうね。言語のユーザー数は圧倒的には多いので要望は強いですが。Emacs Lispがなくならないのも同様の理由からでしょう。
これは、何らかの原因によってBram氏がメイン開発者から降りれば可能になるかもしれません。ただ、様々な方面からの反発は避けられないことになるでしょう。Vimコミュニティが分断されてしまう気がしますね。何の言語を選ぶかはそれこそ、政治的な駆け引きがいろいろとあるでしょうし。
実は私としても、速度・機能的な面でVim scriptが改良されるなら、そちらのほうが望ましいと考えています。 私としてはBram氏のVim scriptに対する考えを聞きたいです。今後Vim scriptをどうしたいのか。
タイトルは過激だったですね。「今後のVim scriptをどうするのかについて検討する」くらいが妥当であったのかも知れません。 |
タイトル変更しました。 |
大前提として完全な廃止はVimとして無いと考えてます。なので現実的なラインとして
の2つが考えられる。 他の案がなければもうこのissueは閉じるべきだと考えますがいかがか? |
了解です。
はい。それ自体は問題ないです。ただ、Bram氏の考え自体はvim_devで一度聞いておきたいのですがどうでしょうか。 |
こんなThreadがあったので転載します。 why does VimL suck? |
.oO( リンク貼るのは転載じゃないす) |
Oh……。 |
itchnyさんの記事、こちらにもリンクを貼っておきます。 |
議論の結果、方向性が2つに集約され、それぞれに issue が作られました。
よって本件は duplicated とします。 |
現在Vim scriptには、効率やライブラリ不足の問題、オブジェクト指向・無名関数・Bool型などの近代的プログラミング言語に存在する機能の欠如の問題、Vim scriptプログラマーの不足問題があります。
これを根本的に解決するには、KoRoNさんが言うように、Vim scriptを段階的に廃止するしかないのかもしれません。
代替言語としてLuaやPythonなどが挙げられています。
特にLuaは速度も早く、組み込み用として使われているため、Vimに組み込む言語としては理想的かもしれません。
もしこれが実現するとすれば、LuaのソースコードをVimに同梱するような方式になるのではないかと思われます。
もちろん機能を無効化できますが、標準的には有効化されるのが理想です。
The text was updated successfully, but these errors were encountered: