Open4
C3言語 勉強メモ
C3言語で特に興味深いのは、Zig同様にArena Allocatorを使ったり、スタックを使ったTemporally Allocatorが使えること。下記に記載があるように、既存のmalloc
をArena Allocatorにコード変更なしに置き換えられるのは面白い。
DynamicArenaAllocator dynamic_arena;
dynamic_arena.init(1024);
mem::@scoped(&dynamic_arena)
{
// This allocation uses the dynamic arena
Foo* f = malloc(Foo);
};
// Release any dynamic arena memory.
dynamic_arena.destroy();
Vectorを使うとデフォルトでSIMDが使われるのも、今どきの言語って感じでシャレてる。
int[<2>] pos = { 1, 3 };
int[<2>] speed = { 5, 7 };
pos += speed; // pos is now { 6, 10 }
int[<3>] test = pos.yxx; // test is now { 10, 6, 6 }
speed = speed * 2; // Same as speed = speed * { 2, 2 }
Temporally AllocatorやArena Allocatorについては、FAQのMemory Managementの項が詳しい。
Cとの互換性が高いとのことだったので、Cのヘッダーをそのまま読み込んだりできるのかと期待していたけれど、結局他の言語と同じで変換はできるものの、直接読み込める訳ではない様子。
とすれば、結局 .c3i を生成したり書く羽目になるのは他の言語と変わらないので、ZigやOdinとの違いは言語設計がCに似ているという点になりそうだけれど、C3は既にかなりCと違う点が多く、マクロに至っては完全に別物なので、Cの上位互換と見るかは微妙なところ。