Movatterモバイル変換


[0]ホーム

URL:


Ryoma Sin'ya, profile picture
Uploaded byRyoma Sin'ya
PDF, PPTX11,595 views

世界最速の正規表現JITエンジンの実装

3/26(月)サイボウズ・ラボユース 最終成果報告会での資料です。http://atnd.org/events/26861実装詳細 → http://www.slideshare.net/sinya8282/ss-12170832

Embed presentation

Download as PDF, PPTX
世界最速の正規表現                        JITエンジンの実装                         Ryoma Sin’ya (@sinya8282)                       サイボウズ・ラボユース最終成果報告会                         2012/3/26 at 秋葉原ダイビルMonday, March 26, 12
皆さん                       正規表現は                       お好きですか?Monday, March 26, 12
僕は正規表現が            好きじゃありませんMonday, March 26, 12
僕は正規表現が            好きじゃありません                        愛してますMonday, March 26, 12
% whoami • 新屋                  良磨 (@sinya8282)      • 東京工業大学修士一年      • 一期生では最年長           • 精神は林君が最年長説      • 好きな表現は正規表現      • 好きな言語は正規言語      • 好きな曲はMonday, March 26, 12
% whoami • 新屋                  良磨 (@sinya8282)      • 東京工業大学修士一年      • 一期生では最年長           • 精神は林君が最年長説      • 好きな表現は正規表現      • 好きな言語は正規言語      • 好きな曲は            • Regular     Expression                (by Broken Drum)Monday, March 26, 12
サイボウズ・ラボユース                     ではなにを?             • 正規表現エンジンの実装,             高速化                       • DFAをJITして高速化 (実行時コード生成)                       • オートマトンのデータ並列実行による高速化             • 正規表現を利用したツール/システムの開発                  • テキスト検索(grep)                  • 正規表現変換ツール                  • 正規表現の拡張演算子等             • エンジンはgithubで公開        → Regen(レーゲン)Monday, March 26, 12
なぜ正規表現エンジン?             • 正規表現の歴史は古い。種類(亜種)も多い            I define UNIX as “30 definitions of regular              expressions living under one roof.” — Don Knuth             • 実装も多い(本当に多い)                  • GNU   grep, Google RE2, 鬼車, PCRE, TRE,,,,             • 車輪の再発明?Monday, March 26, 12
なぜ正規表現エンジン?             • 正規表現の歴史は古い。種類(亜種)も多い            I define UNIX as “30 definitions of regular              expressions living under one roof.” — Don Knuth             • 実装も多い(本当に多い)                  • GNU   grep, Google RE2, 鬼車, PCRE, TRE,,,,             • 車輪の再発明?          そうだね。ただし最速の車輪だ。— Ryoma Sin’yaMonday, March 26, 12
なにが最速?             • 「正規表現マッチング」が最速             • 「DFAの状態遷移」が最速       (Not文字列探索)                  • DFAをJITすることで状態遷移を高速化                  • データ並列マッチングをサポート             • なにと比較して?                  • GoogleRE2, GNU grep, cgrep 等のDFAベースエン                       ジンと比較して高速(RE2の6~10倍)Monday, March 26, 12
なにが最速?             • 「正規表現マッチング」が最速             • 「DFAの状態遷移」が最速       (Not文字列探索)                  • DFAをJITすることで状態遷移を高速化                  • データ並列マッチングをサポート             • なにと比較して?                  • GoogleRE2, GNU grep, cgrep 等のDFAベースエン                       ジンと比較して高速(RE2の6~10倍)                          詳細はポスターにも!!Monday, March 26, 12
並列化と実行時コード生成を用いた                                                                                                                                                                                                                                                             正規表現エンジン「Regen」                                                                                                                                                                                                                                                                                                                    :                             正規表現マッチングの高速化                                                                                                                                                                                                                                                                &そのツール群の紹介                                                                                新屋 良磨 †                                光成 滋生 †† 佐々 政孝 †                                                                                                                                                                   Regen でサポートしてる正規表現の拡張演算子, 及びツール群を紹介する.                                                                                † 東京工業大学 †† サイボウズ・ラボ株式会社                                                                                                                                                                                                  課題や機能についてなど, 多くの意見が聞きたい.                                   我々は並列化と実行時コード生成を用いた高速な正規表現エンジン Regen を開発した.                                                                                                                                                                                                                拡張演算子                                   Regen における設計方針や特長を紹介し, 既存実装との違いを説明する.                                                                                                                                                                                                                                                                                                  ✦ 積集合                               ✦ 弱後方参照                  Regenのマッチング内部動作                                                                                                                                                                                                                                                                  •   /R1 &R2 /→ R1とR2両方にマッチ          •PCRE等で使える後方参照の制限版                                                                                                                                                                                                                                                                                                  ✦ 対称差                                •有限パターンの参照なら区別できる.                                                                                                                                                                                                                                                                                                   •/R1&&R2/→R1かR 一方のみにマッチ             •/(1|2|30?) = (1)/ → 恒等式                                                                                       [01]                       1                                                                          0                               1                                                                                                  NFA                                                                                                   DFA                                                                                                                                                                                                                                                                                                                                       •無限パターン(繰り返し)は区別しない.                                                                                                                                                                                                                                                                                                                      2                                                                                                       1                                                                                                                                        変換                                                                                                                                                                                                          1                                                                                                                                                                                                                                                                                                  ✦ 補集合                                                                                                                                                                                                                                                                                                   •/!(R1)/→R1 にマッチしない列にマッチ            •/(1|2+) = (1)/ →/1 = 1|2+ = 2 + /                                                                                        q0                        q1                                                                         q0                              q1                                                                                                       0                                                                                                  0                                                                パース&変換                                                                                                                                                                   JIT (Χbyak)                                           正規表現                                                                   変換                                                     変換                                                                                                                       ✦ 逆順                                ✦ 上限付き再帰                   /(0 ⇤ 1) + /                                                                                                                                                    0                                                                                                                                                                                                                                                                                                   •/ ⇠ (R1)/→R1のマッチ文字列の逆文字列 •PCRE等で使える再帰(?R)の制限版                                                                                                                                                                                                                                                                                                                             •/a@b@c/→“aabcbabcc”                                                                                                                                                                               1                                                                                                                                                                                                                                        文字列に対して                                                   ✦ 置換, シャッフル, 非強欲な繰り返し...                                                                                                                                                                                                                                                                                                   •紹介してる演算全てDFAで実現          •/(@{0, 2})/→ “()”, “(())”, “((()))”                                                                                                                                                    q1       1                                                                                                                         0                                   0                 q2                      JIT                              マッチング開始                                                                                                                                                    1                                                (Χbyak)                                入力: 正規表現&文字列                                                                                                                  q0                                                                                                                               SSFA (並列実行可能なDFA)                                                                                                                                         正規表現から受理文字列出力                               正規表現からDFA(図)出力                                                                                                                                                                                                                                                                                                                                                                        1                   Regen内部のコード生成(JIT)部抜粋                                                                                                    コード生成(JIT)による性能向上                                                                                                                                     Example: 論理式を充足する解を全列挙                                          q7                                                                                                                                                                                                                                                                                                                                                              0         2                                                                                                                                                                 Google RE2                                            Regen                     Regen JIT                                             (x1 _ x2 _ x3 ) ^ (x1 _ x2 _ x3 )                      1                                                                                                                                                                                                                                                                                                                                                              3   q9                                                                                                                                                                                                                                                                                                                                                                        0                                                                                                                                                                                                                                                                                                                                                                            q12                                                                                                                                                                                                                                                                                                                                                         q4                                                                                                                                                         3GB/sec                                                                                                                                                                                                        3                                                                                                                                                                                                                              Fast                                                                                                                            2                                                                                                                                                                                                                                                                                                                                                                                  2                                                                                                                                       Throughput                                                                                                                                                    2.5GB/sec                                                                                                                                                                                                           2                                                                                                                                                                                                                                                                                                                                                     3                                                                                                                                                         2GB/sec                                                                                                                                                                                              3   q10                                                                                                                                                                                                                                                                                                                                                                        0                                                                                                                                                                                                                                                                                                                                                                            q13                                                                                                                                                                                                                                                                                                                                                                                  1                                                                                                                                                    1.5GB/sec                                                                                                                                                                                        0                                                                                                                                                                                                                                                                                                                                                         q1                                                                                                                                                                                                                                                                                                                                                              1         3             q15                                                                                                                                                                                                                                                                                                                                                                                  0                                                                                                                                                         1GB/sec                                                                                                                                                                                q0   1        0   q5    1                                                                                                                                                                                                                              Slow                                                                                                                       q2                                                                                                                                                                                                                                                                                                                                                                            q14                                                                                                                                                    0.5GB/sec                                                                                                                                                                                                 2                   3                                                                                                                                                                                                                                                                                                                                正規表現で                                                                                                                                                                                                                                                                                                                                                     2                  2                                                                                                                                                                                                                                                                                                                                                              3                                                                                                                                                         0GB/sec                                                                                                                                                                                                        3                                                                                                                                                                               最適化が効かないパターン                                             最適化が効くパターン                                                                              SATを解く!                           q6                                                                                                           C++ JIT Library                                                      /(([02468][13579]){5})*/                                 /(0123456789)*/                                                                                                 q3   2                                                                                                                                                                                                                                                                                                                                                                            q11                                                                                                                                                                                                                                                                                                                                                                        1                                                                                                             Χbyak                                                                                                                                                                                                                                            0   q8                                                                                                                                                                                                                                                                                                                                                                        0                   並列マッチングによる性能向上                                                                                                              並列化のオーバーヘッド                                                                                                                                                                                                    1                                                 正規表現: /([0-4]{5}[5-9]{5})*/, 入力: 1GB                                                                       正規表現: /(([02468][13579]){5})*/, 入力: 100KB~1000KB                                                                                                                                                                                                                                                                                             実装済みツール群                                今後の課題                           [GB/sec]                                                                                                                                                                                                                                                                                                  ✦ 正規表現Lib: Regen                   ✦ 他アーキテクチャ対応                                                                                                                                                                                                                                                                                                   •                                  • 今はX86-64のみ(Χbyak)                                20                                                                                                                         Slow          ベンチマークA                     ベンチマークB                                                2.40 msec                                                                                                                                         8,000K                                                                                                                                                                                                                                                                                                     Google RE2 を参考                                                                                                                                                                                                                                                                                                   •                                  • LLVM? (抽象化で性能落ちない?)                                                                                                                  Fast                                                                                                                                       Google RE2                0.263                       0.264                               17.5                                                                                                      7,200K                                                                                                                         Clock Cycle                                                                                                                                                                                                                                                                                                     Submatch 未対応                                                                                                                                       Regen O0                                      0.449                     0.448                                                                                                                                                                                                                                                            1.92 msec                  Throughput                                15                                                                                                       6,400K                                                                                                                                       Regen O3                                      1.521                     2.761                                                                                                                                           5,600K                                                                                                                                                                                                                                                                                                  ✦ 正規表現変換系: recon                   ✦ Submatch(キャプチャ)の対応                                                                                                                                                                                                                                                                                                   •                                  • 現在でもマッチした文字列全体の取得は可能.                               12.5                                                                                                                                                                                                                         1.44 msec                                                                                                                                           4,800K                                10                                                                                                                                                                                                                                                                   正規表現 to 正規表現                                                                                                                                                                                                                                                                                                   •                                  • マッチした文字列の部分的な取得は未対応                                                                                                                                           4,000K                                                                                                                                                                                                                                                            0.96 msec                                                                                                                                                            Fast                                                                                                                                                                                                                                                                                                     正規表現 to DFA(図)                                7.5                                                                                                        3,200K                                                                                                                                                                                                                                                                                                   •                                                                                                                                           2,400K                                                                                                                                                                                                                                                                                                     正規表現 to 受理文字列                   ✦ 性能を生かしたツール/システムの考案                                   5                                                                                                                                                                                                                        0.48 msec                                                                                                                                           1,600K                                2.5                                                                                                                  Slow                         800K                                                                                                                                                                                                                                                                                                    grep: regengrep                                                                                                                                                                                                                                                                                                  ✦                                                                                                                                                                                                                                                                                                   •                                   0                                                                                                                0K                                                                                                                                                                                                                                                            [KB]                                                                                                                                                                                                                                                                                                     JIT版は高速.                                                                                                                                                           100           200        300          400      500          600        700    800   900   1000                                       1                2           3            4                5           6                                                                                                                                                                                                                                                                                                   •                                                                                                                                                                                                        Input size                                                             Number of Threads                                                       Regen              Regen JIT                   Read only                                                                                                                                                                                    1スレッド                                                                                                                                                                                    1スレッドJIT                                                                                                                                                                                                                             2スレッド                                                                                                                                                                                                                             2スレッドJIT                                                                                                                                                                                                                                                                                                     まだ開発中(速度,機能)                                                                                                                                                                                                                                                                        Thursday, January 5, 12      Thursday, January 5, 12                       1                   2            3           4            5            6gen                        0.449               0.897        1.327       1.759        2.236        2.681      Monday, March 26, 12gen JIT                    2.321               4.550        6.917       9.167        11.27                                                                                     Text         13.59ad                         6.041               12.11        16.60       18.37        18.89        19.17
実装の詳細は色々なとこで             • 「並列化と実行時コード生成を用いた正規表現                 マッチングの高速化」                  •    日本ソフトウェア科学会第28回大会 (書き直し中)                  •    第53回プログラミング・シンポジウム - 予稿, ポスター             • 「正規表現とJITと並列化とベンチマーク」                  •    x86/x64最適化勉強会1 - スライド             • 「正規表現の限界」                  •    Shibuya.pm ~夏の正規表現祭り~ - スライドMonday, March 26, 12
実装の詳細は色々なとこで             • 「並列化と実行時コード生成を用いた正規表現                 マッチングの高速化」                  •    日本ソフトウェア科学会第28回大会 (書き直し中)                  •    第53回プログラミング・シンポジウム - 予稿, ポスター             • 「正規表現とJITと並列化とベンチマーク」                  •    x86/x64最適化勉強会1 - スライド             • 「正規表現の限界」                  •    Shibuya.pm ~夏の正規表現祭り~ - スライド                        じゃあ今日はなにを喋る?Monday, March 26, 12
オリジナルな成果  • DFA-JITによる正規表現マッチングの高速化       • JIT特有の最適化等  • データ並列マッチングによる高速化       • オートマトンを拡張  • 正規表現の拡張演算の提案/実装       • 弱後方参照,        上限付き再帰, 非強欲繰り返し(DFAver)Monday, March 26, 12
オリジナルな成果  • DFA-JITによる正規表現マッチングの高速化       • JIT特有の最適化等  • データ並列マッチングによる高速化       • オートマトンを拡張  • 正規表現の拡張演算の提案/実装       • 弱後方参照,        上限付き再帰, 非強欲繰り返し(DFAver)                        全部喋りたい...Monday, March 26, 12
正規表現エンジン                       開発過程を時系列でMonday, March 26, 12
正規表現エンジン                       開発過程を時系列で 2011年       3月 4            5   6   7   8   9   10   11   12Monday, March 26, 12
上京。                          正規表現エンジン                         この時、正規表現(DFA)をJIT                       開発過程を時系列で                        する方法で悩んでいた。                       (自前, gcc, asm, llvm, libjit, gnu lightning...) 2011年       3月 4               5      6      7     8      9     10     11    12Monday, March 26, 12
ラボユース採択(神タイミング)。                        正規表現エンジン                       開発過程を時系列で 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
C++製JITライブラリXbyakで                        正規表現エンジン                         正規表現JIT。動いた。                       開発過程を時系列で                       ・X86最適化の権化、光成さんの                        熱血指導の賜物? 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
DFA-JIT                       C++製JITライブラリXbyakで                        正規表現エンジン                         正規表現JIT。動いた。                       開発過程を時系列で                       ・X86最適化の権化、光成さんの                        熱血指導の賜物? 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
DFA-JIT                         エントリー           (レジスタ調整,初期状態へジャンプ)                                      状態コード詳細 (24 Byte)                        C++製JITライブラリXbyakで                       状態0のコー                           正規表現エンジン                           正規表現JIT。動いた。                       状態1のコー     cmp    rdi,rsi #終端判定                        je     0x120005030                         開発過程を時系列で                        movzx  r10,BYTE PTR [rdi]               ・X86最適化の権化、光成さんの                        inc    rdi             状態遷移テーブル                熱血指導の賜物?jmp    QWORD PTR [rdx                        +r10*8]    •コード生成は JIT ライブラリ Χbyak を使用. 2011年   3月      •4 5 サイボウズ・ラボ 光成氏が開発.12       Χbyak:              6 7 8 9 10 11Monday, March 26, 12
C++製JITライブラリXbyakで                        正規表現エンジン                         正規表現JIT。動いた。                       開発過程を時系列で                       ・X86最適化の権化、光成さんの                        熱血指導の賜物? 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
正規表現のデータ並列マッチン                        正規表現エンジン                       グを実装。(オートマトンを拡張)                       開発過程を時系列で                       ・巨大なテキストの全体マッチング                        では台数効果が見込める。                           (詳細はポスターで) 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
データ並列マッチング                       正規表現のデータ並列マッチン                        正規表現エンジン                       グを実装。(オートマトンを拡張)                       開発過程を時系列で                       ・巨大なテキストの全体マッチング                        では台数効果が見込める。                           (詳細はポスターで) 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
データ並列マッチング                       マッチングの並列化 = 状態遷移の並列化                   a q1 b q3 a q1 a q2                 正規表現のデータ並列マッチン                q0                   正規表現エンジン                 グを実装。(オートマトンを拡張)                •このような状態遷移を                       開発過程を時系列で                       ・巨大なテキストの全体マッチング                                  a                          a ? b 結果1  a                        では台数効果が見込める。                        ?                           (詳細はポスターで)   q2                         ?   ?   結果2 2011年     •のように文字単位で並列に実行   3月 4 5  6 7 8  9 10                   11   12Monday, March 26, 12
正規表現のデータ並列マッチン                        正規表現エンジン                       グを実装。(オートマトンを拡張)                       開発過程を時系列で                       ・巨大なテキストの全体マッチング                        では台数効果が見込める。                           (詳細はポスターで) 2011年       3月 4             5   6   7   8   9   10   11   12Monday, March 26, 12
最適化、議論、実装、                           正規表現エンジン                           イベント、論文、学会....。                         開発過程を時系列で                       ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)                       ・x86/x64最適化勉強会1  (thanks! 光成さん)                       ・日本ソフトウェア科学会第28会大会@沖縄 2011年       3月 4                5    6   7    8     9     10   11   12Monday, March 26, 12
最適化、議論、実装、                           正規表現エンジン                           イベント、論文、学会....。                       ・夏休み(学生)ということで、週3で                         開発過程を時系列で                       ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)                        サイボウズ・ラボに出勤。開発。                       ・x86/x64最適化勉強会1 (thanks! 光成さん)                       ・ラボメンバーさんとの議論が楽しい!!!                       ・日本ソフトウェア科学会第28会大会@沖縄                       ・最適化/並列化/新機能等々,,, 色々 る。 2011年       3月 4                5    6   7    8   9    10   11    12Monday, March 26, 12
ひたすら正規表現                       正規表現エンジン                         と戯れる。                       開発過程を時系列で 2011年       3月 4            5   6   7   8   9   10   11   12Monday, March 26, 12
ひたすら正規表現                         正規表現エンジン                          と戯れる。                        開発過程を時系列で                       ・正規表現の新しい演算を考える等(ポスター) 2011年       3月 4               5   6   7   8   9   10   11   12Monday, March 26, 12
✦ 弱後方参照           •有限パターンの参照なら区別できる.                ひたすら正規表現           •/(1|2|30?) = (1)/ → 恒等式                 正規表現エンジン           •無限パターン(繰り返し)は区別しない.                     と戯れる。 = 2 + /               開発過程を時系列で           •/(1|2+) = (1)/ →/1 = 1|2+                       ・正規表現の新しい演算を考える等(ポスター)     ✦ 上限付き再帰    •/a@b@c/→“aabcbabcc” 2011年    •/(@{0, 2})/7→ “()”, 9 10 “((()))”   3月 4  5    6       8    “(())”, 11 12Monday, March 26, 12
ひたすら正規表現                         正規表現エンジン                          と戯れる。                        開発過程を時系列で                       ・正規表現の新しい演算を考える等(ポスター) 2011年       3月 4               5   6   7   8   9   10   11   12Monday, March 26, 12
2012年       1月 2            3Monday, March 26, 12
ポスター発表。                       ・第53回プログラミング・シンポジウム                        「並列化と実行時コード生成を用いた                         正規表現マッチングの高速化」                        → 入り口にあるポスターです。 2012年       1月 2               3Monday, March 26, 12
grepの実装。                       ・grep高速化のための機能追加                       ・固定文字列探索の高速化等(未完成)                       ・ライブラリAPIを整理し始める(ようやく) 2012年       1月 2               3Monday, March 26, 12
なう。 2012年       1月 2            3Monday, March 26, 12
正規表現エンジン                                Regen                           githubで開発中!!                            http://github.com/sinya8282/regen 2012年       1月 2            3Monday, March 26, 12
正規表現エンジン                                Regen                           githubで開発中!!                            http://github.com/sinya8282/regen 2012年       1月 2            3                                 そして伝説へ....Monday, March 26, 12
サイボウズ・ラボユース                     ではなにを?(再)             • 正規表現エンジンの実装,           高速化                           Regen                       • 「最速の車輪を。」→             • 正規表現を利用したツール/システムの開発Monday, March 26, 12
サイボウズ・ラボユース                     ではなにを?(再)             • 正規表現エンジンの実装,           高速化                           Regen                       • 「最速の車輪を。」→             • 正規表現を利用したツール/システムの開発                       そしてこれからは?         • 欠点も多い(実装で克服できる?)              • メモリ使用量,      制限(キャプチャ,,,), 苦手な正規表現,,,         • ライブラリを完成させにゃ...             (目標: Google RE2)         • 「文字列探索」以外にも正規表現を。(試行錯誤中)Monday, March 26, 12

