Skip to content

Instantly share code, notes, and snippets.

@suma
Last active December 23, 2015 23:29
Show Gist options
  • Select an option

  • Save suma/6710797 to your computer and use it in GitHub Desktop.

Select an option

Save suma/6710797 to your computer and use it in GitHub Desktop.
JubatusでRE2から鬼車へ移行するメモ

re2 repacement for Oniguruma

デフォルトで鬼車を利用する

前提

https://gist.github.com/gwtnb/7e813cf1d18358a869fd

  • UTF-8有効
  • スレッドセーフでビルドされていること

binary package

  • RPM: oniguruma-devel oniguruma
  • Ubuntu: libonig-dev libonig2 (開発者ならlibonig2-dbgも入れよう)

re2を使うオプションを残す

このとき鬼車は利用しない。排他的。

2013-09-25確認

  • 鬼車 公式 最新版 5.9.4(2013-04-04)
  • Ubuntu 12.04, SF 6.4共に 5.9.1 をバイナリ提供

5.9.x?でOKかな。

作業方針

  • 作業ブランチ (鬼車がないとき、 --enable-re2オプションを加えてocnfigureすること)

  • https://github.com/jubatus/jubatus/tree/feature/oniguruma

  • やること:設定ファイルに記述した正規表現の記法は変更せず、実装だけre2から鬼車へ置き換える

  • --enable-re2 オプションを加えたとき、re2の代わりに鬼車を利用する(排他的、どちらか片方を有効にさせる)

  • 柏原前準備で作業したこと

  • wscriptの修正: --enable-re2オプション, onigurumaライブラリのチェック

  • re2_??というクラス名から、 regexp_matcher, regexp_filter へ変更

  • regexp_matcher, regexp_filterヘッダの作成

  • やること

  • 鬼車のマッチャとフィルターを作成する: onig_matcher, onig_filter のcpp, hpp

  • 正規表現の設定をre2(デフォルト)にあわせる

  • 実装方針 Onigurumaの利用(たぶん)

  • Re2::FullMatch → マッチしたサイズが文字列全体かチェックすればよさげ

  • Re2::Replace → マッチした部分の置換を手動で実装 かな

  • API http://www.geocities.jp/kosako3/oniguruma/index_ja.html

  • re2 デフォルトのオプションに気をつける(UTF8有効である) http://code.google.com/p/re2/source/browse/re2/re2.h#506

  • TODO: re2_splitter (plugin) も鬼車移植するか鬼車版のshared object作るようにしないと

課題

  • regex_??ヘッダに onig_??かre2_?? のどちらか含まれるように書いちゃった。これらヘッダはインストールしないから問題ない?
  • jubatus.pc.in にリンク対象として、re2などの依存を書いてない気がする
  • re2のデフォルト設定は、鬼車の使い方で互換性を維持できるか、どこまでカバーするか
  • テストコード内でデータを増やすなりetc
@kmaehashi
Copy link

RHEL は optional-rpms リポジトリ (インストール直後はデフォルト無効) を有効にする必要がある点、ドキュメントにしましょう。

yum --enablerepo=rhel-6-server-optional-rpms install oniguruma

CentOS/SL はデフォルトのリポジトリで OK なはずです。

@suma
Copy link
Author

suma commented Sep 27, 2013

気づいてませんでした。ありがとうございます。

@suma
Copy link
Author

suma commented Oct 1, 2013

メモ: gtestがPOSIX正規表現のregex.hをインクルードしており、oniguruma.hをインクルードしたテストを作成するとコンパイルに失敗する。
コード中で #define GTEST_HAS_POSIX_RE 0 もしくは CXXFLAGS=-DGTEST_HAS_POSIX_RE=0 とすればよい(gtest 1.6.0 or 1.7.0)。

@suma
Copy link
Author

suma commented Oct 17, 2013

>マルチスレッドについて

http://cpansearch.perl.org/src/ANDYA/re-engine-Oniguruma-0.04/onig/doc/FAQ.ja
kmaehashiさんに上記ドキュメントを発見してもらい、new/freeはコンストラクタ・デストラクタであるためたとえマルチスレッド非対応であっても大丈夫そう。

re2_splitterの代替:
こちらは実装することに会議で決まったが、提供方法(プラグイン/ビルトイン)や名前についてはissueや定例会議で議論することとする。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment