ToDo:
http://k0kubun.hatenablog.com/entry/hescape
あまり人の書いたものについてどうこう言いたくないし言ってもしょうがないし、飲み会で言うとかはともかくわざわざ書いたりもしないのだけど…もやもやするので言いたくなってしまった。別に自分のアプリで使ってるとかならどうでもいいんだけど、ruby gemになっちゃってるあたりと、なんとなく見てみるとはてぶたくさんついててかつ誰もコード読んでないぽいあたりで、もやもやが。特に後者
https://github.com/k0kubun/hescape
きちんと確認してないので、間違ってることもあるかもしれないです、が、一番ウーン、、、とおもった点を書いていきます。間違ってることがあると申し訳ないですが
ここからはより主観的かつnitpickな項目が多くなっちゃうのだけど、以下のような理由で上記のような点を修正すればOK、という気持ちになりにくいなあ…と思った
あとなんだろう。HTML_ESCAPE_TABLEていうデータがあるんだけど、これ本当に速いんだろうか。。とか、気になることはまだあった気がする
(14:28)
この手の雑さ、気に入らないというよりむしろ親しみが持てる部分が多いというか、僕が適当に書いたコードはこういう感じになってることが多くて、しかも実際そのままほっておいたりするので、心苦しい
(16:34)
前 | 2016年 8月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
> find_escape_fastの修正の仕方も気にいらないというか、変化してる変数が3つになってて正直わけがわからない
この部分、picohttpparserだと意図的にそうしています。というのは、呼出元 (https://github.com/h2o/picohttpparser/blob/master/picohttpparser.c#L146) を見てもらえばわかるのですが、found と buf は返す必要ある(つまり変化する変数が2つはある)状態で、かつ、buf と buf_end の値を変えないままループカウントだけを減らしていく必要があると考えるからです。
変数の数を減らすことはもちろんできると思いますが、処理をループしないケースにむけて最適化すべきコードなので、そこを頑張るメリットがあるかは疑問です。
ただ、hescapeでの使い方は、picohttpparser のようにバイト毎で判断するコードの直前にSSEで書かれたスキップ用コードを差し込む、というきれいなものではないので、まあ...
すいません
https://github.com/k0kubun/hescape/commit/595fec241bbd260a68b42c435ac35575029108ca#commitcomment-18646207
で提案されてたコードをローカルでパッチした状態で眺めていました。3つ、というのはi,buf,lenの3つに16を足したり引いたりしてる状況を見て書いていました。現実に行なわれた変更は
https://github.com/k0kubun/hescape/commit/356c8878f6bb4acd5a1d2f9711b3450afce9d0e3
なので、僕の感覚ではpicohttpparser同様特に気にならないコードでした。
> https://github.com/k0kubun/hescape/commit/e04b6f8c4a60c765f2eaf78f409b6f3d6ecef27c のパッチ
懸念は理解できるんですが、これ手元のHaswellで−O3にしたら速くなったんですよね。まぁそもそもfind_escape_fastを速くすれば必要なくなると思いますが。
> あとfind_escape_fastの修正の仕方も気にいらないというか、
わたしだったらbufとbuf_curとbuf_endにして変化する変数減らすけど、まぁバグを直した後の改善は自分でやって欲しかったのだ。
> HTML_ESCAPE_TABLEていうデータがあるんだけど、これ本当に速いんだろうか。。
今だとswitchの方が速いんじゃないかなと思うけど、この辺もstr_blankの例を見つつがんばって欲しいなと思いました。
https://bacsitructuyen.net