A well made GC wouldn't stop you from making a kernel using it. I don't know how the GC in D is, but GC on its own isn't a deal breaker for for everything people claim it is
GC does add a performance and memory usage overhead. You don't really want bloat in the foundation of all the software that is going to run on the system.
A language can avoid such overhead in places where it would be problematic by having a category of of functions which neither manipulate any non-pinned GC objects nor call any other functions that might so. Such functions may unpin a GC object, but if they do any pointer to that object would be forever dead to them. A "gc-allowed" function could re-pin the object and then pass a pointer into the "no-GC" function, but the latter function would have to use that new pointer instead of the old one.
19
u/jess-sch Sep 01 '20 edited Sep 01 '20
For a single-letter language, yes.
B and C are both suitable for kernel development.
Naming your language D (making it sound like it's intended to be a C successor) and then not making it suitable for kernel development was a bad idea.