Visual C++ 2022 でも regex の multiline はサポートしない

時が流れるのも早いもので、ADPの開発に使用しているコンパイラをVisual Studio 2012 に変えてから10年が経とうとしています。
途中、一度Visual Studio 2017 C++を試したのですが、regex がboostのモノと挙動が違うらしく($を行末とするにはmultilineサポートが必要とのこと)、この時はVisual Studio 2012に戻した。

最近、OSをWindows 11に変えて、『いい加減コンパイラも変えるか』ということで、Visual Studio 2022 の C++に変えました。
ちなみにVisual Studio 2012 は Professional を購入しましたが、Visual Studio 2022 は Community版 をインストールしました。
まぁ仕事で使うようになったら Professional を購入します。
Visual Studio は 2003、2008、2012と一つ飛ばしで買っていましたが(2012は不本意ながら、2008がWindows8で動かなかったから買った記憶があります)、その後、Visual Studioを使うのも ADP と SQL Server 2012 の開発用となったので、特にバージョンアップをしないで、だらだらとしていたら気が付けば、2013、2015、2017、2019、と結構なスキップとなりました。

気が付けば、Gitに対応していたり、なかなかの変わりっぷりですが、C++の開発関係はあまり変わらずでよかったです。
もっとも、C++言語の方が、C++11、C++14、C++17、C++20 と今迄の停滞はなんだったんだというぐらいに変わっているので如何したものかと思う。
一部、最適化に関わる部分(右辺値参照とか)があるので無視するわけにはいかず、コード自体は今後、変えていこうかと思います。
ちなみに長く止まっていた、C言語の方もC11やらC17やらに対応しているらしく(単にプロジェクトのプロパティを見ただけ)、C言語に徐々に書き換えるのもありかと思う今日この頃です(現実的ではないですが)。

新しい規格への対応で、1点、期待していたものが regex がありました。ADPは boostライブラリの regex を使っていたのですが、そのregex がC++11から規格に入り C++17 ではmultilineをサポートしたものになっていました。あくまでも個人的な趣味もありますが、私的には $ を行末としたいのですが、それまでのC++ の 標準regexは$はあくまでも文字列の最後という扱いでした。multilineで$が行末とみなしてくれるようになります。
ということで、さっそく試してみたのですが、VC 2022 ではどうも、multilineに対応していないようでした。
「なんでやねん」ということで、色々検索してみましたが、以下、Microsoft のDeveloper Communityの投稿を見つけました。

multiline [C++]

同じようなことを感じた人が投稿したらしいのですが、Visual C++の開発者と思われる方のコメントで、要約すると『規格制定で色々あったのですが、現在のところABIの破壊がないようにするために、このような実装となっています。回避策として引き続きBoostのRegexを使ってください、その方が挙動が一貫しているだけでなくパフォーマンスも良いです(意訳)』とのことです。

BoostのセットアップがVisual C++の環境では面倒なのですが、Boostも一緒にバージョンアップし(1.45 → 1.80)Visual C++ 2022の環境に移行しました。ちなみにコンパイラを変えただけではパフォーマンスが変わることは特になかったです(AVX等の命令を使うように変えればまた違うかもしれませんが・・・)。

RYZEN

2020年もすっかり明けて2月になりましたが、年明けに10年ぶりにPCを更新しました。
ちょうど10年ほど前に、購入するPCの世代を統一しようと初代Core i7でソケット1366に決めたのですが、そこからCore i7-980Xを3つ程とi7-920を入手し4台のPCがあるわけですが、その後継ということでZEN2世代のRYZENに決めました。
Core i7を買ったときはちょうどWindows7に乗り換えた時でそこから8,10ときて、ここ2,3年は自分のPCがもっさりしていてグラフィックカードを変えたりしていましたがやっとこさ全とっかえができました。

今回はインテルからAMDに乗り換えたのですが、長いPC歴でちょこちょこAMDを使っています。今までメインマシンで使ったCPUを思い出すだけ書き出すと、こんな感じになります。

1984 (不明)ポケコンPB110
1985 uPD780(Z-80相当品) NEC
1989 80286相当品 AMD
1989 V30 NEC
1992 i486SX(J) Intel
1994 Am486 SX2-66 AMD
1996 Pentium 133 Intel
1997 MMX Pentium 166 Intel
1998 K6 AMD
1998 K6-2 AMD
1998 M2 Cyrix
1999 K6-III AMD
2000 Pentium III 600 Intel
2000 Pentium III 1000 Intel
2002 Celeron 1.4(PentiumIII系) Intel
2003 Celeron 2.3(Northwood-128K) Intel
2003 Pentium4(Northwood) Intel
2004 Athlon 64 3000+ AMD
2006 Pentium D 805 Intel
2006 Core 2 DUO E6400 Intel
2008 Xeon X3350(Core 2 Quad) Intel
2009 Core i7 – 920 Intel
2010 Core i7 – 980X Intel
2020 RYZEN9 3950X AMD

年号は大体ということで割といい加減です。その時の懐事情と趣味とその他諸事情で買い集めたり絞ったりしていましたが、こうしてみると2010年代のスキップぶりが半端ないですね。Core i7についてはSandy Bridge世代でそろえればよかったと少し後悔して、AMDからZenマイクロアーキテクチャが出る噂を聞きつけたときに様子見をしてZen2になったところで「行こう!」となった感じです。

話は戻って、初めての16ビット、32ビット、64ビットCPUは、AMDになります。初めての16ビットパソコンはPC-9801RXでしばらくはIntelを使っていると思っていたのですがあるときに中を開けてみたらAMDのCPUでした。よくよくカタログをみたら80286相当品と書かれていてものすごくがっかりした記憶があります。初めての32ビットCPUは、i486SX(J)と思いきや、このCPUは外部バス16ビットで、それを初めて知った時のがっかり感は半端なかったです。そのあとに買ったパソコンが今はなきコンパックのPresario CDS 524でこちらもメモリの増設で筐体を開けた時にみたらAMDでまたもやがっかりした記憶があります。その後、懐事情が改善し自作に移行して狂ったように買いましたが、初めてのDual-processor, Dual-core, Quad-core, Hexa-core はIntelになります。
RYZEN9は、初めての16-core(書き方を探すのが面倒)、PCI-E Ver4.0(Ver3.0はスキップ)、DDR4-RAM、UEFIです。利用面からは、初めてのCPUプロファイラ(AMDuProf)を使うプロセッサになります。CPUはキャッシュミスとか分岐予測ミスとかが発生すると内部のカウンタで記録をとるのですが、それを読み出すソフトウェアがCPUプロファイラということになります。有名どころではIntelのVTuneがあるのですがこのソフトがめっぽう高くCPUと合わせての購入となると個人では手が出しにくいです。AMDの方はなんと無料ということでまぁAMDということになりました。
そんなものを何に使うのか?と言われそうですが、もちろんADPのインタプリタ部分で、当初はVisualStudio付属のプロファイラを使って最適化を行っていましたが、いろいろ私に合わず、『V-Tuneかー』と思っていたところへ、CodeXL(AMDuProfの前身)の存在を知り、CodeXLに乗り換えたのが5年ほど前になります。CPUがIntelの場合、プロファイラは命令毎にかかった時間が分かるのですが具体的な原因(キャッシュミスなのか?ブランチペナルティか?とか)までは分からずそのあたりは手探りになっておったのがこれでばっちりと分かるようになります。早速プロファイルをしてみると、

