I think the reason for it being soo large is that the GC is shared across all the .NET versions, so having it in one file has some advantages.
See https://github.com/dotnet/coreclr/issues/408 for a discussion on reorganizing it.
> In #401 @cnblogs-dudu referenced a post explaining that the GC was machine-generated from LISP. Since gc.cpp is not a real source code (just intermediate code), but the lisp code is, should it be more useful to publish the lisp source and the transpiler (Source-to-source compiler) for LISP -> CPP?
There's a reply from a Microsoft employee that seems to confirm this, see https://github.com/dotnet/coreclr/issues/408#issuecomment-78...
https://blogs.msdn.microsoft.com/patrick_dussud/2006/11/21/h...
I thought I knew a thing or two about .NET, having used it since beta days, I had no idea LISP was used to bootstrap the original GC code. Fascinating stuff.
I've archived it here just in case:
Patrick is also interviewed on Channel9 and he talks about the GC. Not watched it yet:
https://channel9.msdn.com/Shows/Going+Deep/Patrick-Dussud-Ga...
There's absolutely no reason they should be in C# and encourage bad coding practices (like overly long .cs files). Even if you need all your code in a single class, you can shard that class across several .cs files to make organisation and maintainability easier.
Regions are just a crutch people use to allow them to create 10K+ line .cs files that will eventually become a maintainability nightmare (as well as making merges/check-ins/finding things more annoying in general).
Only region I'll use is the built DEBUG one and I only use that to create:
private bool IsDebug()
{
#if DEBUG
return true;
#else
return false;
#endif
}
Stackoverflow answer for why regions are bad:
http://softwareengineering.stackexchange.com/questions/53086...