Note that "var" is a typedef'd "void *". This essentially bypasses C's typechecker for libCello code. The author admits as such, and maybe that's just fine for what you need to do, but you should be aware of it.
I personally have no problem with it (other than the syntax needed to unbox/rebox values). I find that having the freedom to use a type system or not a very compelling feature in a language.
That being said, I understand why it might sit very poorly with some.
Source: someone who hasn't done much C and only a little bit of Go. So take it with a grain of salt.
For example, ’alloc’ and all ’init’ returns it.
non
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
with struct objc_class {
Class isa;
/* objc v1 members omitted */
};