Hopefully this is a nice quick question to answer.

Which language is considered to be the defacto language for writing hobbyish operating systems from scratch, that also supports the creation of 512 byte boot sectors? I'm assuming plain C is the answer, although I have this vague concept in my head that C++ can also be used. Do any of you have any opinions about alternative but potentially superior languages, given the passage of time? Would others highly suggest plain old assembler?

And, following on from your answer, what free (and perhaps even open source) compiler would you recommend for compiling the source code into binary?

PS: I am fully aware that writing an OS is a very challenging task and I'm sure I'll never finish. I am conducting a personal-interest research task and would like to at least create a MBR and very basic kernel with simple console IO.