Azért nem praktikus, mert a két nyelv esetén eltérő forráskódot is ír az ember.
Az 1-es típusú nyelvben neked kellene "if (xyz == null)" ellenőrzéseket a kódba tenni (különben sechole), a 2-esben nem (legalábbis sok esetben fölösleges, redundáns).
Az 1-es típusú nyelvben a runtime-nak nem lenne muszáj eltárolnia a tömbök méretét, ergo neked kell olyan adatstruktúrát definiálnod, ami tudja a saját hosszát (különben sechole), a 2-esben a gyűjtemények tudják a maguk hosszát (illetve te is tárolhatod, de teljesen fölösleges).
Egész más forrást ír az ember, ha van GC, mint ha nincs.
Más megközelítés. A sok pointer mágia miatt nem hiszem, hogy egy C-szerű nyelvet lehetne biztonságosra fordítani. Viszont egy C#-szerűt lehetne nem biztonságosra, ha eltávolítod belőle az ellenőrzéseket. Szerintem nem lesz sokkal gyorsabb, viszont nem lesz értelme. Nem lesz gyorsabb, mert pl. a C# szintaxisa és VM-je elég magas szintű dolgokat is enged neked, ami egy gyenge rendszeren mindenképp lassabb lesz, mintha tök nyersen implementálnád optimalizálva ugyanazt. És nem lesz értelme, mert egy magas szintű nyelvben az embernek direkt nem kell csomó mindenre odafigyelnie, és az overhead nélkül nem tudna működni. Nem csak ellenőrzésekről van szó, hanem pl. osztályok közötti öröklődésről, reflection, stb.