パットと見てよくわからない指標があるのでカウンタの意味についてはお勉強が必要なようです。例えばハイライト部分はただの代入になるのですが、それでなぜRet branchとかが関係するのか?(おそらく他のブランチとの関係で結果的に実行された/なかったとか言いたいのかもしれないのですが・・・)とか直接的でないところがあります。

ここにきて、ADPの実行ファイルサイズは約1MBになりますが、今まではプログラムやデータのメモリへの配置はコンパイラに任せていましたがそろそろそういったところまでも手を出す必要があるのかなと思っています。といっても具体的にどうするのか?という話ですが、先ずCPUプロファイラを使いながら基礎データを集めてその上でソースコードを再編集したり、インタプリタ本体を抜き出してミニマムなプログラムを作ってプロファイルをかけたりいろいろ実験ができそうです。

ちなみにこういった話をすると『じゃアセンブラで組めや!』と言われかねないのですが、まぁうざい煽りに真面目に答えると、要は今のプログラムはCPUの潜在能力を十分に生かし切れていないので工夫の余地があり、上手くいけば数倍早いプログラムが作れるということになり、2020年現在ではシングルスレッド性能で数倍といえば時間軸に置き換えると10年以上先に行けるという話になります。

どういうことかと言いますと、例えば1989年に出たi486DX(33MHz)と2000年に出たPentiumIII(1GHz)の性能比は、単純にクロック周波数で見ても30倍(実際はそれ以上)になります。次いで2010年に出たCore i7-980X(3.33GHz、ブースト3.6GHz)とPentiumIII(1GHz)との性能比は、クロック周波数でみて約3.3-3.6倍と伸び率が10分の1程度に減速しています。そして今回のRYZEN9 3950X(3.5GHZブースト4.7GHZ)とCorei7-980Xはクロック周波数ではブースト時で比較して1.3倍、実際に手元にあるADPのプログラムを動かしてみると整数演算で2倍となっています。つまり、それまでは最新のCPUと言えば以前のCPUより格段に速くなって10年も経てば桁違いの速さを見せたのですが2000年代の中盤頃からそのスピードが止まり、今では10年で2倍のパフォーマンスアップに留まることになります。
つまり今まではプアなプログラムを組んでも時間が経てば解決してくれるのですが、これからはきちんと考えて作らないとダメということになります。

CPUプロファイルの話はこの辺にしておいて、今回もう一つ試したいことがあるのが、仮想マシンの活用で今回、私が使う必要のあるプログラムの一部(eTaxとか弥生会計とか)を仮想マシンの方へ移しました。今までは再セットアップとなるとこれらのソフトを再インストールしなければならなくなり面倒なだけなのですが、それが不要となり気軽に再セットアップができるようになるので便利です。欠点としてはOSやらその他のライセンスがインストールするマシンの台数分必要になることと、RYZEN9 3950X特有かもしれませんがCPUプロファイルとの共存ができない(切替にUEFIレベルで設定変更が必要になる)ことでCPUプロファイルを取りたいときはいちいちマシンを再起動することになります。

今週の英語勉強(7/13)と久しぶりのADPの開発

英語の勉強は今週の前半は順調だったが、週の後半に夏休みをとり久しぶりのまとまった時間がとれたので、ADPの開発にいそしんだ。ので週の後半、英語の勉強はおろそかになった。
 ADPのパフォーマンス改善に取り組んだが上手くいかなかった。生成されるコードを読むかぎりC++では厳しくなってきてCで組みたくなってきたこの頃である。仮想関数やテンプレートは便利な反面どういったコードが生成されるか読みきれないところがあり(ビジターパターンで実装している多重ディスパッチの最適化の為、メンバ関数ポインタを用いて2つのクラスにまたがる仮想関数に対して自前の仮想関数テーブルを作ったが、VCでは余分なJUMP命令が挟まれパフォーマンス改善が今一つだった)、パフォーマンスを追及するには結局のところCの方がよいと実感する今日この頃であるが、全てをCにするのはそれはそれで厳しいので悩みどころではある。
 話を英語に戻すと3日程サボったことになるが、たった3日サボっただけだが全体的に勉強していて実力が下がった気がする。少しづつでもよいので毎日勉強した方がよいようだ。また6月の末に音読の授業が終わったのだがそれを補完するメニューが必要と思うが、今週から単語の問題集を取り入れたので時間が足りなくなった。日曜日の午前中はテレビを見て過ごしていたが今週は英語勉強で潰れてしまった。とくにワイドナショーが見られなかったのが残念だ(まぁ夜に見た)。

(1)単語
 出る順パス単 英検準1級 1週目  1120(+200)
 出る順パス単 英検1級  1週目  1440(+200)
 学校提供単語帳 単語 180(+20)、述語 140(+20)
 学校提供問題集(PartI対策)第1回 6/25(1回目),15/25(2回目)
 学習時間はパス単が4時間/週。学校提供の単語帳が2時間/週。問題集が3時間。学校提供の単語帳の進捗が特に悪いが来週から学校が始まるのでパス単の比重を下げてこっちを勉強しようかと思う。
また学校提供の問題集をやった。この問題は4択で単語を選ばす問題が25問あり計100個の単語が出てくるが、1回目は9割が知らないと思った単語だった。が答え合わせ後、一つ一つ辞書で調べたところパス単や単語帳でやったことを思い出したものが4割ほどあり、計5割程度は既出のものだった。結構忘れていることに驚くが、問題をやった後はそのままにせずに、復習することも重要であることを知った。そのあと2回目を行ったが結果をみると完全には覚えきれていない。金曜日の晩にでも復習と3回目のテストをやってみようかと思う。
 今週の英語の語彙力レベル測定テストの各種テスト結果を載せます。総合判断のスコアが先週から落ちたが勉強をサボったからか、もっとも問題自体は解らない単語が多く出たので妥当な結果だと思うが、準1級が『合格多難』と言われているので疑問がのこることろではある。
