curry.rb

ohaiさんとこより。

http://www.kmc.gr.jp/~ohai/diary/?date=20051120#p01

すばらしい。好きなところの変数を curry 化したかったので、 Boost::bind チックに。

class Symbol
  def bind(*p1)
    proc do |*p2|
      obj, *args = p1.map do |a|
        (a == :_) ? p2.shift : a
      end
      obj.__send__(self, *args)
    end
  end
end

p (10..20).map(&:/.bind(2.0, :_))
p (10..20).map(&:/.bind(:_, 2.0))

Objective-C

また ObjC いいなと思えてきた。 Binary 2.0 は死んだらしいし。というかまた C に飽きてきた。

  • 機能つぎはぎでゲームオブジェクトを作りたいことはよくあるので、 Category とか Protocol とかがゲームとかに向いてそう。(プレイヤーの攻撃を受ける、丸い形状の、画面から出たら消える、プレイヤーに触れたらプレイヤーが死ぬ、とかそういう組み合わせでごにょごにょ)
  • リフレクション強い。たぶんシリアライザとかすぐ作れる。
  • 関数の静的バインディング欲しかったっけ。
  • 最近 GC 欲しい気分。
  • C の遺産使える。
  • C++ の遺産もたぶん使える。
  • ランタイム小さいから Win バイナリ配りやすい。 GNUStep 入れると巨大だけど。
  • 他言語ではわりと特殊な扱いになりがちな OSX でも本場だからたぶん安心。
  • 他 Un*x でも apt-get install gcc-objc してちょ、で終わり。

とりあえずメソッドの列挙。全然 Objective-C じゃないけど。

#include <stdio.h>
#include <stdlib.h>

#include <objc/objc-api.h>

int main() {
    Class cl;
    void* es = NULL;
    while ((cl = objc_next_class(&es))) {
        MethodList* ml;
        for (ml = cl->methods; ml; ml = ml->method_next) {
            int i;
            for (i = 0; i < ml->method_count; ++i) {
                Method* m = &ml->method_list[i];
                if (m->method_name) {
                    printf("%s.%s\n", cl->name, sel_get_name(m->method_name));
                }
            }
        }
    }

    return 0;
}

あと GNUStep 入れて気付いたんだけど libffi に似た ffcall ってのがあるみたい。

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h