Anyone claiming that C# is a "bad" Java clone has probably not actually been using any modern incarnation of it. Clone? Sure, no argument. "Bad" clone? wat. Java has if anything been playing catch-up with C#, and rather poorly at that.Not surprised considering they're being funded by microsoft to make a bad java clone for non-windows platforms just so microsoft can claim it's "multiplatform"
If you're comparing C#1.2 and .NET1.1, sure, they're pretty cruddy, but those were obsolete like 8 years ago. I can have intelligible conversations with human beings younger than C#2.0.
Miguel and co stated from day one that Mono's purpose was not really to allow porting of Windows apps but to allow the writing of new apps with all the bells and whistles and convenience of C#/.NET. One might as well bitch about how some asshole ported C from UNIX to Windows and why anyone would even dream of using such an unportable abonination to a new platform which couldn't even run all the existing UNIX apps. If you can port some Windows apps, great, but that's a secondary benefit. The vast majority of Mono-using applications are not meant to run on a Windows desktop at all, most of them being mobile applications.I can safely say mono is a piece of garbage, and "write once run anywhere" will NEVER apply, you will have so many issues trying to port a .NET app to mono(entire features flat out not implemented, buggy frameworks, many libraries that are .NET only, etc)
Uh, no. That is complete nonsense you either just made up or regurgitated from someone else who made it up.It's becoming even less relevant as microsoft is (slowly) killing off .NET because they realize the mistake it was instead of just rewriting their *awful* native API.
WinRT does not obsolete .NET. It sits below .NET because it's a low-level systems library, the same way that glibc sits below Qt5.
D has almost no ecosystem. This is what language hipsters always seem to forget. The developer world at all gives _zero craps_ about the syntactical niceties of D, Rust, Go, whatever. They care about a huge standard library. They care about deployment options being common on third-party hosting platform. They care about IntelliSense and auto-documentation and static anaysis tools in IDEs. They care about oodles and oodles of online articles, documentation, libraries (free and paid), and tools. They care about interoperability between components written by third-parties. They care about being able to start a project and having a huge base of people to hire from as they grow their team. They care about all the things that takes years and years to build up (as it did with C#, though certainly less years than usual thanks to Microsoft massive marketing arm). This is why C and C++ of all things are still the de facto standard languages for native code development despite how antiquated and at times outright horrific they can be. Let's not forget that D is almost 3 years older than C# to boot, and _still_ has gained almost no traction in the myriad of industries that C# is now a mainstay of (or really any industry at all).I'm not sure who mono appeals to, but if you decide you want to use C#/mono maybe reconsider and give D a look instead... or just use regular Java instead of Microsoft's offbrand Java.
Let's break it down in a way that matters to Real People:
Jobs you can get as a C# programmer: 8919 from just one source
Jobs you can get as a D, Go, or Rust programmer: 0? Not even listed as options on Dice, LinkedIn, or any other site I can think to try
Telling a programmer to pick D over C# is roughly equivalent to telling them to go die of starvation in a cave. Not very nice.
That doesn't mean that C# is empirically better than D, no, but it is indicative.
And honestly, D really isn't that nice if you try using it for anything larger than a small hobby or research project. A lot of the decisions going into D's design are dubious at best. Not only is it severely lacking in tools, it always will be due to its tools-hostile design. It's in many worse even worse than C/C++ and their macros when it comes to writing proper tools. Whoever came up with the string mixins of D needs to be shot in the face with a poison dart. "static if" is almost as bad. Language designers who know what they're doing write languages closer to C# which has an almost religious attention to tooling support. Or take the Clang guys at Google, who make sure they bring up tooling support issues with new proposals at the ISO C++ meetings to try to avoid any further brain-damage from the camp who doesn't get that the cutting edge is longer about the manipulation of semantically-inert text buffers. There's ease of dumping out a toy quickly and then there's ease of maintaining a real application.
C# never really caught on with windows for user applications either, though, because the slow startup and memory costs associated with it, like java, seemed to doom that from ever happening. But it's big in business apps and server side where that stuff doesn't really matter much and development speed (RAD) does, since your major cost is paying developers labor costs.
The problem is that most C# programms aren't realy portable cause of P/invokes or WFM.
Another thing that is a bit annyoing is that Winforms look like crap.
It's a preference thing, of course. I prefer a consistent form to a bunch of random, haphazard constructs that were supposedly designed to make my life easier. (IOW, for me, keeping the functional aspect of the language straight is a better benefit than allowing me to write an iterative loop w/ fewer characters.) Or, to put it more plainly, I have OCD.
The other big downside of C# is that it tied you to Windows, which to me was a huge downside, and pretty much a non-starter for server-side code. But I think for desktop-type applications this would be a large benefit, and especially w/ the native Windows look.
I'm not much of a code snob (I'll even do PHP, which is an awful language)... but I really can't stand what they've done to Java.
The other aspect of it all was that C# was a reaction to Java at a time when the power struggle for dominance and coinciding politics was really predominant in the industry. Microsoft was just coming out of the big monopoly controversy. I guess I was a *nix guy at the time. (I wouldn't really consider myself that; I just didn't think *nix platforms should be excluded from the public conscious.) I really couldn't figure out why developers were throwing their eggs into the Microsoft-exclusive basket.
Here with Java we finally had a cross-platform tech that could have really shaken up the industry and............... nope. C#. Pretty much solidified Microsoft's monopoly.