... or Racket, or Arc, or Clojure (if the Java Virtual Machine or Dalvik turns your crank). All else is
Blub (read the essay; you won't be sorry).
The main difference between C++ and C# (sorry, had to use an octothorpe rather than a sharp sign) is that in C# you have to explicitly declare your Heisenbugs in a single-threaded application by using the
unsafe keyword. Both languages have Bohrbug and ordinary Mandelbug structuring as full-time built-in features requiring no special directives. You're also less likely to open a dot CS file in a text editor to find that the module was actually written in COBOL, Pascal or
LOLCODE (with a header file full of defs and macros making that possible hidden somewhere in the system).