2017年07月17日

boost::regexとstd::regex(tr1)、どっちを使っていこう?

去年の10月3日に、Visual C++ 2010には、STLにregex(正規表現)ライブラリが入っていたことに気づき、現時点ではboost::regex側が使われていることが確定して、10ヶ月くらいそのことを忘れていました。

STLのregex (以後はstd::regexと呼ぶ)と、boost::regexのどちらを使っていくべきか、その機能の違いや、exe生成後のサイズの比較を行い、今後どちらを使っていこうか考えようとしていたのでした。

Visual Studio 2010に入っているstd::regex(tr1)と、最新のboost::regexを比べてみると、明確な違いとしては次の項目が挙がります。

  • 文法の違い
    boost::regexの正規表現の文法はperlのものが採用されているが、std::regexの正規表現の文法はデフォルトでECMAScriptのものが採用されている。後者の方が文法の定義がしっかりしているとのこと。
  • exeファイルのサイズ
    boost::regexをリンクしたときより、std::regexをリンクしたときの方が、exeファイルのサイズが小さくなる。
  • regexのコンストラクタの引数に指定できるフラグ
    boost::regexにはデフォルト指定としてregex::normalが存在するが、std::regexには存在しない。
    regex::icaseだけを指定すると、マッチが行われない。regex::ECMAScriptもあわせて指定しなければならない。

  • マッチに関するフラグ
    boost::regexにはregex_constants::match_single_lineおよびmatch_not_dot_newlineが存在するが、std::regexには存在しない。

いずれも、Visual Studio 2010に入っているstd::regexに関する比較になります。
別のバージョンや処理系になれば、exeファイルのサイズ比較結果やフラグの指定方法も変わってくると考えられます。

例えば、regex::icaseだけを指定した場合にマッチが行われない問題は、C++11までの規則に起因する問題であり、C++14の規則に従っているバージョンならばこの問題が起きないようです。

また、Visual Studio 2010よりも後のバージョンであれば、regex_constants::match_single_line(の逆)に相当する別の定数が定義されているそうです。

なお、他の処理系では、wregex (basic_regex<wchar_t>のこと) を使う場合、日本語が正しく取り扱えないことがあったそうですが、Visual Studio 2010では正しく扱えていました。


続きを読む
posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング

2017年06月08日

「フリーソフト作り」と「コミュニティ」?

最近、「フリーソフトを開発している(よく開発していた)」という話題から、「コミュニティに参加しているの?」と聞かれることが多いことに気づきました。主に目上の方から。

個人開発のWindows向けフリーソフト作りにおいて、「コミュニティ」と呼ばれるものが一般的に存在している・・・という話はあまり聞いたことがないですね。
(INASOFTはサークル活動であり、特に疑似シリーズは複数人で作成していることも多いので、それを以てコミュニティと呼ぶこともできなくもないですが)

「いじくるつくーる」とか「すっきり!! デフラグ」といったものに、「コミュニティ」なるものが存在しているって話は聞いたことがないです。
あるいは、私が知らないだけで、多くの個人フリーソフト作者が加入するコミュニティが存在しているのかもしれませんね。私に声が掛からないのは、私がボッチだからかもしれませんけど・・・。


続きを読む
posted by ayacy at 00:00 | Comment(1) | TrackBack(0) | プログラミング

2016年12月23日

Twitter上で久々にエゴサをしてみたら・・・ジョークソフトについて

昨日、Twitter上で久々にエゴサをしてみたら、ジョークソフトに関するツイートを見かけました。

あるウイルス対策ソフトで、検出対象を選択するダイアログ上に「ジョークソフト」というのがあった、というもの。そこから、

  • かつて、INASOFTで作っていたジョークソフトが、ドキュメントを削除された状態でメールに添付され、チェーンメール化したことがあったらしい。
  • ジョークソフトを検出するって、どんな技術的方法を用いるのだろうか。
  • また、当時みたいにジョークソフトは作られることはないのだろうか。

というもの。

チェーンメール化したのは、「疑似アクティブデスクトップ」の旧バージョンでして、チェーンメール化の発覚時(2000年ごろだったかと思います)に、ウイルスとして検出するよう、私の方からセキュリティ企業に依頼した経緯があります。

そういえば、ウイルスバスターでもジョークソフトが検出対象カテゴリになっているという話があって、無害なジョークソフト・・・例えば立ち上げたウィンドウが下に落ちていくだけでも検出対象とするのかと抗議したら、有害無害関係なく十把一絡げに扱うような非常に不明確な回答を返されて呆れ果てた・・・なんてことがありましたけど、どうやって、それぞれのソフトウェアをジョークソフトであると見極めて検出するのか、といったような、技術的な話は聞いていないですね。

1つ1つのプログラムファイルについて、ジョークソフトかどうかを人間で判定し、MD5とかSHA-1とかで判定するとかでしょうか。
幸い、Vector等のソフトウェア配布サイトには、ジョークソフトとしてのカテゴリがありますから、プログラムファイルの収集は容易かも知れません。

ちなみに、2012年ごろに書かれたあるブログ記事ですと、現在ではジョークソフトというのは「時代遅れ」なんだそうで、「かつて人気だったソフトウェアだろうと、現在の時代にそぐわないのならばウイルスとして検出されるのは当たり前」なのだそうです。

そこまで後ろ指を指されながら、ソフトウェア製作するモチベーションは保てませんからね。どんな気持ちで作ったら良いか、もうわからない。たぶん、よっぽどのパッションでも沸いてこない限りは、当時みたいにジョークソフト製作を定期的に行うようなことは、しないだろうと思います。


posted by ayacy at 00:00 | Comment(0) | TrackBack(0) | プログラミング