http://d.hatena.ne.jp/m-hiyama/20130411/1365670956#c1365738084 にてnononoさん曰く:
GraphVizをパンクさせる階層構造とはどういう規模での代物で、パンクしない程度までデータ量落とした段階でどれだけ凄まじい見た目になるのか。
そういうわかりやすいモノに(お話として)興味があります。
ある程度の規模のソフトウェアだと、名前の数がウン千個くらいになるのは別に珍しくはないと思います。我々のCatyでも、名前が千を超える状況は起きてしまいます。データ量(名前の数)を落とすことはできてません(それで困っているのですが)。したがって、GraphVizでうまく描けないので、ビジュアルでお見せすることは無理ですが、単純にノード数を勘定することくらいはできます。
まず、普段僕が使っているCatyのインスタンス(プロセス)がホストしているアプリケーションの数:
caty:root> apps | list:length
37
caty:root>
37個のアプリケーションがあります。普通はこんなにたくさん抱えちゃダメですが(数個に抑える)、サンプルやテスト用があるので。
アプリケーション内のメタオブジェク(型やコマンド)の個数を勘定するコマンド(スクリプト)を書いて実行してみます。Catyコアも1個のアプリケーションとみなせるので(多分、最大のアプリケーション)、このなかを勘定すると:
caty:root> t:count-mos caty | t:flatten-count | num:add
676
caty:root>
メタオブジェクにはすべて名前が付いているので、ひとつのアプリケーション内に数百個の名前があることになります。数が多いだけで負担になります。
http://d.hatena.ne.jp/m-hiyama/20130411/1365670956#c1365738084 にてnononoさん曰く:
たとえば100個のモノイドという例えだと、それらに名前を付けるのは確かに大変だけれど、そういう場合は普通配列の添字で表現する(から問題ない)よね
もともとの話が、「人間はバイト列や整数値による識別には耐えられないので、自然言語に基づく意味的連想を必要とする」から出発しているわけで、配列の添字で済むなら、上記のメタオブジェク達も「0番から675番」で識別しますよ。スキーマもスクリプトもすべて数値の羅列になるので、超難読で超コンパクトになるメリットはあります。
誰も興味を持たないでしょうけど、メタオブジェクを勘定するコマンドと t:count-mos caty の出力は http://d.hatena.ne.jp/m-hiyama-memo/20130413/1365823822 に貼り付けてあります。