So che questa risposta è in ritardo per la festa, ma ne ho ancora un po 'da aggiungere.
Go è significativamente più alto di C / C ++ / D: non ha gestione manuale della memoria, ha un ambiente di runtime significativo e utilizza più memoria in generale. Non vorrai scrivere un kernel in Go perché dovresti prima trasferire il (grande) runtime nello spazio del kernel. Se lo facessi, probabilmente incontrerai problemi di prestazioni difficili da risolvere poiché Go non è così intuitivo come C.
Credo che D sia inteso principalmente come sostituto di C ++. Il ruolo di C ++ è stato in gran parte come un linguaggio di programmazione di sistemi / librerie di livello utente. In parte, questo è dovuto al fatto che C era già dominante nel kernel quando C ++ ha iniziato a diventare popolare. L'altra parte è che il runtime di C ++, per lo più limitato all'allocatore di memoria, deve essere portato anche al kernel. Ci sono certamente stati molti progetti C ++ nello spazio del kernel, ma non è dominante lì.
D si è posizionato per essere un eccellente linguaggio di scrittura in biblioteca, e ha limitato la sua utilità nel kernel richiedendo un runtime più ampio del C ++ (o certamente di C). Se lo sminuisci un po '(senza GC, senza librerie standard, senza variabili thread-scope, alcuni significativi segmenti di codice non sicuri, ...) puoi farlo girare nel kernel easily , ma poi ti stai liberando di molti dei suoi miglioramenti rispetto al C ++.
Tuttavia, le sue caratteristiche prestazionali e la capacità di scrivere codice di basso livello sono eccellenti e (più o meno) corrispondono a quelle di C o C ++. Lo raccomando in particolare per i progetti a livello di utente, ma ci sono alcune grandi cose che può essere aggiunto a un progetto del kernel (anche se alcune delle sue funzionalità più interessanti non sono facilmente accessibili lì).