実は先週、会員登録をしたのだが、会員と非会員では出題アルゴリズムが異なるのかもしれない(ってわけないか)





(2)RADIO JAPAN
 今週は21時のニュースを概ね3回ずつ聞いた。理解度は30%程度、学習時間は2時間/週。
週の前半はだいぶ聞き取れるようになったがしばらくサボった後に聞くと元に戻った。特に聞いていると違和感が出てきた。毎日きちんと聞いて練習する必要があると実感した。
 印象に残ったニュースは、首相(Prime minister)のオセアニア訪問。集団的自衛権(collective defense)の説明とオーストラリアとのEPA交渉。そして土曜日に帰ってきた。中国の監視船(patrol ships)が尖閣沿岸に侵入した。
ちなみに、patrol shipsが最初聞き取れなくて(ペイトレールシプスのように聞こえた)何回か聞き直した。

(3) 工業英検2級過去問
 80回をやった。時間切れになることはなくなったが、筆記試験なので、解答を見てもどの程度の得点が取れているか今一つよくわからない面がある。英訳、日本語訳共に模範解答と比べると自分の答えは稚拙な感じは否めないがそれがどの程度減点になるのか今一つ解らない。まぁ受ければ結果が出るのでそれで解るからよしとする。文章をつなげる問題と簡略化させる問題は計10問中7問が合っていた、少し低いか。

変な人

ここ1年ほど続いた炎上プロジェクトですが、奇跡的(?)にやっと落ち着き定常運転ができるようになったのですが、やることはまだまだたくさんあるので全くもってヒマがないので、更新もすっかりご無沙汰になったのですが、そのおかげで変な人の付きまとい行為も減り結果オーケーではある。

変な人というと総務省が、「独創的な人向け特別枠(仮称)(通称:変な人)」というのを募集するようです。

『「Disruptive Change」:世界的に予測のつかないICT分野において、破壊的な地球規模の価値創造を生み出すために、大いなる可能性がある奇想天外でアンビシャスなICT技術課題に挑戦する人を支援。閉塞感を打破し、異色多様性を拓く。』
とか
『*ゴールへの道筋が明確になる価値ある「失敗」を奨励』
ということで、来年あたりならヒマができるのでADPを引っ提げて応募しようかと考え、調べていたら色々思うことがあるので、コメントします。

そもそもなぜこのような政策を実行するのか?つまりこの政策の背景ですが、『イノベーション創出委員会』ということろがとりまとめを行っています。とりまとめの案が以下から読めます。
イノベーション創出委員会最終とりまとめ(案)に対する意見の募集

あとインタビュー記事が以下にあります。
「俺の言うことがわからん奴はバカ」という人が欲しい–総務省のイノベーション創出事業“変な人”

これらをみて思ったのは、やはり日本は衰退に向かっているんだということで、さらに残念なことに国家や大企業ではそれを克服できないんだなということです。私の経験から一言で言えば潰れかけの会社が色々足掻いているという印象がぬぐえないです。
もちろん、座して死を待つよりは遥かにましですし何事もチャレンジすることはいいのですが、例えば、上記の記事をみますと変な人の育成方法は、『いまのところ決まっていない。』とか、いやいや人任せにせずにそれぐらいは自分で決めましょう突っ込みが出てきて思わず心配してしまいます。

また、
『「なぜ“変な人”という表現ではダメなんだ。“独創的な人”より伝わりやすいじゃないか。これだからイノベーションが起きないんだよ」―こう指摘したのは元総務副大臣の○○○○という。』
については、言葉尻をとらえた本質的でない所で熱く議論をしているんだ税金を使って・・・と思わざるを得ない。まぁ成長が鈍化した会社の会議なんかで見る光景ではあるのですが・・・。
イノベーションとは常識を理解した人があえてそれを破ることから起こると考えているのだが、つまり温故知新ですね。スティーブ・ジョブズの例で言えば、Macintoshの開発逸話を読めば、彼が変な人だとは思わないはずで、卓越したプロデューサーというのが私の印象になります。まぁ私にはできないですね。

記事では変な人を探す理由として、イノベーションのジレンマをあげています。
イノベーションのジレンマとはWikipediaによると『巨大企業が新興企業の前に力を失う理由を説明した企業経営の理論』ということです。つまりイノベーションのジレンマとは今の日本の状況を説明するものではなく単に大企業が衰退する理論的な説明にしかすぎないです。まぁ日本の新陳代謝を促す為、世界で戦えない大企業に関しては潰れて頂いてもよいかと思うのでイノベーションのジレンマは歓迎ということになります。
ちなみに記事からはあたかも今の日本ではイノベーションが起こっていないという印象を受けますが、日本でイノベーションは私の半径3メートルでもみることができる。
ほんの5年前までは、ガラケーを使いながら『スマホってなに?』といっていた人たちが今ではスマホでガンガンゲームをやっている。スマホ歴自体は私の方が長い(7年以上)のだが、その適応力をみると個々人でみた場合、日本人のテクノロジーを扱うポテンシャルは全く衰えていないと実感する。スマホは確かに海外発のテクノロジーかもしれませんがその中に入っているアプリは日本で作成されいます。
『たかがスマホのゲーム』と思うかもしれないが、5年前と今で電車内の人のようすを比べますとまさにイノベーションが起こったといってもよいでしょう。

というわけで、政府や大企業が危機感を持っているのは解ったのですが、まぁ既得権益を享受している組織は、今の状況は芳しくないと考えているようですが、破壊的イノベーションはそういう既得権益者が破壊されるとこではないのか?という疑問が出てくるのですがどうだろうか?

ちなみに私の半径3メートル以内の話になりますが、個人に入るかどうかは別として優秀な人はそれなりにお金をもらって仕事をしており、300万では対したことができないのだが、相場というものを理解していないのでしょうか?もっとも例えばこの事業が自宅警備員のような方に対する支援なら全くもって理解できなくもないですが、それでも『金は出せないがお前ら頑張れ』という昔居た会社の上司が言っていたセリフが思い出されます。その返答としては、だったら君たちがその金でイノベーションを起こしなさい、ということで今年の応募は見送りますが、もっとも何事もチャレンジすることはよいことですので、ちょいちょい様子をみてみましょう。

[ADP開発日誌]Ver 0.85のリリース

例年4月以降は、仕事にゆとりができるのですが、今年は忙しく(アベノミクスとは関係はなく)、せいぜいゴールデンウィークにメインマシンをWindows8にした程度で、いろんなものができずじまいで滞っているのですが、これ以上放置する訳にもいかないので0.85をリリースします。

主な変更点は以下のとおりです。
・バグフィックス
・パフォーマンスアップ
・Windowsの開発環境をVisualStudio2008 → VisualStudio2012