Recommended

PDF
様々な全域木問題
PDF
[DL輪読会]Disentangling by Factorising
PPTX
ホモトピー型理論入門
byk h
 
PDF
カステラ本勉強会 第三回
PDF
【メタサーベイ】基盤モデル / Foundation Models
PDF
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PPTX
深層学習入門 スライド
PDF
スペクトラル・クラスタリング
PDF
Kaggle&競プロ紹介 in 中田研究室
PDF
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
 
PPTX
Map
PPT
整数列圧縮
PDF
コンピューテーショナルフォトグラフィ
PPTX
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
PDF
LLVM最適化のこつ
PDF
はじめてのKrylov部分空間法
PDF
機械学習モデルのハイパパラメータ最適化
PDF
MCC CTF講習会 pwn編
PDF
Re永続データ構造が分からない人のためのスライド
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
PDF
相関係数は傾きに影響される
PDF
最小カットを使って「燃やす埋める問題」を解く
PDF
PRML11章
PDF
An Internal of LINQ to Objects
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
勉強か?趣味か?人生か?―プログラミングコンテストとは
PDF
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
PDF
ラボユース最終成果報告会(Web公開版)
PPTX
中間成果報告会 発表資料

More Related Content

PDF
様々な全域木問題
PDF
[DL輪読会]Disentangling by Factorising
PPTX
ホモトピー型理論入門
byk h
 
