kubo39's blog

ただの雑記です。

functionとdelegate

D言語にはfunctionとdelegateというよく似た使い方をするものがあります。

functionはただの関数ポインタ(Cとだいたい同じもの)ですが、delegateはclosureに対する参照も保持してるので必要となるメモリ量が2倍になります。

import std.stdio;

void func_for(void function() f)
{
  writeln(f.sizeof);
}

void delegate_for(void delegate() d)
{
  writeln(d.sizeof);
}

void func()
{
  // empty.
}

void main()
{
  func_for(&func);      // => 8
  delegate_for(() {});  // => 16
}