本来なら0.85というキリのよい数字なので、ロードマップで示している機能(リソースの解放機能)を入れようかと思っていたのですが、アーキテクチャの改修は進んだのですが、時間的な問題でリソースの解放機能は入れずじまいになりました。
ただ、アーキテクチャの改修のおかげでパフォーマンスがさらにアップしました。
また、OSのバージョンアップ(Windows7→Windows8)に伴って開発環境が変わりました。このあたりは別途レポートしたいのですが、多分しばらくは無理でしょう。

例によりベンチマークを行ってみました。

◆Windows上でのJavaScript vs ADP
■マシン
・CPU  Core i7-980X(3.33GHz HT OFF / Turbo Boost OFF)
・メモリ 48GB(DDR3-1600 8GB × 6)
・OS   Windows 8 Pro (x64) 電源管理:高パフォーマンス
 
■結果

28のフィボナッチ数を求める時間
 IE 10(JavaScript) 35ミリ秒 
 FireFox 22(JavaScript) 70ミリ秒 
 ADP 0.82(32ビット) 202ミリ秒 
 ADP 0.85(32ビット) 171ミリ秒 

JavaScriptとの対決ですが、桁が違うので更なる改善が必要ですが、少し気になるのが、FireFox22で、以前、測ったときはFireFoxは圧倒的な強さを見せたのですが、ここに来て失速がみられます。なにが要因なのか興味深いところではあります。
ちなみにテスト環境を整備していて気が付いたのですが、CPUのHTがONの状態のときのJavaScript(IE,Firefox共に)パフォーマンスが1.5~2程度低下していました。JavaScriptを高速で動かしたい場合は、HTはOFFの方がよいかもしれません。

◆CentOS6.4上でのPHP,Java,ADP
■マシン
・CPU   Core i7-980X(3.33GHz HT OFF / Turbo Boost OFF)
・メモリ  24GB(DDR3-1066 4GB × 6)
・ホストOS Windows 2008R2(Hyper-V)
・ゲストOS CentOS 6.4(実行環境)

■テストコード
 テスト1:28のフィボナッチ数を求める PHPソース(Test1.php) Javaソース(Test1.java) ADPソース(Test1.p)

 テスト2:10万までの素数を求める PHPソース(Test2.php) Javaソース(Test2.java) ADPソース(Test2.p)

テスト2のPHPのコードですが、Stackoverflowさんのコードを使わせて頂きました。

■結果(timeコマンドのuser部分を抜き出した)

Linux(CentOS6.4 x64)上でのPHP(5.3.3)、Java(1.6)、ADP(0.85)の比較
  テスト1 テスト2
 PHP(5.3.3) 201ミリ秒  33.5秒 
 Java(1.6) 44ミリ秒  5.0秒 
 ADP(0.82) 186ミリ秒  3.7秒 
 ADP(0.85) 157ミリ秒  2.4秒 

OS以外は、以前のテストと同様の環境ですのでPHP、Java、ADP 0.82はあまり変化はありません。ADP 0.85は順当にパフォーマンスが上がっていることが解るかと思います。

『社会人であり、技術者であり』の質疑応答

さて、『社会人であり、技術者であり』をリリース(?)してから思わぬところで炎上しまして、『質問に答えろ!』という声が出てきたのでFAQではないですが、質問&回答をまとめます
なお、このページについては適宜、編集します。

2012/11/23 まとめおよび質問回答を幾つか追加
2012/11/23 『みながわ氏=三浦氏という主張の根拠は?』に幾つか追加
2012/11/18 コメント欄での指摘を受け『社会人であり、技術者であり』を修正

2012/11/16 『みながわ氏=三浦氏という主張の根拠は?』を追加
2012/11/14 『「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合がある』を追加

現状(2012/11/23)のまとめ

現状、この小説の最終話とみながわさんとの関係についての解釈で以下の4パターンが出てきているかと思います。

1.無関係。三浦さんは不特定のお客サイドのマネージャということ

 →こちらについては例の炎上事件を知っているかどうかによって異なる面もあるようですが、最終話の後半部分については後から見ても多くの類似点があり、無関係というのは厳しいでしょう。これについて『三浦さんはみながわさんのモデルだがイコールではない』という、どう返信して良いか分からないコメントもありましたが、『モデル』と言っている時点で既に無関係ということではないでしょう。

2.みながわさんに批判的なだけ

 →こちらについては、小説後半部分の記述
『たまに別のWebサイトのコメント欄に、オブジェクト指向批判を書くこともあった。当然、技術的な裏付けも何もない、思い込みによる批判だから、正論で完膚なきまでに叩きのめされてしまう。正面から議論を展開できるだけの知識がないから、スリービーチさんにできることは、「その日本語はおかしい」とか「若い人はすぐに感情的になるから議論にならない」などと、負け惜しみを書くことだけだった。』

をみてみますと、
『思い込みによる批判』とか『負け惜しみを書く』、『人の話を聞かない』とかはその人の人格を表しているでしょうから批判を逸脱しているでしょう。また、

『そのささやかな幸せがいつまでも続くといいね。』
ですが、皮肉と取るにしても、趣味が悪いかと思います(と私も思います)。

その他、いちいち挙げませんが、貶めていると取られても仕方がない表現がありますでしょう。

3.最終話の後半部分はみながわさんを貶めていると取られても仕方がないので蛇足

 →こちらについてはほぼ同意なのですが、私の意見は少し異なります。

4.最終話の後半部分が本当に言いたかったことで、その前は最後を言うための布石

 →以下は、あくまでも、私(および数名)の方のこの小説の解釈になるのですが、注意して書けば、『1』や『2』に受け取れるような小説にもなったはずです。それなのに、なぜ、『3』と解釈できるような作品となったのでしょうか?
私はこの後半部分が、この小説が一番言いたいことではないのか?と解釈しています。

この小説を要約すると、
『人の話を聞けないオブジェクト指向を否定している人が、オブジェクト指向が分からないのでプロジェクトに失敗し、オブジェクト指向を否定するブログを始めたが、人の話を聞かない為に炎上して誰からも相手にされなくなる。やっぱり人の話(オブジェクト指向は良い)はちゃんときこうね。』
という風に解釈できます。この小説はみながわさんに『あなたはこういう人なんですよ』ということが言いたかったのか、というふうに私は受け取りました。

そう考えると
『そのささやかな幸せがいつまでも続くといいね。』
の文章が持っている、ある種の陰湿なニュアンスが伝わってくるかもしれません。

事実を元に、素直にそのまま表現し、きちっとした批判を行えば、まっとうな小説になったかと思います。が『プロジェクトに失敗した』とか『オブジェクト指向を知らない』等、虚実入り乱れた表現や、『2』で示しましたとおり人格否定と受け取れる書き込みがあれば、そのまま捨て置くのは厳しいかと思います。

