There are a lot of C# professionals, and biting you is a random issue. A lot of programs do need to be productive, not necessarily performance driven. C# gives good performance (you didn't come with numbers, what is so slow to you anyway!?) and gives productivity too (seems you agree with this at least).
Originally Posted by Togga
About no way to interact, I think you miss the point, it is done already (like these Qt wrappers). It is possible to interact both ways with C, in fact there is no boxing for most primitive types. The calling callback is really the way of Windows.Forms was implemented in Mono: the libGdi.so is implemented using Gtk+ and Cairo as a C library and Windows.Forms is implemented in managed language (C#) using both way interaction. Mono Windows.Forms is buggy but shows that is done to work with real applications.
My experience is that C# C interaction is really only one-way (ie no INTERaction). Calling .NET components from C is not an easy feat.
If we take the Python example we can pretty easy do object oriented programming where we make an C class inherit from a Python class which inherits from a C class etc. Neither runtime environment knows in which language the object is implemented in, just that it has an C interface. This is nice in multiple scenarios, like testing, extensions, etc.
That is good C interaction and can be quite performant if you put an JIT on the Python side of things. These kind of interactions are very hard to do with a language like C# where you eventually have to go all in or all out .NET to bring down complexity of the interactions.
And this goes for all languages that are able to reach OS threading functionality.
So you said: 2 way interaction is possible, you can share pointers (Pinta does it, like here, where:
is a pointer to a Cairo C surface row and the pixels are written in place.
ColorBgra* dstPtr = dest.GetPointAddressUnchecked (dst_dataptr, dst_width, rect.Left, y);
It works and it works well.