WASMかN-APIで書いたら
“「正規表現エンジンのオーバーヘッド……許せねぇ……!」”気持はわかるけど実装しちゃうかなwめんどくさいを排除するためにどんなにめんどくさい事も厭わないソフトウェアエンジニアあるある
解決する問題を絞ることで仮定を作って最適化する。一般から特殊に解法をフォーカスさせる。お手本だ。
多分素直な数値比較が最速のはず
失敗の共有素晴らしい、そう、爆速にこだわるなら、言語の選定から間違えている
“……あれ? このコードを書くのに調べ物含めて 12時間 かかっているのですが、この 0.15秒 のリターンで投資を回収するには、一体何回このスクリプトを回せば”、趣味だからこういうのが楽しいのでしょう
それを半角と呼んでしまうのは危うい
言語変えた方が早くない?
比較と変わらないのはそれはそう、結局引き算するだけだしビット演算と対してコストは変わらない
Java……Script……???でもこういうスタイルは好き
記事もコードもAIで書いてんのに12時間もかかるわけないと思うんだが…
「正規表現で /[^\x20-\x7E]/ とか使えば一発じゃん」→そんなわけないよな、と思ったら、そんなわけなかった。むしろこんなシンプルな判定に正規表現を使う気はしないくらいだが、JavaScriptだからか意外に差がないんだな。
“正規表現の落とし穴:\xA1-\xDF では半角カタカナを判定できない”
数GBのログか。以前Perlで書いたら死ぬほど遅くてJavaで書いたら一瞬だったからNode.jsも一瞬だろう。でも良いと思う。
興味深い
たのしそうでよかった。プログラミングのおもしろさだね~。
10円安い商品のために隣町まで車で行くような話
個別最適を実装してるときが一番楽しい。/ネットメディアに書いてもらったら見出しは「3倍超の速度アップに成功!」となり、最後に標準ライブラリは何をやってるのか的な批判で終わるんやろなぁ。
楽しそう
前世紀の頃、SJISとJISとEUCでそれぞれマルチバイト判定をどうするかみたいなのは割とあるあるなテーマだった気がする。(まだUTF-8は一般的じゃなかった)
isascii()使えば良くね? と思ったらJava scriptなのね。
ウケた「実務で使ったらコードレビューで燃やされます」
楽しそうだし、この経験が血肉となる。敢えて指摘すると、1文字の判定なら大多数が普通に数値比較で書くと思う。ビット演算結果を結局"比較"してることに気付こう。ちな、[\xA1-\xDF]はSJISの場合。
UUIDの比較に文字列そのままでやってて遅いっていうやつですね。あれはいったん数値に変換して比較するんですよ。
ちゃんと速くできててすごい(学生のころ文字列探索アルゴリズムの講義があった後に find | xargs grep 的なコマンドがもっと早くならんかと機能を絞った grep を C でナイーブに書いたらアホみたいに遅かった思い出(隙自語
数値比較版と「同じ」「ほぼ同じ」「変わらない」と書いてるけど、数値比較版の方が速いじゃん
まあでもこういうのが血肉になるよね
面白い実験だけど、Unicodeは半角/全角に二分できないし、実装例は制御文字も半角扱いになる点に注意。素直な範囲比較がよさげ。
一文字ずつ判定したらそりゃ正規表現は遅いだろうけど正規表現の強みはそこにはない
エンジニアには、楽する為にはどんな努力も惜しまないと言うバグが実装されている。
ビット演算使って全角半角判定できるならSIMD使えるかもしれないなと思いました。 / あ、JavaScriptか。失礼しました
Ä(U+00C4)を全角扱いしていいというのなら、もう、その半角ってのはU+007F以下だけを指定する言葉になっているだけなので、あとは蛇足でしかないんじゃないかなあ…
楽しそうだからブクマ
「正規表現が0.002ミリ秒遅かった」という理由だけで、全角/半角判定をすべて『ビット演算』で実装した話 - Qiita
WASMかN-APIで書いたら
“「正規表現エンジンのオーバーヘッド……許せねぇ……!」”気持はわかるけど実装しちゃうかなwめんどくさいを排除するためにどんなにめんどくさい事も厭わないソフトウェアエンジニアあるある
解決する問題を絞ることで仮定を作って最適化する。一般から特殊に解法をフォーカスさせる。お手本だ。
多分素直な数値比較が最速のはず
失敗の共有素晴らしい、そう、爆速にこだわるなら、言語の選定から間違えている
“……あれ? このコードを書くのに調べ物含めて 12時間 かかっているのですが、この 0.15秒 のリターンで投資を回収するには、一体何回このスクリプトを回せば”、趣味だからこういうのが楽しいのでしょう
それを半角と呼んでしまうのは危うい
言語変えた方が早くない?
比較と変わらないのはそれはそう、結局引き算するだけだしビット演算と対してコストは変わらない
Java……Script……???でもこういうスタイルは好き
記事もコードもAIで書いてんのに12時間もかかるわけないと思うんだが…
「正規表現で /[^\x20-\x7E]/ とか使えば一発じゃん」→そんなわけないよな、と思ったら、そんなわけなかった。むしろこんなシンプルな判定に正規表現を使う気はしないくらいだが、JavaScriptだからか意外に差がないんだな。
“正規表現の落とし穴:\xA1-\xDF では半角カタカナを判定できない”
数GBのログか。以前Perlで書いたら死ぬほど遅くてJavaで書いたら一瞬だったからNode.jsも一瞬だろう。でも良いと思う。
興味深い
たのしそうでよかった。プログラミングのおもしろさだね~。
10円安い商品のために隣町まで車で行くような話
個別最適を実装してるときが一番楽しい。/ネットメディアに書いてもらったら見出しは「3倍超の速度アップに成功!」となり、最後に標準ライブラリは何をやってるのか的な批判で終わるんやろなぁ。
楽しそう
前世紀の頃、SJISとJISとEUCでそれぞれマルチバイト判定をどうするかみたいなのは割とあるあるなテーマだった気がする。(まだUTF-8は一般的じゃなかった)
isascii()使えば良くね? と思ったらJava scriptなのね。
ウケた「実務で使ったらコードレビューで燃やされます」
楽しそうだし、この経験が血肉となる。敢えて指摘すると、1文字の判定なら大多数が普通に数値比較で書くと思う。ビット演算結果を結局"比較"してることに気付こう。ちな、[\xA1-\xDF]はSJISの場合。
UUIDの比較に文字列そのままでやってて遅いっていうやつですね。あれはいったん数値に変換して比較するんですよ。
ちゃんと速くできててすごい(学生のころ文字列探索アルゴリズムの講義があった後に find | xargs grep 的なコマンドがもっと早くならんかと機能を絞った grep を C でナイーブに書いたらアホみたいに遅かった思い出(隙自語
数値比較版と「同じ」「ほぼ同じ」「変わらない」と書いてるけど、数値比較版の方が速いじゃん
まあでもこういうのが血肉になるよね
面白い実験だけど、Unicodeは半角/全角に二分できないし、実装例は制御文字も半角扱いになる点に注意。素直な範囲比較がよさげ。
一文字ずつ判定したらそりゃ正規表現は遅いだろうけど正規表現の強みはそこにはない
エンジニアには、楽する為にはどんな努力も惜しまないと言うバグが実装されている。
ビット演算使って全角半角判定できるならSIMD使えるかもしれないなと思いました。 / あ、JavaScriptか。失礼しました
Ä(U+00C4)を全角扱いしていいというのなら、もう、その半角ってのはU+007F以下だけを指定する言葉になっているだけなので、あとは蛇足でしかないんじゃないかなあ…
楽しそうだからブクマ