PDF
カステラ本勉強会 第三回
PDF
【メタサーベイ】基盤モデル / Foundation Models
PDF
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PPTX
深層学習入門 スライド
様々な全域木問題
[DL輪読会]Disentangling by Factorising
ホモトピー型理論入門
byk h
 
カステラ本勉強会 第三回
【メタサーベイ】基盤モデル / Foundation Models
正規言語と代数と論理の対応:An Introduction to Eilenberg’s Variety Theorem
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
深層学習入門 スライド

What's hot

PDF
スペクトラル・クラスタリング
PDF
Kaggle&競プロ紹介 in 中田研究室
PDF
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
 
PPTX
Map
PPT
整数列圧縮
PDF
コンピューテーショナルフォトグラフィ
PPTX
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
PDF
LLVM最適化のこつ
PDF
はじめてのKrylov部分空間法
PDF
機械学習モデルのハイパパラメータ最適化
PDF
MCC CTF講習会 pwn編
PDF
Re永続データ構造が分からない人のためのスライド
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
PDF
相関係数は傾きに影響される
PDF
最小カットを使って「燃やす埋める問題」を解く
PDF
PRML11章
PDF
An Internal of LINQ to Objects
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
勉強か?趣味か?人生か?―プログラミングコンテストとは
PDF
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
スペクトラル・クラスタリング
Kaggle&競プロ紹介 in 中田研究室
【基調講演】『深層学習の原理の理解に向けた理論の試み』 今泉 允聡(東大)
 