理由はともあれ、こういう小説はダメでしょうというのが私の主張です。

もう止めませんか?

 現状 (2012/11/22現在)、議論は進んでいます。ので、まだ止めません。私の意見とほぼ同じ意見の方も出てきていますし、私には同意しないが、最終章については蛇足だという人の書き込みも見られるようになりました。
ということで、まだまだ止めれません。

お前の対応に問題があるんだよ

 当初、私にとっては問題点が明らかだったのですが、どうも私の言い方等がまずいようで炎上しました。ちなみに、実際に何処が悪いか聞いてみたのですが、具体的な回答は頂いていません。
作者に質問を丸投げした件については『ごちゃごちゃ言うより作者に聞いた方が早いだろう』という判断で聞いてみました。今後も作者への質問は当然、行います。
もっとも、私の表現等至らない面があり対応できることでしたら対応します。
ただし、聞いてもいない人がいきなり割り込んで来て『こうしろ!』とかいうコメントには当然お答えできません。ので、個別に返信しない限り、そのようなご意見はすべて『ご意見はありがたく頂戴しますが、対応は出来ません。』という事に致します。

ブログの内容が変わっていますよね?

 当初、私にとっては問題点が明らかだったのですが、どうも私の言い方等がまずいようで炎上しました。 
 ブログの書き方については、具体的にアドバイスをされた方がいらっしゃったのでその方のご意見を取り入れてブログの文章は修正しました。
といっても私が言いたい事は変わっていないかと思います。

何時までやるのですか?

 みながわさんが止めてくれと言うか、リーベルGさんから何らかの対応があるまでか、私が力つきるかです。

あなたは関係ないのでは?

こちらのコメント欄でリーベルGさんは以下のようにおしゃっています

『私自身は基本的にコメントの内容に制限をかけるつもりはありません。誰かが間違っていると思い、そのメッセージを伝えるのに、このコメント欄が最適だと思えば、何を書いていただいてもかまいません。』

ので、このコメントをすること自体は問題ないでしょう。それこそ、問題があれば、リーベルGさんまたは@ITさんが対応するでしょう。

みながわ氏=三浦氏という主張の根拠は?

まず、
http://ja.wikipedia.org/wiki/名誉毀損罪
から
『被害者の氏名を明確に挙示しなかったとしても、その他の事情を総合して何人であるかを察知しうるものである限り、名誉毀損罪として処断するのを妨げない(最判昭和28年12月15日刑集7巻12号2436頁)。』
とあります。『処断するのを妨げない』という言い回しが分からない方がいるかと思いますので、ニュアンスを言い換えますと『処断する場合がある』ということになります。

つまり多くの人が高慢と偏見のモデルはみながわさんと判別できている時点で、
 高慢と偏見の三浦マネージャ = みながわさん
としてよいでしょう。

高慢と偏見のモデルはみながわさんと判別できる理由ですが、『高慢と偏見』の最終話は、『実はオブジェクト指向ってしっくりこないんです! 』の本文およびコメント欄のパロディとなっています。
以下、『高慢と偏見』の最終話と『実はオブジェクト指向ってしっくりこないんです! 』との類似点を示します。

高慢と偏見最終話の三浦氏のブログのタイトル みながわさんのブログのタイトル
SEのサバイバル入門 システムエンジニア 生き残りの極意
過酷なSE業界を生き延びるノウハウを伝授する システムエンジニアとして長期に活躍した経験に基づく極意、ノウハウを教えます
高慢と偏見最終話 実はオブジェクト指向ってしっくりこないんです! -本文-
staticを使えば、わざわざインスタンスを作る必要などない 「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。
独自にクラスを作る必要などない。クラスは使うものだ。作るものではない 「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。
オブジェクト指向など、実業務では使いものにならない! オブジェクト指向は、結局のところホントにモノ(オブジェクト)に使われている記法、例えばGUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係のものである。
高慢と偏見最終話 実はオブジェクト指向ってしっくりこないんです! -コメント欄-
私はT大学大学院卒だ 私は学部は東北大学で大学院が東工大です。
あなたはSIerだろう。私は客側の人間だ。客の言うことは絶対だ 私はIS部門の人間なんです。SIerの客なんですよ。私に嫌われたらどうなりますか?
高慢と偏見最終話のポリモーフィズムの間違い みながわさんのブログのポリモーフィズムの間違い
ポリモリズム ポリフォーフィズム、
*みながわさんは何回かポリモーフィズムの言い間違いをしていますが、これをもじっているとみられます

今のみながわさんのコラムのタイトルとサブタイトルは違うものになっていますが、当時のみながわさんのコラムのタイトルとサブタイトルは、こちらで確認できます。

特にコメント欄の2つの発言が当時、有名になりました。色々引用されましたね。

ここまで類似点があるということは偶然ということはありえずに意図的に書かないかぎり無理かと思われます。
また細かい表現が変わっているので『フィクションです』となるという主張もあるようですが、これは言い訳の為にしかやっていないし、『炎上事件を知っている人は容易にみながわさんのブログのことを指している事がわかる』という風に解釈せざるを得ないのではないでしょうか?
他にもみながわ氏=三浦氏を伺わせるような内容はあるのですが、とりあえず幾つかあげておきます。

「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合がある

