++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

データ処理 補足

leave a comment »

↓このような記事が公開されたわけですが。

何点か補足と釈明を。

選んだ言語について

とりあえず、個人で拾えたのがこの5つの言語というだけであって、その他の言語は読んだ方に移植とかしていただけると幸い。というか、C#以外は最新追い切れてないと思うので、もっといい書き方があればフォローしていただけると助かります。

その際、気を付けて欲しいのは以下の点:

  • 全てのデータ処理を1ループに詰め込まない。パイプライン的に、小さい単位に分ける。
  • 一時バッファーのようなものを作らず、イテレーター パターンで1要素ずつ処理する。
  • x.filter(…).map(…)というように、後置き記法でつなぐ。
  • 以上のことを、利用者視点だけじゃなくて、クラス実装者視点でも考える。

言語のサポートなしでやるのは結構大変なはず。特に、実行効率まで考えるとかなり難易度上がるかと。

一般に、利用者の方が圧倒的に多いので、実装者視点の重要度は低いんですが。標準ライブラリで事足りてるうちは不要な視点ですが、実装者視点の機能が足りてないと、社内フレームワークやサードパーティ ライブラリの質を落とすので無視はできないかと。

ちなみに、Java がないのは、別にハブってるわけではなく、Java にはこの手の機能がないからしょうがなく外しています。データ処理自体はできるんですが、上記の要件全部は厳しいはず。でなきゃ利用者数ナンバー1の言語を外すとかありえない。

C++ は、実装者側が超がんばれば行けそうかな… でも、言語サポートがあるわけではないので勘弁を。

1人じゃ無理

上記の通り、C#以外は門外漢なわけですが。1人で5言語はやりすぎたかなぁとかも思います。

特に、Scala は情報がなさ過ぎて。細かいところは「調べて書く」じゃ厳しいですね。普段から使っていないと。一応、数名の方にはチェックしてもらってはいるんですが。

ということで、みんなで穴埋めしようぜ!

これは、猪股さんが作ってくれたリストなんですけども、こういうとき、Google Docs での共同編集は非常に便利ですねぇ。

その他、まとまりなく雑感

  • データ処理って、対象は何もコレクションだけじゃないんで、O/Rマッパーとか分散データ処理とかpush型データ処理とか考えるとさらに大変なはず
    • 一部の関数型言語で言うQuoteとか、C# でいうラムダ式からの式ツリー生成とかも必要で(さもないと、静的な型チェックとかが犠牲に)
    • push型データ処理はC#の場合Rxがあって、あれは利用側は楽でいいけども、実装側はかなり大変そう
  • Scala、トレイト(中の具象メソッド)は本当に必要なのかな
    • C#の拡張メソッドに対応するものだけあれば実は十分で、それで言うと、拡張メソッドに直接対応するものは implicit conversion で、これだけでよかった気も
    • とはいえ、暗黙の型変換+匿名型ってのも力技過ぎる感じが
  • イテレーター的なもの作るのに setjmp/longjmp か…
    • あれ、スタックの状態とかも全部キャプチャしちゃうし、正しく、効率よく使うの難しそう
  • インターフェイスに対する実装を持つというのの意味:
    • インターフェイス: こういうメンバーを持つべきという規約
      • 例えば、数学だと、群とか環とかユークリッド聖域とか体とか
    • インターフェイスの実装(継承): その規約通りの具体的な実装
      • 例えば、整数とか多項式環とか
    • インターフェイスに対する実装(インターフェイスを引数に取る関数、C#の拡張メソッドの意義): ある規約を満たすなら使えるアルゴリズム
      • 例えば、ユークリッド聖域ならユークリッド互除法というアルゴリズムが使えて、商と余りが計算できる(整数は当然として、多項式環にも互除法が使える)

Written by ufcpp

2011年7月22日 @ 11:05

カテゴリー: 未分類

コメントを残す