Map
整数列圧縮
コンピューテーショナルフォトグラフィ
[DL輪読会]Swin Transformer: Hierarchical Vision Transformer using Shifted Windows
LLVM最適化のこつ
はじめてのKrylov部分空間法
機械学習モデルのハイパパラメータ最適化
MCC CTF講習会 pwn編
Re永続データ構造が分からない人のためのスライド
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
相関係数は傾きに影響される
最小カットを使って「燃やす埋める問題」を解く
PRML11章
An Internal of LINQ to Objects
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
勉強か?趣味か?人生か?―プログラミングコンテストとは
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用

Viewers also liked

PDF
ラボユース最終成果報告会(Web公開版)
PPTX
中間成果報告会 発表資料
PDF
Ruby × Arduinoで フィジカルコンピューティング やってみた
PDF
正規言語でプログラミング
PPTX
人が神姫ん感(原文ママ)を感じるコンピュータ
PDF
C-HelperでC言語を効率的に学習しよう
KEY
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
PDF
サイボウズ・ラボユース成果報告会
PPTX
サイボウズ・ラボ成果発表会
PPTX
Emnlp読み会資料
PPTX
EMNLP 2015 yomikai
PDF
Humor Recognition and Humor Anchor Extraction
PDF
星野「調査観察データの統計科学」第3章
PDF
Learning Better Embeddings for Rare Words Using Distributional Representations
PDF
星野「調査観察データの統計科学」第1&2章
PDF
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
PDF
A Neural Attention Model for Sentence Summarization [Rush+2015]
PDF
Kubernetes in 30 minutes (2017/03/10)
PDF
"Mix Automatic Sequences"(LATA'13) の紹介
PDF
正規表現++
ラボユース最終成果報告会(Web公開版)
中間成果報告会 発表資料
Ruby × Arduinoで フィジカルコンピューティング やってみた
正規言語でプログラミング
人が神姫ん感(原文ママ)を感じるコンピュータ
C-HelperでC言語を効率的に学習しよう
サイボウズ・ラボユース 最終成果報告会プレゼンテーション
サイボウズ・ラボユース成果報告会
サイボウズ・ラボ成果発表会
Emnlp読み会資料
EMNLP 2015 yomikai
Humor Recognition and Humor Anchor Extraction
星野「調査観察データの統計科学」第3章
Learning Better Embeddings for Rare Words Using Distributional Representations
星野「調査観察データの統計科学」第1&2章
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
A Neural Attention Model for Sentence Summarization [Rush+2015]
Kubernetes in 30 minutes (2017/03/10)
"Mix Automatic Sequences"(LATA'13) の紹介
正規表現++

Similar to 世界最速の正規表現JITエンジンの実装

PDF
Regular expressions à la carte
PPTX
Perlと出会い、Perlを作る
 
PDF
Write good parser in perl
PDF
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
PDF
Boost Tour 1.50.0 All
PDF
boost tour 1.48.0 all
PDF
文字列曖昧検索によるマルウェアバイナリ解析
PDF
Brief introduction of Boost.ICL
 
PDF
Brief introduction of Boost.ICL [PDF]
 
PDF
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
PDF
Levenshtein Automata
PDF
kyotovim#1
PDF
Rの高速化
ODP
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
PDF
ゆるいテキスト検索
PPTX
FINAL FANTASY Record Keeperを支えたGolang
DOCX
Prosym53
PDF
正規表現 入門
 
PDF
RubyKaigi2014: Just in Time compiler for CRuby
PDF
JavaScriptの正規表現
 
Regular expressions à la carte
Perlと出会い、Perlを作る
 
Write good parser in perl
PostgreSQL 9.2 新機能 - 新潟オープンソースセミナー2012
Boost Tour 1.50.0 All
boost tour 1.48.0 all
文字列曖昧検索によるマルウェアバイナリ解析
Brief introduction of Boost.ICL
 
Brief introduction of Boost.ICL [PDF]
 
萩野服部研究室 スキー合宿 2012 自己紹介(酒井)
Levenshtein Automata
kyotovim#1
Rの高速化
PostgreSQL 9.2 新機能 - OSC 2012 Kansai@Kyoto
ゆるいテキスト検索
FINAL FANTASY Record Keeperを支えたGolang
Prosym53
正規表現 入門
 
RubyKaigi2014: Just in Time compiler for CRuby
JavaScriptの正規表現
 

More from Ryoma Sin'ya

PDF
形式言語理論への 測度論的アプローチ
PDF
有限モデル理論入門:MSOとオートマトン
PDF
統語的曖昧性・普遍性判定問題の決定可能性
PDF
正規表現に潜む対称性 〜等式公理による等価性判定〜
PDF
A new technique for proving non regularity based on the measure of a language
PDF
正規表現入門 星の高さを求めて
PDF
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
PDF
並列化と実行時コード生成を用いた正規表現マッチングの高速化
形式言語理論への 測度論的アプローチ
有限モデル理論入門:MSOとオートマトン
統語的曖昧性・普遍性判定問題の決定可能性
正規表現に潜む対称性 〜等式公理による等価性判定〜
A new technique for proving non regularity based on the measure of a language
正規表現入門 星の高さを求めて
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
並列化と実行時コード生成を用いた正規表現マッチングの高速化

世界最速の正規表現JITエンジンの実装

  • 1.
    世界最速の正規表現 JITエンジンの実装 Ryoma Sin’ya (@sinya8282) サイボウズ・ラボユース最終成果報告会 2012/3/26 at 秋葉原ダイビルMonday, March 26, 12
  • 2.
    皆さん 正規表現は お好きですか?Monday, March 26, 12
  • 3.
    僕は正規表現が 好きじゃありませんMonday, March 26, 12
  • 4.
    僕は正規表現が 好きじゃありません 愛してますMonday, March 26, 12
  • 5.
    % whoami •新屋 良磨 (@sinya8282) • 東京工業大学修士一年 • 一期生では最年長 • 精神は林君が最年長説 • 好きな表現は正規表現 • 好きな言語は正規言語 • 好きな曲はMonday, March 26, 12
  • 6.
    % whoami •新屋 良磨 (@sinya8282) • 東京工業大学修士一年 • 一期生では最年長 • 精神は林君が最年長説 • 好きな表現は正規表現 • 好きな言語は正規言語 • 好きな曲は • Regular Expression (by Broken Drum)Monday, March 26, 12
  • 7.
    サイボウズ・ラボユース ではなにを? • 正規表現エンジンの実装, 高速化 • DFAをJITして高速化 (実行時コード生成) • オートマトンのデータ並列実行による高速化 • 正規表現を利用したツール/システムの開発 • テキスト検索(grep) • 正規表現変換ツール • 正規表現の拡張演算子等 • エンジンはgithubで公開 → Regen(レーゲン)Monday, March 26, 12
  • 8.
    なぜ正規表現エンジン? • 正規表現の歴史は古い。種類(亜種)も多い I define UNIX as “30 definitions of regular expressions living under one roof.” — Don Knuth • 実装も多い(本当に多い) • GNU grep, Google RE2, 鬼車, PCRE, TRE,,,, • 車輪の再発明?Monday, March 26, 12
  • 9.
    なぜ正規表現エンジン? • 正規表現の歴史は古い。種類(亜種)も多い I define UNIX as “30 definitions of regular expressions living under one roof.” — Don Knuth • 実装も多い(本当に多い) • GNU grep, Google RE2, 鬼車, PCRE, TRE,,,, • 車輪の再発明? そうだね。ただし最速の車輪だ。— Ryoma Sin’yaMonday, March 26, 12
  • 10.
    なにが最速? • 「正規表現マッチング」が最速 • 「DFAの状態遷移」が最速 (Not文字列探索) • DFAをJITすることで状態遷移を高速化 • データ並列マッチングをサポート • なにと比較して? • GoogleRE2, GNU grep, cgrep 等のDFAベースエン ジンと比較して高速(RE2の6~10倍)Monday, March 26, 12
  • 11.
    なにが最速? • 「正規表現マッチング」が最速 • 「DFAの状態遷移」が最速 (Not文字列探索) • DFAをJITすることで状態遷移を高速化 • データ並列マッチングをサポート • なにと比較して? • GoogleRE2, GNU grep, cgrep 等のDFAベースエン ジンと比較して高速(RE2の6~10倍) 詳細はポスターにも!!Monday, March 26, 12
  • 12.
    並列化と実行時コード生成を用いた 正規表現エンジン「Regen」 : 正規表現マッチングの高速化 &そのツール群の紹介 新屋 良磨 † 光成 滋生 †† 佐々 政孝 † Regen でサポートしてる正規表現の拡張演算子, 及びツール群を紹介する. † 東京工業大学 †† サイボウズ・ラボ株式会社 課題や機能についてなど, 多くの意見が聞きたい. 我々は並列化と実行時コード生成を用いた高速な正規表現エンジン Regen を開発した. 拡張演算子 Regen における設計方針や特長を紹介し, 既存実装との違いを説明する. ✦ 積集合 ✦ 弱後方参照 Regenのマッチング内部動作 • /R1 &R2 /→ R1とR2両方にマッチ •PCRE等で使える後方参照の制限版 ✦ 対称差 •有限パターンの参照なら区別できる. •/R1&&R2/→R1かR 一方のみにマッチ •/(1|2|30?) = (1)/ → 恒等式 [01] 1 0 1 NFA DFA •無限パターン(繰り返し)は区別しない. 2 1 変換 1 ✦ 補集合 •/!(R1)/→R1 にマッチしない列にマッチ •/(1|2+) = (1)/ →/1 = 1|2+ = 2 + / q0 q1 q0 q1 0 0 パース&変換 JIT (Χbyak) 正規表現 変換 変換 ✦ 逆順 ✦ 上限付き再帰 /(0 ⇤ 1) + / 0 •/ ⇠ (R1)/→R1のマッチ文字列の逆文字列 •PCRE等で使える再帰(?R)の制限版 •/a@b@c/→“aabcbabcc” 1 文字列に対して ✦ 置換, シャッフル, 非強欲な繰り返し... •紹介してる演算全てDFAで実現 •/(@{0, 2})/→ “()”, “(())”, “((()))” q1 1 0 0 q2 JIT マッチング開始 1 (Χbyak) 入力: 正規表現&文字列 q0 SSFA (並列実行可能なDFA) 正規表現から受理文字列出力 正規表現からDFA(図)出力 1 Regen内部のコード生成(JIT)部抜粋 コード生成(JIT)による性能向上 Example: 論理式を充足する解を全列挙 q7 0 2 Google RE2 Regen Regen JIT (x1 _ x2 _ x3 ) ^ (x1 _ x2 _ x3 ) 1 3 q9 0 q12 q4 3GB/sec 3 Fast 2 2 Throughput 2.5GB/sec 2 3 2GB/sec 3 q10 0 q13 1 1.5GB/sec 0 q1 1 3 q15 0 1GB/sec q0 1 0 q5 1 Slow q2 q14 0.5GB/sec 2 3 正規表現で 2 2 3 0GB/sec 3 最適化が効かないパターン 最適化が効くパターン SATを解く! q6 C++ JIT Library /(([02468][13579]){5})*/ /(0123456789)*/ q3 2 q11 1 Χbyak 0 q8 0 並列マッチングによる性能向上 並列化のオーバーヘッド 1 正規表現: /([0-4]{5}[5-9]{5})*/, 入力: 1GB 正規表現: /(([02468][13579]){5})*/, 入力: 100KB~1000KB 実装済みツール群 今後の課題 [GB/sec] ✦ 正規表現Lib: Regen ✦ 他アーキテクチャ対応 • • 今はX86-64のみ(Χbyak) 20 Slow ベンチマークA ベンチマークB 2.40 msec 8,000K Google RE2 を参考 • • LLVM? (抽象化で性能落ちない?) Fast Google RE2 0.263 0.264 17.5 7,200K Clock Cycle Submatch 未対応 Regen O0 0.449 0.448 1.92 msec Throughput 15 6,400K Regen O3 1.521 2.761 5,600K ✦ 正規表現変換系: recon ✦ Submatch(キャプチャ)の対応 • • 現在でもマッチした文字列全体の取得は可能. 12.5 1.44 msec 4,800K 10 正規表現 to 正規表現 • • マッチした文字列の部分的な取得は未対応 4,000K 0.96 msec Fast 正規表現 to DFA(図) 7.5 3,200K • 2,400K 正規表現 to 受理文字列 ✦ 性能を生かしたツール/システムの考案 5 0.48 msec 1,600K 2.5 Slow 800K grep: regengrep ✦ • 0 0K [KB] JIT版は高速. 100 200 300 400 500 600 700 800 900 1000 1 2 3 4 5 6 • Input size Number of Threads Regen Regen JIT Read only 1スレッド 1スレッドJIT 2スレッド 2スレッドJIT まだ開発中(速度,機能) Thursday, January 5, 12 Thursday, January 5, 12 1 2 3 4 5 6gen 0.449 0.897 1.327 1.759 2.236 2.681 Monday, March 26, 12gen JIT 2.321 4.550 6.917 9.167 11.27 Text 13.59ad 6.041 12.11 16.60 18.37 18.89 19.17
  • 13.
    実装の詳細は色々なとこで • 「並列化と実行時コード生成を用いた正規表現 マッチングの高速化」 • 日本ソフトウェア科学会第28回大会 (書き直し中) • 第53回プログラミング・シンポジウム - 予稿, ポスター • 「正規表現とJITと並列化とベンチマーク」 • x86/x64最適化勉強会1 - スライド • 「正規表現の限界」 • Shibuya.pm ~夏の正規表現祭り~ - スライドMonday, March 26, 12
  • 14.
    実装の詳細は色々なとこで • 「並列化と実行時コード生成を用いた正規表現 マッチングの高速化」 • 日本ソフトウェア科学会第28回大会 (書き直し中) • 第53回プログラミング・シンポジウム - 予稿, ポスター • 「正規表現とJITと並列化とベンチマーク」 • x86/x64最適化勉強会1 - スライド • 「正規表現の限界」 • Shibuya.pm ~夏の正規表現祭り~ - スライド じゃあ今日はなにを喋る?Monday, March 26, 12
  • 15.
    オリジナルな成果 •DFA-JITによる正規表現マッチングの高速化 • JIT特有の最適化等 • データ並列マッチングによる高速化 • オートマトンを拡張 • 正規表現の拡張演算の提案/実装 • 弱後方参照, 上限付き再帰, 非強欲繰り返し(DFAver)Monday, March 26, 12
  • 16.
    オリジナルな成果 •DFA-JITによる正規表現マッチングの高速化 • JIT特有の最適化等 • データ並列マッチングによる高速化 • オートマトンを拡張 • 正規表現の拡張演算の提案/実装 • 弱後方参照, 上限付き再帰, 非強欲繰り返し(DFAver) 全部喋りたい...Monday, March 26, 12
  • 17.
    正規表現エンジン 開発過程を時系列でMonday, March 26, 12
  • 18.
    正規表現エンジン 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 19.
    上京。 正規表現エンジン この時、正規表現(DFA)をJIT 開発過程を時系列で する方法で悩んでいた。 (自前, gcc, asm, llvm, libjit, gnu lightning...) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 20.
    ラボユース採択(神タイミング)。 正規表現エンジン 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 21.
    C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 22.
    DFA-JIT C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 23.
    DFA-JIT エントリー (レジスタ調整,初期状態へジャンプ) 状態コード詳細 (24 Byte) C++製JITライブラリXbyakで 状態0のコー 正規表現エンジン 正規表現JIT。動いた。 状態1のコー cmp rdi,rsi #終端判定 je 0x120005030 開発過程を時系列で movzx r10,BYTE PTR [rdi] ・X86最適化の権化、光成さんの inc rdi 状態遷移テーブル  熱血指導の賜物?jmp QWORD PTR [rdx +r10*8] •コード生成は JIT ライブラリ Χbyak を使用. 2011年 3月 •4 5 サイボウズ・ラボ 光成氏が開発.12 Χbyak: 6 7 8 9 10 11Monday, March 26, 12
  • 24.
    C++製JITライブラリXbyakで 正規表現エンジン 正規表現JIT。動いた。 開発過程を時系列で ・X86最適化の権化、光成さんの  熱血指導の賜物? 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 25.
    正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 26.
    データ並列マッチング 正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 27.
    データ並列マッチング マッチングの並列化 = 状態遷移の並列化 a q1 b q3 a q1 a q2 正規表現のデータ並列マッチン q0 正規表現エンジン グを実装。(オートマトンを拡張) •このような状態遷移を 開発過程を時系列で ・巨大なテキストの全体マッチング a a ? b 結果1 a  では台数効果が見込める。 ?     (詳細はポスターで) q2 ? ? 結果2 2011年 •のように文字単位で並列に実行 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 28.
    正規表現のデータ並列マッチン 正規表現エンジン グを実装。(オートマトンを拡張) 開発過程を時系列で ・巨大なテキストの全体マッチング  では台数効果が見込める。     (詳細はポスターで) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 29.
    最適化、議論、実装、 正規表現エンジン イベント、論文、学会....。 開発過程を時系列で ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん) ・x86/x64最適化勉強会1 (thanks! 光成さん) ・日本ソフトウェア科学会第28会大会@沖縄 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 30.
    最適化、議論、実装、 正規表現エンジン イベント、論文、学会....。 ・夏休み(学生)ということで、週3で 開発過程を時系列で ・Shibuya.pm「夏の正規表現祭り」(thanks! 竹迫さん)  サイボウズ・ラボに出勤。開発。 ・x86/x64最適化勉強会1 (thanks! 光成さん) ・ラボメンバーさんとの議論が楽しい!!! ・日本ソフトウェア科学会第28会大会@沖縄 ・最適化/並列化/新機能等々,,, 色々 る。 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 31.
    ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 32.
    ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で ・正規表現の新しい演算を考える等(ポスター) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 33.
    ✦ 弱後方参照 •有限パターンの参照なら区別できる. ひたすら正規表現 •/(1|2|30?) = (1)/ → 恒等式 正規表現エンジン •無限パターン(繰り返し)は区別しない. と戯れる。 = 2 + / 開発過程を時系列で •/(1|2+) = (1)/ →/1 = 1|2+ ・正規表現の新しい演算を考える等(ポスター) ✦ 上限付き再帰 •/a@b@c/→“aabcbabcc” 2011年 •/(@{0, 2})/7→ “()”, 9 10 “((()))” 3月 4 5 6 8 “(())”, 11 12Monday, March 26, 12
  • 34.
    ひたすら正規表現 正規表現エンジン と戯れる。 開発過程を時系列で ・正規表現の新しい演算を考える等(ポスター) 2011年 3月 4 5 6 7 8 9 10 11 12Monday, March 26, 12
  • 35.
    2012年 1月 2 3Monday, March 26, 12
  • 36.
    ポスター発表。 ・第53回プログラミング・シンポジウム  「並列化と実行時コード生成を用いた   正規表現マッチングの高速化」  → 入り口にあるポスターです。 2012年 1月 2 3Monday, March 26, 12
  • 37.
    grepの実装。 ・grep高速化のための機能追加 ・固定文字列探索の高速化等(未完成) ・ライブラリAPIを整理し始める(ようやく) 2012年 1月 2 3Monday, March 26, 12
  • 38.
    なう。 2012年 1月 2 3Monday, March 26, 12
  • 39.
    正規表現エンジン Regen githubで開発中!! http://github.com/sinya8282/regen 2012年 1月 2 3Monday, March 26, 12
  • 40.
    正規表現エンジン Regen githubで開発中!! http://github.com/sinya8282/regen 2012年 1月 2 3 そして伝説へ....Monday, March 26, 12
  • 41.
    サイボウズ・ラボユース ではなにを?(再) • 正規表現エンジンの実装, 高速化 Regen • 「最速の車輪を。」→ • 正規表現を利用したツール/システムの開発Monday, March 26, 12
  • 42.
    サイボウズ・ラボユース ではなにを?(再) • 正規表現エンジンの実装, 高速化 Regen • 「最速の車輪を。」→ • 正規表現を利用したツール/システムの開発 そしてこれからは? • 欠点も多い(実装で克服できる?) • メモリ使用量, 制限(キャプチャ,,,), 苦手な正規表現,,, • ライブラリを完成させにゃ... (目標: Google RE2) • 「文字列探索」以外にも正規表現を。(試行錯誤中)Monday, March 26, 12

[8]ページ先頭

©2009-2025 Movatter.jp