読者です 読者をやめる 読者になる 読者になる

Atom のカーソル上下移動を改良するパッケージを作った

JavaScript プログラミング

相変わらず Atom の環境を整備し続けています.

というわけでまたパッケージを作りました.

atom.io

カーソルを上下に動かしたとき, デフォルトではこんな感じに全角文字などが間に入るとカーソルの水平位置がぐちゃぐちゃと動いてしまいます.

f:id:susisu:20170320185200g:plain

この動作を修正して見た目通りの位置に移動させるというものです.

f:id:susisu:20170320185204g:plain

ちなみに Sublime Text はデフォルトで修正後のような動作です. やりますね.

パーサコンビネータを高速化した

JavaScript プログラミング

例のアレです. 式年遷宮したときの話はこちら.

github.com

最初は軽い気持ちで細々とした最適化をしていたんです.

ちなみにどう最適化するかというと V8 のプロファイラを使って適当に遅そうなところに目星をつけて色々試します.

そんなこんなで Parsimmon*1 より妙に遅い原因を探していたら, ap, left, right (Parsec*2 でいうところの <*>, <*, *>) の実装の効率が悪く, これが主な原因であることがわかりました.

その後, 比較用の JSON パーサ実装を (Parsimmon のものと同等になるように) 改良した結果がこれです.

このあたりで長いこと不明だった諸悪の根源を見つけられてほぼ満足していますが, さらに細々とした最適化を続けました.

処理系によりそうな話になってきたのでこのへんで終わり.

以上です.

*1:先行の JS のパーサコンビネータライブラリ https://github.com/jneen/parsimmon

*2:Haskell のパーサコンビネータライブラリ https://github.com/aslatter/parsec/ 機能はほぼこれのパクリ