バグいろいろ
プログラムを書いていてなにか動作がおかしいと、
printデバッグなんかをしてみるが、
なぜか仕込んだ途端に再現しなくなるような嫌なバグがあったりする。
こういうバグをハイゼンバグというらしい。
詳細はリンク先を見てもらうとして、なかなか厄介なバグである。
というかみんな困っていてわざわざ呼び名までつけられていたんだなと感心する。
バグはソフトウェアを作る以上は必ず存在するし、
なるほど研究の1分野として成立するような気もする。
他にも面白いバグはないかと調べていたら、
以下のサイトも見つけた。
Stack Overflow発 プログラミングの隠語(ジャーゴン)30選 | A-Listers
個人的には怒ったガールフレンドバグがツボ。
こういうのあるよなーと一人で頷いてしまった。
Intel製品のバグと低レイヤーへのあこがれ
IntelのAtom C2000シリーズに不具合、最悪システムが起動しなくなる可能性 | スラド ハードウェア
インテルのプロセッサにバグがあって、しばらく使うと壊れてしまうらしい。
AtomなのでPCとかは関係ないと思うが、リンク先にもある通りCISCOの機械が該当しているのでは?と言われている。
なかなか厳しいバグなので該当すると辛いなーという感想と、最近はCISCOの機械もAtomプロセッサなんだという別方向での学びがあった。
(そもそも昔はどのプロセッサだったのかも知らないけど)
それにしてもプロセッサやチップの知識はどうやったら身につくんだろうか。
他にもルータとかのネットワーク機能とか、あのあたりのノウハウも自分には無い。
このニュースを見てそのようなことを考えていた。
下のレイヤの知識がある人は総じて強い印象があるので憧れる。
rethinkdb
RethinkDB joins The Linux Foundation - RethinkDB
先日開発停止が宣言されたrethinkdbだが、linux foundationが引き取ることになったらしい。
個人的には全く使ったこともなく存在自体を開発停止のタイミングで知ったようなレベルだったが、
紆余曲折あって開発が続くことになったということは価値のあるプロジェクトだったんだろうと感じた。
ここからシェアを増やすのは大変だと思うが、開発体制が変わっていい方向に転がるというのも普通にあり得ると思うので、
たまに思い出して情報を拾っていきたいところ。
クロネコメンバーズのポイント
pcregrepとGNU grepの-P
先日pcregrepを紹介したが、grep -Pもあるとコメントで教えてもらった。
(色々と調べるきっかけにもなりました、南の島さんありがとうございます)
GNU grepではpcreサポートも実装されているようで、以下のようにmanにも記載されていた。
-P, --perl-regexp Interpret the pattern as a Perl-compatible regular expression (PCRE). This is highly experimental and grep -P may warn of unimplemented features.
この前はmacのmanをみてしまったので気づかなかった。。。(macはGNU grepではない)
と、ここで違いが気になってきたので少しだけ出自を調べてみた。
pcregrep
pcregrepはpcre.orgで配布されているpcreライブラリに付属している。
そもそもpcreとはperl5互換の正規表現ライブラリのことで、perl5で使える正規表現をAPIとして提供するライブラリがlibpcreということのようだ。
perlはlibpcreを使っておらず、厳密にはlibpcreとperl5の正規表現は少し違うようだ。
Perl Compatible Regular Expressions - Wikipedia
ということで、pcregrepはGNU grepとはまた別の開発主体によってメンテナンスされている、あくまでクローンということだと思う。
(GNU)grep -P
GNU grepは言わずとしれたGNUのソフトウェアで、linuxでは基本的に利用できると思って間違いないと思う。
GNU grepには-P
オプションがあり内部的にはlibpcreを使っているようだった。
つまりオプション解析や出力の処理などはいつも使っているgrepそのままで、マッチング処理にlibpcreを用いることができるということのようだ。
この-P
自体はPOSIXで定められていないようなので、あくまでGNU grepの独自拡張ということになると思う。
そのため、mac等、非GNUのgrepを使っているOSでは利用できなさそうだ。
まとめ
結局はlibpcreが処理するようだ。じゃあpcregrepを覚えておけばOKかな?と思ったあなた。間違いです。
libpcreは確かに多く使われているが、それが当たり前ではない環境もあるので、
少しでも多くの環境をサポートするならperlを使えと言われている。
世間は厳しい。
と、半分冗談は置いておいて、以下は自分なりに考えた結果。
linuxで生活しているならならgrep -Pが良いと思う。なぜならGNU拡張オプションが使えるので色々と楽だろう。
pcregrepは普段使いするわけではないので細かい挙動が違い、細かい場面でハマる可能性がある。
一方、macも使っているならpcregrepになると思う。brewなどでggrepを入れても良いとは思うが、結局コマンド名が変わるのはわかりにくい。
軽く使ってみている限りはpcregrepでも全く問題はないので、
凝った正規表現を使うならpcregrepで統一するというのは現実的だと思う。
ということで、両方頭に置いておいて、状況に合わせてうまく使えるようにしておきたい。