高慢と偏見(http://el.jibun.atmarkit.co.jp/pressenter/2011/02/post-6b95.html)
のコメント欄のespreさんへの回答です。

espre 2012年11月14日 (水) 13:02

>>警鐘であり『フィクション』というのなら、少なくとも、
>>>みながわさん、にしても、三浦マネージャーにしても、『人の話を聞く』とは、とても言えない、というのが、私の感想です。
>>というふうに、みながわさんと三浦マネージャを読み手に結び付けさせるようなコラムを書いてはダメでしょう。
>これが最大の疑問なのですが、なぜダメなのでしょうか?
>多くの新聞の社説やコラムは特定の個人をイメージして風刺
>する文章を掲載しています。これらも全てダメなのでしょうか?

まず、以下のページを参照してください。

『事実をフィクションとして書いたら名誉毀損やプライバシー侵害になりますか?』
http://www.bengo4.com/bbs/142497

つづいて、以下のページを参照してください。
http://oshiete.goo.ne.jp/qa/900590.html

さらに、以下のページ
http://president.jp/articles/-/2673

さらにさらに、
http://www.cyber-eraser.jp/category/1467828.html

さて、説明致します。

まず、名誉毀損罪(http://ja.wikipedia.org/wiki/名誉毀損罪)というのがあります。

これは、刑法第230条
『公然と事実を摘示し、人の名誉を毀損した者は、その事実の有無にかかわらず、3年以下の懲役若しくは禁錮又は50万円以下の罰金に処する』
とあります。少し噛み砕きますと、

公然・・・インターネット
事実を摘示し・・・『話を聞かない』、『ダメなシステムを作った』
人の名誉を毀損・・・例の人の社会的地位やSEとしての評価を落とした
事実の有無・・・・真実でも真実でなくても
となるでしょう。

つまり、大原則として、公に向かって、個人に対しての誹謗中傷を行ってはだめ(本当のことでも嘘のことでも)でしょうというふうに解釈できるでしょう。

ここまではOKですか?

続いて

刑法第230条の2
『前条第1項の行為が公共の利害に関する事実に係り、かつ、その目的が専ら公益を図ることにあったと認める場合には、事実の真否を判断し、真実であることの証明があったときは、これを罰しない。』

平たく言えば、書いた内容が真実であり、それがみんなのためであればOKということになるでしょう。

>多くの新聞の社説やコラムは特定の個人をイメージして風刺する文章を掲載しています。これらも全てダメなのでしょうか?

多くの新聞の社説やコラムはこの230条の2の範囲

・公共のため
・真実
の範囲でやっているということです。

ちなみに真実性の証明は、刑法第230条の2の要請です(法律に書いてある)。

というわけで「ある人物をモデルにした小説を書くのであれば、その人物がやってもいないことを盛り込んではいけない。盛り込んだ場合は、誹謗中傷となる」場合があるということになるでしょう。

わかりましたでしょうか?

社会人であり、技術者であり

2012/11/18 コメント欄の指摘を受け、全面改定しました。

最近、忙しくてすっかりブログを更新していませんでしたが、それでもADPの開発は続けておりその関連で調査をしていましたら、あまりにも程度の低い小説がありましたのでちょっとコメントしてみます。

発端は今から2年前のこの記事になります。

実はオブジェクト指向ってしっくりこないんです!(みながわけんじ)

よく解らない内容の記事なのですが炎上した記事です。ちなみにこの記事のコメント欄のryoというのは私です。

その後、この小説が書かれました。

高慢と偏見(1)隣は何をする人ぞ

高慢と偏見(2)使徒襲来

高慢と偏見(3)コードレビューは踊る

高慢と偏見(4) 嵐の金曜日

高慢と偏見(5) そして戦いがはじまる

高慢と偏見(6) いつかの誰かのためのドキュメント

高慢と偏見(7) 28日後……

高慢と偏見(8) 敵は身内にもあり

高慢と偏見(9) 誰がスケジュール遅らせた? それはあなたとプロマネは言った

高慢と偏見(10) 夏への扉

高慢と偏見(11) 現実は映画じゃない

高慢と偏見(12) 新人くんのささやかな主張

高慢と偏見(13) 一矢

高慢と偏見(終) エピローグ

大変長い小説で、著者(リーベルG)さんはフィクションと言っていますが、この小説は先の記事に対する程度の低い風刺になっています。

こういうのは捨て置いていたらよいのですが、私も齢40を過ぎ、後輩の方達へきちんと伝えるべきことを伝えたほうがよろしいかと思い何が問題か指摘します。

特定の人物を不当に貶める

一番に聞いてみたいことですが、この小説の著者は名誉棄損または誹謗中傷という言葉を知らないのでしょうか?、この著者(リーベルG)さんはいじめ問題がどのような人間の心理から出てくるかわからないのでしょうか?
もっとも今は何を言われても分からないかもしれません。が、まぁ後10年経てば分かるかもしれません。

高慢と偏見の最終話ですが後半は『実はオブジェクト指向ってしっくりこないんです!。』のパロディと思わせるないようとなっています。

後半の出だしを引用します。

アツコさんから久しぶりにメールが届いた。そこには「面白いもの見つけたよ」とあり、1つのURLが載っていた。

 開いてみるとブログだった。タイトルは、

 「SEのサバイバル入門」

 サブタイトルに「過酷なSE業界を生き延びるノウハウを伝授する」とある。ブロガーは「スリービーチ」。スリービーチ? 3つの浜辺? ひょっとして……

 最新の日記は、

 「オブジェクト指向など、実業務では使いものにならない!」

このタイトル「SEのサバイバル入門」とサブタイトル「過酷なSE業界を生き延びるノウハウを伝授する」は当時の、
みながわさんのコラムのタイトルとサブタイトルのパロディであることが分かるでしょう。
今のみながわさんのコラムのタイトルとサブタイトルは違うものになっていますが、当時のみながわさんのコラムのタイトルとサブタイトルは、こちらで確認できます。

その他の類似例を表にまとめます。

高慢と偏見最終話 実はオブジェクト指向ってしっくりこないんです! -本文-
staticを使えば、わざわざインスタンスを作る必要などない 「メンバー関数をstatic宣言すればインスタンス宣言をしなくてもいい」ということ知ってからは、メンバー関数を従来のファンクションのように使っている。
独自にクラスを作る必要などない。クラスは使うものだ。作るものではない 「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。
オブジェクト指向など、実業務では使いものにならない! オブジェクト指向は、結局のところホントにモノ(オブジェクト)に使われている記法、例えばGUI コンポーネント、データベース、ファイルなどであって、プログラムのアルゴリズムとは無関係のものである。
 
高慢と偏見最終話 実はオブジェクト指向ってしっくりこないんです! -コメント欄-
私はT大学大学院卒だ 私は学部は東北大学で大学院が東工大です。
あなたはSIerだろう。私は客側の人間だ。客の言うことは絶対だ 私はIS部門の人間なんです。SIerの客なんですよ。私に嫌われたらどうなりますか?

類似点は他にもあるのですが、これを見れば、「高慢と偏見の最終話」にあるスリーピーチ(三浦さん)のブログのモデルは、『実はオブジェクト指向ってしっくりこないんです!』であり、スリーピーチ(三浦さん)はみながわさんということを示唆していると受け取られても仕方がないでしょう。実際にそのように受け取っている方もいらっしゃいます。
「高慢と偏見の最終話」のコメント欄からいくつか引用してみましょう。

toanna 2011年2月21日 (月) 23:33 (一部引用)
まとめサイトしても読める!!

まとめサイトというのは『実はオブジェクト指向ってしっくりこないんです!』の炎上部分を示唆していると受け取れます。

音速の気功師 2011年2月24日 (木) 01:27 (一部引用)
あれが論外なのは言うまでもない事実です。それは認めます。

あれというのは誰かは指摘しなくても解るでしょう。

通して読みました 2011年8月 9日 (火) 19:04 (一部引用)
ただ、途中からコメント欄に書いてある(ネタバレ?)を
見ていて、純粋に読み物として読んでいて、つまらなくなってしまいました。
内容がコメント欄とかぶってくるのか、単に例の人を貶めるような内容として、
読み進んでしまったのが、自分としての反省です。

さて、このコメントでは『例の人を貶めるような内容として、読み進んでしまったのが』と書かれています。
貶めるというのは、本文中の

たまに別のWebサイトのコメント欄に、オブジェクト指向批判を書くこともあった。当然、技術的な裏付けも何もない、思い込みによる批判だから、正論で完膚なきまでに叩きのめされてしまう。正面から議論を展開できるだけの知識がないから、スリービーチさんにできることは、「その日本語はおかしい」とか「若い人はすぐに感情的になるから議論にならない」などと、負け惜しみを書くことだけだった。

という書き込みの他、

ソースを調査したコンサルティング会社のエンジニアは、あまりに効率の悪い前時代的なコーディングに絶句したらしい。そりゃそうだろう。私だって、事前知識なしであのソースを見たら驚く。

 「時代錯誤も甚だしい」

 「保守性というものをまった考慮していない」

 「最低でも6カ月を要する、根本的な大改造が必要」

 コンサル会社からの報告書には、このような指摘が続々と連なっていたという。調査の過程で、開発方針が途中で大幅に変更された事実も明らかになり、三浦マネージャは連日のように、専務やら常務やらの前で釈明に追われることとなった。平良さんら何人かの常駐メンバーも事情を聞かれたが、三浦マネージャを積極的に擁護しようとする人はいなかったようだ。中には、あからさまに批判するメンバーもいたらしい。

とか、締めの文章

 高学歴で長い経験に自信を持つエンジニアは他人の話を聞かなくなる、というのは広く世に知られた真理の1つである。

 三浦技術担当マネージャは、そのようなエンジニアの生きた見本のような人だった。

とか随所にあります。その他いちいち抜き出すことはしませんが、『高慢と偏見の最終話』の後半部分、『そして数カ月後。』からを読んで頂ければ解るでしょう。

ちなみに文中にあります『ポリモリズム』は『ポリモーフィズム』の間違いです。みながわさんは『実はオブジェクト指向ってしっくりこないんです!』のコメント欄でポリモーフィズムを数回、書き間違えておられました。それをもじったものだと推測されるでしょう。

これでは三浦マネージャ=みながわ氏が成立し、特定の人物を貶める内容になっているのではないでしょうか?

その他の例(ポリモーフィズムの例)

この小説は、他にも『三浦マネージャ=みながわ氏』をうかがわせると思われるエピソードがあります。
高慢と偏見(3)コードレビューは踊る
の『List userNameList = new ArrayList();』にまつわる論争部分です。

これは、以下のコメント欄の論争から取られていることがうかがわされるでしょう。

http://el.jibun.atmarkit.co.jp/densol/2010/08/post-8443.html オブジェクト指向。教科書と現実のはざまで

このコラムのコメント欄にみながわさんが書き込んでいますが、いきなりAC/DCさんが、みながわさんを批判し、コラム主から注意を受けています。

さて、みながわさん、AC/DCさんどちらがマナーのある人でしょうか?

もちろんですが、みながわさんがstaticが・・・と言い出したらそのときにまた反論すればよろしいかと思います。

さらにflatlineさんが

>たとえば、Javaで、
>List userNameList = new ArrayList();

とコラムの趣旨とは異なる議論を吹っかけています。
みながさんもこれに対して

>ArrayList list = new ArrayList();
>のように基底クラスを使わない例が一般的です。

と応戦してしまっています。

ここで、この”一般的”の趣旨について補足します。まず
 List userNameList = new ArrayList();
の書き方はjavaが出た当時はある意味画期的だったのですが(当時そういう風に紹介している書籍もあった)、他の言語では、良くない例とされています。根拠は「Effective STL」に書いていますしCMPさんと同名の方や他の方も「高慢と偏見(3)コードレビューは踊る」のコメント欄に同様の趣旨のことを書かれています。要するにArrayListとLinkedListの概念を統合・抽象化(Listインタフェース)しても意味がないのです(ほぼゴミ)。そのような訳でして実は、C++/STLや後から出てきたC#ではみながわさんが言ったような書き方 し か 出来ません。
これに”一般的”という言葉を使うことが適切かどうかという批判はあるかと思いますが、java以外の”一般的な”オブジェクト指向言語という意味ではまぁOKでしょう。

flatlineさんは「一般的です」という断定の言葉尻をとらえるのではなくてみながわさんが言っていることの意味(というかその背景)をもっと深く、理解する必要があります。

このような状況下で、flatlineさん個人の感想として、みながわさんのことを『話を聞かない人』と思うのは構いませんが、客観的にみると?と思うわけです。
もちろん、みながわさんも『C#では一般的』と言えば話が進んだのでもう少しコメントするときに考えて頂ければとは思いました。

そういう意味では『どっちもどっち』ということになります。

以上を踏まえて、「高慢と偏見(3)コードレビューは踊る」を読むと、ものすごい誤解から一方的に書かれていることが分かるかと思います。私には何が面白いのかまったく分かりませんでした。

(主人公目線で)みながわさんがオブジェクト指向が解らないから『ArrayList list = new ArrayList();』と書かれていますが、ちがうことが解りますよね。
ちなみにこの「高慢と偏見(3)コードレビューは踊る」でも、

 「ポリモーフィズムです。ポリモリズムでもポリフォリズムでもありません」

 三浦マネージャの顔色が一瞬変わったが、すぐに薄ら笑いを浮かべた。

とポリモーフィズムの間違いのエピソードが出てきています。

以上、『高慢と偏見』がみながわさんのコラムおよびその他のエンジニアライフのコラムの論争のパロディであることをうかがわせるような内容となっています。
このようなパロディは他にもあり、当時の論争を知らない人にはぱっと見て解らないかと思いますが、『高慢と偏見』の本文とコメント欄をみれば、どういうことが解るかと思います。

エンジニアなら技術的な論争があった場合、あくまでも技術的かつ論理的に反論しましょう。相手が聞く耳を持たないと判断する前にもう一度、ご自身の説得力に問題がないか検証しましょう。論争相手を貶めるようなことはエンジニアとしては慎みたいものです。

2012/11/03 加筆、修正
2012/11/06 修正
2012/11/14 修正 質疑応答をアップしました

2012/11/18 コメント欄での指摘を受け、全面改定
2012/12/02 修正
2016/01/31 関連記事をアップしました

[ADP開発日誌]Ver 0.84のリリース

ひと月ちょいぶりのリリースになります。
今回はバグフィックスになります。
また、出荷停止になりましたので、OpenBlocks600D用のバイナリのリリースを終了しました。
もし、OpenBlocks600D用のバイナリーが必要な方がいらっしゃいましたらお知らせ頂ければ追加します。

[ADP開発日誌]Ver 0.83のリリース

またまた、2か月ぶりのリリースになりますが、Ver0.83のリリースになります。
おもな改修点は以下のとおりです。
・バグフィックス
・Cスタイル文字列のサーポートの向上とユニコード文字(\uxxxx)のサポート
・html述語の変更(2引数 URL、結果のサポート)
・パフォーマンスの向上
・バイナリをMAC OSX LionからMAC OSX Mountain Lionへ変更

半年ほど前のリリース(Ver0.79)からMAC OSX Lionに対応しましたが、今回のリリースから Mountain Lionに対応させました。それに伴いバイナリ版で使用している、ODBC-APIをMacPortsからシステム標準のものに変更しました。
動作確認のテストには、MySQLの公式サイトにあるバイナリ版のODBCコネクターVer5.1.11 Mac OS 10.6 64ビット版を用いて行いました。
実は最近MAC(というかsafari)が重いなと思って再セットアップをした関係で、環境が変わったついでにコンパイル環境を整理しました。ちなみに遅くなった原因ですが、
Consoleログをみますと、flashのプラグインが頻繁にハングアップするためでした・・・flashのアンインストールが頭をよぎりましたが、英語の学習ソフトがflashで作られているので、しばらくこの不具合にお付き合いするしかなさそうです。

前回のリリースからさらにパフォーマンスの改善を行っており、今回のバージョンも若干ですがパフォーマンスが改善しています。
パフォーマンスの改修に伴い、実行環境の構造を見直している最中でこれが完了すると先に進めます。
実験的に大胆に改修したりもしましたが、バグバグになって没(リバート)したりと足踏み状態が続きますが、ベータ版をリリースする前の大幅な改修ということで、ここいらで試行錯誤を行っています。ので機能追加は今しばらくないかと思います。

[ADP開発日誌]Ver 0.82のリリース

 忙しさにかまけてブログの更新を怠っていましたが、気がつけば今月末でADP公開2周年になります。公開一周年記念の記事も完成していないのに、時の立つのは速いものだと感慨に浸っております。

というわけで、間が空きましたがVer 0.82のリリースです。

今回の変更点は、
・バグフィックス
・sprintfの改修
・パフォーマンスの改善
になります。
また、今回のリリースからホスティングサイトをSourceforge.JpからSourceforge.netに変えました。

sprintfの改修ですが、詳しくはsprintfのマニュアルをご参照頂くとして、たとえばDBからの戻り値をsprintfで成型する場合に、便利に使えるようにしています。
例えば、以下のように記述することができます。


,db.sql@("SELECT * FROM users WHERE hogehoge ",[]).each.
 sprintf("%s:first_name; %s:secondname;様 の誕生日は、%s:birth_dayです。").
 prtn,next;

DBの取得から成型、表示まで一気に書けるところがAnother Data Processorらしくなかなかよろしいかと思います(自画自賛)。

パフォーマンスの改善ですが、Ver 0.60以来の改善になります。
Ver 0.60から0.81になったことでパフォーマンスが下がりましたが、Ver 0.82は0.60以上のパフォーマンスになりました。

前回と環境が変わりましたので改めてベンチマークをとりますと、

◆Windows上でのJavaScript vs ADP
■マシン
・CPU  Core i7-920(2.66GHz HT/Turbo Boost OFF)
・メモリ 12GB(DDR3-1066 2GB × 6)
・OS   Windows 7 Ulitimate (x64) 電源管理:高パフォーマンス
 
■結果

28のフィボナッチ数を求める時間
 IE8(64ビット版) 452ミリ秒 
 FireFox 13.0.1 12ミリ秒 
 ADP 0.60(32ビット) 343ミリ秒 
 ADP 0.81(32ビット) 452ミリ秒 
 ADP 0.82(32ビット) 265ミリ秒 

0.60と比べても20%以上速くなっています。今回はChromeの結果を掲載していません。またFireFoxですが、12ミリ秒とかなり速いです。前回パフォーマンスについて『FireFox3.6未満』と記載しましたが、残念ならがFireFoxと比較するのは厳しくなりました。

という訳で別の比較が必要になりましたので、ADPと、PHP、Javaと比べてみます。

◆CentOS6.2上でのPHP,Java,ADP
■マシン
・CPU   Core i7-980X(3.33GHz HT/Turbo Boost OFF)
・メモリ  24GB(DDR3-1066 4GB × 6)
・ホストOS Windows 2008R2(Hyper-V)
・ゲストOS CentOS 6.2(実行環境)

■テストコード
 テスト1:28のフィボナッチ数を求める PHPソース(Test1.php) Javaソース(Test1.java) ADPソース(Test1.p)

 テスト2:10万までの素数を求める PHPソース(Test2.php) Javaソース(Test2.java) ADPソース(Test2.p)

テスト2のPHPのコードですが、Stackoverflowさんのコードを使わせて頂きました。

■結果(timeコマンドのuser部分を抜き出した)

Linux(CentOS6.2 x64)上でのPHP(5.3.3)、Java(1.6)、ADP(0.82)の比較
  テスト1 テスト2
 PHP(5.3.3) 207ミリ秒  31,915ミリ秒 
 Java(1.6) 38ミリ秒  4,862ミリ秒 
 ADP(0.82) 190ミリ秒  3,765ミリ秒 

テスト結果をみますとADPはPHP5.3以上のパフォーマンスが出ています。特にテスト2の結果が1桁近く速くなっており、Javaよりも早くなっています。テスト1ではADPよりJavaが圧倒的に速いのですが、テスト2ではADPの方が速くなっています。テスト2のJavaはコレクションクラス(ArrayList)を使っておりその分遅くなっているようです。実際にこの部分を固定配列にすると実行速度は1/10になります(もっともコレクションクラスを使わないという選択肢はないかとも思いますが)。ADPの配列はC++で実装しています。私自身気づいていませんでしたが、かなり効率良く実装されているようです。

また、テスト2の、リンク先のトピックは元々「PythonがPHPより遅いのだが?」という質問でしたがADPのパフォーマンスはそれ以上なのでいわゆるスクリプト言語より速いことが解ります。
もっとも一部のテストからですので今後も色々ベンチマークテストを行い検証しようかと思います。

ちなみに、もっと大幅にパフォーマンスアップが望める改善策を思いついたのですが、かなりの改修が必要なので、ここまでの成果を0.82としてリリースし、より速くしたものを後のバージョンで出そうかと思っています。打倒JavaScriptですね(まぁJITを入れないとダメなような気がするが・・・)。