Open4

C3言語 勉強メモ

funatsufumiyafunatsufumiya

C3言語で特に興味深いのは、Zig同様にArena Allocatorを使ったり、スタックを使ったTemporally Allocatorが使えること。下記に記載があるように、既存のmallocをArena Allocatorにコード変更なしに置き換えられるのは面白い。

https://c3-lang.org/standard-library/#scopedallocator-allocator-body

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();
funatsufumiyafunatsufumiya

Vectorを使うとデフォルトでSIMDが使われるのも、今どきの言語って感じでシャレてる。
https://c3-lang.org/faq/#language-features

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 }
funatsufumiyafunatsufumiya

Cとの互換性が高いとのことだったので、Cのヘッダーをそのまま読み込んだりできるのかと期待していたけれど、結局他の言語と同じで変換はできるものの、直接読み込める訳ではない様子。

とすれば、結局 .c3i を生成したり書く羽目になるのは他の言語と変わらないので、ZigやOdinとの違いは言語設計がCに似ているという点になりそうだけれど、C3は既にかなりCと違う点が多く、マクロに至っては完全に別物なので、Cの上位互換と見るかは微妙なところ。