Mono Outpaces Java In Linux Desktop Development
dp619 writes "Mono, a framework based on Microsoft technology, has become more popular for Linux desktop applications than Java, but recent changes could strengthen Java's hand, SD Times is reporting. The story also touches on the failure of Linux distros to keep pace with Eclipse."
but recent changes could strengthen Java's hand, SD Times is reporting
OK, I've glanced over the article twice now, and can't see anywhere where they bring up what could be strengthening Java's position in the future?
I'm assuming it's updates to Eclipse, but they never state it explicitly, just that some Linux distros have weaker IDE support compared to MonoDevelop? *shrug*
Beware: In C++, your friends can see your privates!
Of course not. Java hasn't improved over time. It is exactly the way it was in version 1. All you can build with it is very slow animated buttons and stuff for web pages.
Are you kidding me? Comparing Java 1 with .NET (which is a copy of Java 1.4 without maintaining backwards compatibility)?
This is like saying touch-enabled applications have made great gains in iPhone application share.
Or that there are more MFC apps than Java equivalents for Windows productivity.
Heh? Someone bought tickets to the spin train.
A lot has changed in the last 10 years. Your comment is very telling, and not very helpful. It's so bad, it's not even wrong. I'm sorry that's what you think.
With .NET, there is loads of stuff built in so I am not doing a lot of low level coding.
There are orders of magnitude more stuff "built-in" to Java (the platform), 3rd-party stuff, independent implementations, and it's had a good decade and a half of hardening in real-world situations (top businesses etc.)
gcc even has a java (the language) compiler now (OK for about 5 years) that generates native machine code (what everyone used to whinge about) and there are independent implementations of the Java libraries (e.g. GNU Classpath).
Mono needs to die a death. Please ignore it and hopefully it will go away.
Stick Men
The difference between Eclipse 3.4 and 3.2 is night and day when you actually use it.
Just because it looks the same (a shock to people who might want to change their hentai GTK theme every week) doesn't mean it is the same.
It's like those idiots that uses Java 1.1 in 1998 and think that Java 6 is pretty much the same.
RedMonk analyst Stephen O'Grady, the guy being quoted in the article, is a Microsoft shill. And the whole article is filled with FUD.
Please see this.
Yours In Parentheses,
Kilgore Trout
...Packaging has also been a detriment to Java on Linux, said O'Grady...
To this, [Linux] zealots will defend the status quo saying choice is working for Linux as if there are no draw backs.
This same problem is being reflected on the choice of desktop environments. No wonder after a decade of "Linux on the desktop", we in the Linux world still command a very small percentage of active users of desktop Linux. Some say we are irrelevant. It's sad.
Keeping themselves on the Swing train instead of evolving things like SWT was among Sun's greatest mistakes IMHO. :(
It looks horrible on all platforms, because it needs to work on all platforms without using native controls.
Sure, it's *hard* to make native controls work out well in cross-platform apps, but with enough thought put into it, it can be done pretty well after all. Qt is quite successful, for example. There have been apps I've thought was native using Win32 or GTK, when they were built on Qt. And then I'm a nitpicking guy that often notice when the pixels are off. Running Swing is like watching a puke dry in comparison. For no special reason, because it's shown that native-like controls can be done quite successfully.
Beware: In C++, your friends can see your privates!
Oh give me a break. For server-side development Java is still king in the performance and feaure department. Perhaps Mono/.NET/MS it catching on, but that's only due to comprehensive copycatting of Java technology.
Although I agree we shouldn't underestimate MS copycatting...
My biggest reason for C#/.Net instead of Java?
Visual Studio
I quota from TFA: "Eclipse 3.1 lacks features that MonoDevelop has, including code completion, integrated debugging, refactoring, and unit testing capabilities"
Excuse me !? That stuff was even in Eclipse 2.0. Claiming a Java IDE without code completion exists is just stupid.
Another quota from TFA "Most Java developers on Linux use JetBrains IntelliJ, he claimed. IntelliJ is a commercial product that is not open source."
Who says most developers use IntelliJ, I personally know NONE. Everybody I know is on Eclipse or Netbeans.
I'm not even going to bother with the rest of the article. This article is written by one bunch of ill informed people.
How much money do I need to pay to get an article on the frontpage ? Do I get a volume discount if I want five of them ?
"Outpaces" is one of those sketchy words often used to describe comparative speeds. It is almost a sure sign of a release designed to manipulate public opinion.
e.g.: If Microsoft is growing at 3% annually, and my small one-man software company is growing at 20% annually -- I can put out a press-release saying that I'm "Outpacing Microsoft". But that doesn't mean I'm creating real competition for Microsoft.
Disclosure: I haven't RTFA -- I'm just calling b.s. on semantics...
------ The best brain training is now totally free : )
Nothing to see here. Move on.
Well, except that in reality there are lots of implementations of non-Java languages for the JVM, several of which (Jython and JRuby, among others) have Sun resources behind them, and some of which are even Sun created (Fortress, JavaFX Script.) There were non-Java languages for the JVM before .NET existed.
That sounds about right from my last excursion with Java :-P
Mono is becoming popular for Linux development because it does not try to be cross platform. It feels much more natural than Java programming.
It rained here this morning, that means it must have rained all over the world.
I don't program in either, so I can't speak to the advantages from the development side; but I know that with Mono/.net apps, I've never experienced that 'Oh, crap, this is Java' feeling that I feel about twenty seconds after launching a new program.
I know that, theoretically, java apps are fast, compile well, and so on... but in practice, they just feel like trudging through sludge. Every single time. Perhaps that's just because I'm dealing with them on the desktop, instead of on the server... but still, when I've got dozens of examples and it's invariably true, it eventually stops being anecdotal and starts becoming data.
...and we've had almost no exposure to the GUI packages in Java or C, which have a bit of a learning curve even for the educated.
Actually, GUI programming in Java via Swing is really quite nice. There's a little bit of a learning curve (not so much if you're already familiar with the GUI event model), but you can pick it up really quick. C on the other hand...I havn't really had any direct experience with creating GUI's in C/C++, but if I had to I'd probably pick up Qt (especially after Nokia LGPL'd it), as from what I hear it's quite a pleasure to work with.
The Banshee guys, the Beagle guys, the Blam! guysm the Diva guys, the DotNet BlogEngine guys, the GNOME Do guys, the F-Spot guys, the FusionFall guys, the Graffiti CMS guys, the iFolder 3 guys, the KeePass 2 guys, the Second Life guys, the MonoTorrent guys, the Muine guys, the PHP4Mono guys, the Smuxi guys, the Sky Net guys, the Unity guys and the VistaDB guys. Just to name a few.
Java is dying. Python is good so is C#. I love attributes, LINQ, Master Pages, etc.
I'm not an MS fan, but C# is just so nice.
For the record I'm writing this on my debian sid laptop using Iceweasel.
Programming is fun. Did you know that rabbits aren't rodents? Storm clouds are the ones they call cumulonimbus. I forgot to bring lunch today so I ate my hat. In "Transformers: Masterforce" they showed news clippings in which the Destrons were referred to as "Decepticons", that seemed like a nice nod to the Transformers we knew in America... I'm going to write an Emacs clone that uses Brainfuck for its scripting.
Bow-ties are cool.
You obviously don't work with .NET on a daily basis. Same crap different syntax, different names on the box..
Why bother
.NET is an extremely popular platform.
Tragic, isn't it?
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
>> Think of network sockets, file access, threads, and a bunch of other things that quite frankly are annoying to do in C or C++.
You're just using the wrong C++ libraries.
Using Qt I can do all the things you mentioned and just about everything else in the C# and Java class libraries. Cross platform, without the performance and resource penalty of a virtual machine. Also the final product will appear more native on more platforms than C# or Java.
Also because of Qt's design, I barely have to bother with memory management in my GUI apps. So far I'm averaging one delete statement per 1000 lines of code. Everything else is cleaned up automatically. If I thought a bit harder about my design I could probably get rid of most of those deletes as well.
You obviously don't work with .NET on a daily basis. Same crap different syntax, different names on the box..
I use it almost every day and in many ways I prefer it to Java (though I use Java often too for certain things it does better). I never get why people cares so much about what languages other people like to code in.
You might want to research before posting next time. There are more JVM-based languages than there are CLR-based languages.
"Eclipse 3.1 lacks features that MonoDevelop has, including code completion, integrated debugging, refactoring, and unit testing capabilities, Hargett claimed. "I've found in my consulting that people who install Eclipse 3.1 through the [Debian] package manager say, 'This is terrible.' " He said that customers that have installed a version of Eclipse beyond 3.1 like it."
Just out of curiosity, I just downloaded a copy of Eclipse 1.0. This build is from November 2001.
http://archive.eclipse.org/eclipse/downloads/drops/R-1.0-200111070001/index.php
For the record, it has code completion and integrated debugging. I do remember back in 2004 thinking IntelliJ IDEA's refactoring support was far better, so I suppose that was roughly the 3.0 timeframe. I guess I could track the JUnit plugin history and see which version of Eclipse started including this, but I think I've already made my point. I've got nothing against Mono, but geeze, what a load of BS...
After all the years of just how invincible and all powerful open source is it is staggering to look at how easy it was to stop it dead in its tracks:
A simple fork of the current main desktop package and the Linux world has been wasting their time in KDE vs Gnome flamewars for years now.
And then you had Sun performing the thankless task of keeping Java free from destruction by Microsoft while the stupid little kids here on Slashdot were screaming about how Java isn't 'GPL'.
And now the Linux community is actually starting to willingly include a Microsoft patent mess right into the heart of distributions - and for what? A few shitty and poorly written apps that already have faster, lighter, and better C++ versions.
Anyone see Apple fucking around with Mono? Nope.
Anyone see Google fucking around with Mono? Nope.
You would either get laughed at or outright fired if you made such an inane suggestion.
But the Linux community never fails to seize an opportunity to shoot itself in the foot.
Think of network sockets, file access, threads, and a bunch of other things that quite frankly are annoying to do in C or C++.
Not if you use Qt which has all of those and more in addition to the GUI stuff.
Qt is a cross-platform library, not just a GUI library.
Qt-based apps run on Linux, Windows, Mac, Solaris, Symbian S60 ...
What are you using for the GUI in Mono? Windows Forms? You could have the full power of Qt via Qyoto...
The story also touches on the failure of Linux distros to keep pace with Eclipse.
What does that even mean? Does anyone ever get their eclipse from the distro?
Eclipse installation is an unzip... I mean WTF does that mean?
XML is a known as a key material required to create SMD: Software of Mass Destruction
If your idea of Cross Platform is API's designed for Windows with all other platforms being an afterthought...
Yes they do. A handwritten recipe for cookies is executable, it just runs on a different class of machine.
Nope.
C# right now has the following features that are absent in Java:
1) LINQ !!!!
2) Delegates.
3) Anonymous types and type inference.
4) Reified generics.
5) Support for dynamic methods.
C# 1.0 was just a carbon copy of Java. C# 3, not so much.
Actually it did not rain here today so I am highly dubious about you're claim that it rained where you are.
Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
Swing is nice if you understand GUI programming. What the GP was saying, is that for those who have had very little exposure to GUIs in general, learning a GUI toolkit that requires you to understand event models, widget placement, and the rest of the "theory" of UI, is a bit brutal. Of course, once you grasp the basics, Swings' "everything is really a container when you get down to it, even non-container components" model is quite slick. .NET however has a much smoother learning curve. You can do most basic apps with just drag, drop, double click. Then later on you can move on to the more advanced models. While Java IDEs do have very powerful GUI editors, they still require you to understand much more, not unlike .NET's WPF. And WPF is also brutal on those new to UI.
"C# is VB with C syntax."
Sorry. You don't know a shit about C#.
Write any app you want with any language you choose. Run it on anything you wish.... But if it is mono-based or has any mono-dependency whatsoever, it's not going to run on any hardware that I own. I avoid mono-apps and won't install any distro in which mono is a part of the default install. I'll believe mono is safe when I see Steve Ballmer, Richard Stallman, Steve Jobs, and Theo de Raadt singing "Koombaya" together on the same stage.
... this system is going down permanently ...now
;-)
kws@frozenhell~$ man Ballmer+Stallman+Jobs+de_Raadt
kws@frozenhell~$ segfault
If you want your life to be different, live it differently.
C# is VB with C syntax. VB is Microsoft's bastardized version of Java.
JDK 1.0: Jan 1996
VB 1.0: May 1991
VB was at 4.0 by the time Java was released.
If by "VB" you mean VB.Net, I would say it's the reverse: C# is Microsoft's "bastardized version" of Java (though mostly better IMO), and VB.Net is C# with VB syntax.
Swing used the abstraction from the OS -because- of the inter-OS incompatibility between widgets. AWT uses native OS widgets throughout if that's your bread and butter. They subsequently added OS theme engines back into Swing due to the inconsistencies between everything. I don't have a problem with swing as it is at this point. Since 1.5's metal, the platform agnostic look and feels have really come upon their own. SWT has a few bases filled in by containing a larger set of widgets, and arguably better set of API's for some of them. I'd consider myself a java guru, and I still run into roadblocks extending existing swing components to add some new crazy behaviour. I can't even say if that's possible in other toolkits, but its not trivial in Swing.
Bye!
By that definition, both produce surprisingly lean executables.
http://www.mhall119.com
Actually, it was a precipitation superposition here today, so I find both of your claims highly suspect and extremely plausible.
"I know that every word that man just said is true, because it's EXACTLY what I wanted to hear." -- Space Ghost
This must be a meaning of the word 'only' that I wasn't previously aware of.
MP3 Search Engine
How many application servers have you got where you can run C# servlets?
How many companies use C# to write Enterprise-level servers?
What does C# give me that Java doesn't?
Unless all of the above have a positive and constructive answer, I don't see any point why I would learn another language for my Open Source projects/contributions when I'm an expert on Java due to my day-time job. This article is bullshit.
Java vs C# is the wrong comparison to be making when it comes to what is "better" to develop on. What should be looked at is the JVM vs CLR. This is where the real power of these two languages, and the others that run on them, comes to light. Languages and libraries can be made, but if the underlying VM doesn't support certain features, no syntax will make up for it. And, in my opinion, the CLR is slightly ahead of Java when it comes to power, mostly because of the support for generics at runtime, whereas the JVM doesn't (Java generics are type erased at compile time).
A major fault that I've seen in numerous sub-threads is the idea that a Java user interface equals Swing. It most certainly does not. Swing is merely Java's complete pure-Java (i.e. cross-platform) user interface geared towards providing a unified look-and-feel. In this respect, it does a good job. While there's nothing inherently wrong with it from a toolkit perspective, it is absolutely not appropriate for usage on the Linux desktop.
Programming for the Linux desktop means more than producing a windowed application; one must integrate their application, both in terms of user interface consistency and application interoperabililty, with a major desktop distribution. Specifically, I'm talking about Linux's "big two" desktop environments, KDE + Qt and GNOME + GTK+. While each of these environments have their preferred languages (C++ and C respectively), many other languages have no issues whatsoever being tightly integrated into them via bindings.
Java is no exception! In Java, I can program a wonderful GNOME/GTK+ application just fine with java-gnome. Similarly, I can program a Qt4 application with Qt Jambi (although I can't seem to find an equivalent KDE4 bindings library) in Java. An application written in either will appear and operate on par with any application written in other languages, either natively (via C or C++) or via another bindings library (Python has a ton of bindings).
Furthermore, just like GTK+ and Qt have cross-platform capability, so do the bindings, and if the appropriate binding library for a given platform is installed on that platform, the Java application, too, will be able to be cross-platform without modification. This is, of course, the job of the distribution and/or installer software, but operates similar to the Deluge (Python) installer for Windows, installing the client port of the toolkit (GTK+, in this case) and the language bindings (PyGTK) alongside the application.
That's exactly how the Mono desktop applications work: they write their logic in native C# and use GTK+ bindings (GTK#, in most cases) to integrate with the Linux desktop environment.
Any Java application written for the Linux desktop that uses Swing over native desktop bindings is foolish. Each has their place, for sure, but on the desktop integration is everything.
I love C#/.NET/Mono, the platform is excellent and the languages great. I also work a *lot* with embedded java and NetBeans - its ok but I do feel Java is inferior to C#.
However that article was seriously crappy. MonoDevelop is nice and shows potential - but its a toy compared to Eclipse, NetBeans or Visual studio, I would never consider it for enterprise development or a project of any size, I'd rather work with cmake and Kate. When we see C# support integrated into KDevelop4 we might see a decent C# IDE on linux.
And those bizzare comparisons of project numbers - weird. And is it just me or was the grammar and sentence construction erratic and disjointed.
I want to see more mono on the desktop and server in Linux, articles like this don't help.
200+ is for all the developer goo.
The Client Profile for .NET 3.5 SP1, which is all that's needed to install a .NET app on a machine that doesn't have .NET 3, is 28 MiB.
http://msdn.microsoft.com/en-us/library/cc656912.aspx
And Silverlight is less than 5 MiB if the app can run entirely in the Silverlight sandbox.
Mono is 75 MiB on Windows, 56 MiB on Mac, . Moonlight is (really?) 941 KiB.
My video compression blog
Friend, I _wrote_ a JVM implementation.
I know how garbage collector works in Sun JVM to the level of assembly language generated for write barriers, I know how HotSpot compiles byte-code, etc.
Well, the current C# is not very much like Java. It's actively moving towards functional languages (while Java is not moving anywhere) to the point where you can write purely-functional lazy-evaluated functions as LINQ expressions, something crazy like this: http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx
VB is not a bastardized Java, it's a separate language (quite powerful in its VB.NET form), related to C#. It even has a few features not accessible from C#.
The beauty of the Linux community is that people can work on whatever the hell they want. Why should I care if someone wants to write a program using Mono? People writing software should use whatever tools they think would be best. And I'd guess that the people complaining about Java not being GPL aren't the same people using Mono. Stop trying to lump all open source users/developers into one group. People use it for different reasons.
The fact that posts like yours get modded up here ashames me.
So the facts that Qt and Java's licensing were problematic due to copyright concerns (y'know, those things pretty much the entire world recognizes thanks to the Berne Convention) are just a triviality best ignored, while Mono's alleged "patent threat" is a serious problem despite being at *best* limited solely to the US and Japan?
And somehow the fact that the NIH poster-child Apple isn't using Mono is supposed to support your point, despite the fact that they've got the WORST support for Java in the entire industry, prefering instead to push their own little C fork?
Its obvious you have an axe to grind, but thats no excuse to ignore factual information and logical arguments.
No problem is insoluble in all conceivable circumstances.
You have just got to be kidding. For Windows it's just a .zip that you unpack, then run eclipse.exe. Make a shortcut if it helps. For Linux it's a tar and you can use a graphical archiver for that too. If a "software developer" can't work that out, I don't want to be anywhere near their code. It takes more clicks just to create a new project than to install Eclipse!
Sam ty sig.
C# right now has the following features that are absent in Java
Right now Java has the following features that are absent in C#:
1) High performance VM
2) Code that does what it says without hidden conversions, text substitutions, and macros.
3) Other languages that are actually useful like Scala and Clojure.
Mono performance is a joke compared to Java, and MS CLR performance is even pretty bad in comparison. Code that is a one-liner because of lots of magic conversions and macros (like 'extension' methods) collects fanboys, but is counter productive for real, boring, meat and potatoes coding.
And LINQ? Why are you doing database and 'data sources' queries in something like C#? Use python or something like that. You need that super-fast JIT "cc -O0" speed to print out customer numbers and such?
Basically Java:C# :: C:C++. It's the same story all over again, but for typesafe languages instead of the systems code. C# thinks that making the code a concise series of magic conversions and convenient syntax makes it a better language. Java thinks that having code be straightforward and simple, but longer, is better. C has a solid niche, and will for decades. C++ is widely recognized as a byzantine failure in every case. We'll have to wait and see with Java and C#, but I know where I'd place my bets.
Who names an application framework after an infectious disease?
Could you cite an independent legal opinion that states the "community promise" is binding?
The world's burning. Moped Jesus spotted on I50. Details at 11.
There is no patent mess.
You were saying that before the "Community Promise". Funny, right?
And yes, the "community promise" doesn't make your statement true. The "Promise" only covers ECMA 334 and 335 (C# language and CLI), as you're well aware.
Astute readers will point out that Mono contains much more than the ECMA standards, and they will be correct.
- Miguel
Indeed, Mono is officially being split in half. But you already knew that.
Fact is: Java and .NET can do pretty much the same things and it mostly comes down to prefference
C# and the CLR are a superset of Java and some of the extra features are essential to many people: value types, multidimensional arrays, real templates, unsafe modules, better multi-language support, direct calls to C, and excellent bindings to native libraries. And the fact that C# encourages use of platform specific libraries is a big advantage to many.
So, I think in many cases, it's not preference, it's driven by requirements. I can't imagine doing another big project in Java because on every project, one or another of Java's limitations has ended up causing lots of trouble.
Could you cite an independent legal opinion that states "mono faces patent problems beyond the average open source project".
.NET is actually FASTER on Windows than Java. Mono is about 15% slower, which still isn't bad, since it takes up far less RAM than Java in 64 bit mode.
There are no "macros" or text substitutions in C#. You can inspect IL fairly easily using Reflector.
LINQ kicks ass for just the functional aspect of it.
Sorry, dude, you're talking out of your ass.
Both the JVM and the CIL engines can be used to run any programming language you want. They are both turing complete systems, so there is not really anything that will prevent you from targeting any language to run on top of either one of them.
The difference is that the JVM was designed for Java, and Java only.
The CLI originally ran a variation of C++ (they internally called it SMC, or "Smack") and later they created C# and retargeted VB to run on top of it.
But even before this went public, they launched an effort called "Project 7". The goal of this group was to port 7 proprietary languages and 7 research/open source languages to the CIL engine and learn from the exercise what changes were required to make the implementation more efficient. A large number of changes went directly into .NET 1.0, and they allowed the CIL to be a more efficient runtime for running C, C++, Eiffel, Fortran and Cobol than the JVM could. Direct memory manipulation, arbitrary vtable layouts, tail call optimizations all went into .NET 1.0
With .NET 2.0 a new round of languages was tried. The research on ILX and OCaml (mostly using F#) was introduced into the virtual machine, making generic types first-class citizens in the VM, not just entities that were emulated (as they remain to this day in Java). The feedback from Eiffel lead to the introduction of covariance and contravariance in the virtual machine, another feature missing from Java.
The work from Jim Hugunning on IronPython also drove the adoption of new low-level APIs that assisted the runtime in better supporting dynamic languages, all of these features appeared in .NET 2.0 and 3.5.
So certainly, you can target anything into anything else, at the end of the day, everything is running on top of some CPU. The difference is that with .NET you have to jump through less hoops, and the runtime is richer for language developers.
So in Java you can certainly emulate pointers and malloc for building a C compiler. The emulation will tkae the form of "Allocate big array, and emulate pointer operations there". Possible, but not very efficient.
Generics is another area that helped languages like C# get generics that actually make sense, and do not require a PhD to understand. This is an important difference: in Java generics are emulated, in C# they are native to the environment.
That being said, if you like Java, by all means, keep using Java.
Strangely, I do Java work as my day job in Eclipse and C# in my spare time using Visual Studio (2005 Express) and MonoDevelop. While I prefer C# as a language overall, I'd much rather have something like Eclipse for C#! There's so much more power to it in terms of refactoring and other features that it puts the minimal functionality that Visual Studio always had to shame.
From the horse's mouth itself:
Q: Is this Community Promise legally binding on Microsoft and will it be available in the future to me and to others?
A: Yes, the CP is legally binding upon Microsoft. The CP is a unilateral promise from Microsoft and in these circumstances unilateral promises may be enforced against the party making such a promise. Because the CP states that the promise is irrevocable, it may not be withdrawn by Microsoft. The CP is, and will be, available to everyone now and in the future for the specifications to which it applies.
Personally, I'll still be using Java - you're a "second class citizen" developing C# on Linux, always trailing Windows. But you're a first class citizen on Java regardless of what platform you have on your development machine. And I like Netbeans :-)
Oolite: Elite-like game. For Mac, Linux and Windows
Right now Java has the following features that are absent in C#:
1) High performance VM
2) Code that does what it says without hidden conversions, text substitutions, and macros.
3) Other languages that are actually useful like Scala and Clojure.
You are obviously talking a lot of shit there. I can't give numbers about issue #1, but from experience they are at least equivalent for general use. And its not like if anyone couldn't just open 2 apps in their desktop and compare. Java may be faster here, slower there and vice versa. But you certainly won't find any huge differences in the runtime that makes one seem useless next to the other.
.NET, you must be out of your mind. Simply going from the standard languages that .NET supports out of the box (C#, VB.NET, C++, F#) you have 4x more languages than Java, and they are certainly useful. If you count the other languages that people have created or ported to the CLI, you can even count Java.
.NET, like *supported* multi-platform runtime from the official vendor, more libraries due to more time in the market, a more open community, etc. You could simply have used them in your argument instead of saying a lot of nonsense shit about stuff you don't want to understand.
Now, about issues #2 and #3, you are probably smoking something.
What kind of hidden conversions or text substitutions you are talking about? As any language, there are *features* that change the behavior in some way. There are no hidden conversions, there are documented implicit and explicit casts, there is marshalling for interoperability with other platforms that are completely configurable. Any language has this kind of thing to some degree, even java. Also, NET itself have no notion of macros, because macros are a compiler feature, not a runtime one. C# for instance doesn't know what is a macro, it simply has some basic pre-compiler, but nothing like C. It seems you don't understand or don't care about learning how the language works, even though all the reference, compilers and SDK is freely available online. The fact that you can't understand a feature that any VB programmer understands really tells me you shouldn't be spreading shit about it.
As for saying that java has the advantage of having more useful languages than
You are just a java fanboy that will defend any feature that java implements, and bash any other that java doesn't have, until the day it is implemented. You are no different from the fanboys that love LINQ or extension methods.
The fact is, Java has a lot of benefits over
It's a Microsoft trap and it's a solution looking for a problem. I wouldn't mind if there wasn't the constant, implied threat of Microsoft suing the distributors/users of Mono (patents).
It's yet another platform to maintain and support and more complexity for distributions.
Very importantly, it is confusing in that it appears to make the .NET platform legitimate as a cross-platform, Open Standard. It is neither.
If you buy SuSE Linux, you are probably safe from Microsoft legal action.
With Mono I've had the pleasure of a light (and fun) rewrite of many of my applications for cross-platform compatibility
And with Java, you wouldn't have had to rewrite anything.
Stick Men
*sigh*
You can either develop Linux desktop applications on C#... or just develop desktop applications on Java that, coincidentally, work in Linux just fine. The reason why no one makes "Linux desktop applications" in Java is that it's much easier to just screw the platform dependence and go cross-platform. What you lack in platform integration you make up with less headaches when you do choose to deploy the applications across different platforms...
Last I checked, I think Gtk+ and GNOME bindings exist for Java too. But with Sun improving the Gtk+/GNOME native look and feel support in JRE itself, and more and more cross-platform desktop application building and desktop integration stuff coming in the future (JSR-296 Swing application framework stuff looks pretty cool, for starters), who would want to tie the app to Gtk+ and GNOME specifically when you can, right now, build apps that can already pretty much pass for GNOME apps?
That's like saying that hydrochloric acid is more popular as a drink than hydrofluoric acid.
Both environments are massive messes of overcomplicated languages with even more overcomplicated infrastructure, stuffed with random libraries and lovingly wrapped with overinflated egos of their designers and developers, and wankery of the users who think, it's the second coming of Lisp.
At this point there are five good choices for developing a new non-game GUI-centric application for Linux (or anything except Windows-only or OSX-only applications):
1. C++/Qt (KDE and everything useful in it, Opera, QCad, countless commercial applications).
2. C/GTK (GNOME and everything useful in it, X-Chat, Pidgin).
3. C++/GTK (OpenOffice.org).
4. Python/Qt.
5. Python/GTK.
This covers everything anyone would want in a GUI-centric application -- the five reasons I have seen for other combinations are:
1. As attempt to promote some crappy environment or a "my first application in <crappy environment>" project that got out of hand (Tomboy, Banshee).
2. Out of ignorance (all "enterprise applications" where Java was chosen because it's supposed to be "cross-platform").
3. A minimal update for some old application that was written before the above five choices became available (the only reason why I still have Motif installed).
4. The application IS an environment designed specifically for some set of goals (Emacs, Mozilla).
5. As a wrapper over something someone already written.
Contrary to the popular belief, there indeed is no God.
Right, "Type Erasure" means that none of the semantic information is preserved in the produced bytecode or metadata.
This has several problems, for example, the following is invalid in Java:
class Stack {
T [] storage;
Init ()
{
storage = new T [20];
}
}
You might want to read "Generic Gotchas" for Java. There is no such problem with the C# version as they are first class citizens:
http://www.ibm.com/developerworks/java/library/j-jtp01255.html
The implementation is so arcane that it requires documents like this encyclopedic FAQ:
http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html
Or even Sun's Ken Arnold stating that "Generics are a mistake":
http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html
None of this problems happen in C# and .NET.
So care to enlighten me which other 8 applications get removed if you remove Mono?
Here are a bunch of them: Tomboy, Banshee, F-Spot, Gnome Do, Beagle, Blam, Muine, Tangerine, Hipo, gTwitter, Last Exit, Graphmonkey, Giver, Drapes, Cowbell, Bless, gBrainy, autopano-sift.
"Right, "Type Erasure" means that none of the semantic information is preserved in the produced bytecode or metadata."
I understand, and I can live with that.
It is not is if you can not do something, it just requires a more verbose approach e.g.
class Stack {
private T[] storage;
public Stack(Class type, int size) {
storage = (T[]) Array.newInstance(type, size);
}
}
But if it was just making an object do something instead writing libraries, why not simply:
class Stack2 {
private List storage;
public void init() {
storage = new ArrayList();
}
}
I've given lots of programming courses, and sometimes all this syntactic sugar is nice but when learning a language, these constructs can make it very difficult see the overall picture. I find that Java has a very clean set of language features that can be taught/learned easily.
I understand that you are a very gifted, above average intelligent programmer. But the average programmer is, by definition, well, average.
Well, there aren't that many people that start things like Gnome (my current desktop of choice -thank you) and Mono and can make such things work.
Being myself a Scala fan, I agree with you that it is painful that Sun did not make the JVM with language agnosticism in mind, and that is the main superiority of .NET over the Java platform (the very fact that the best I can call it is "the Java platform", while .NET is not called the "C# platform", is a good hint).
.NET framework is.
.NET, the general anti-NET guy (not anti-Mono). Even if some legal doubt surrounding free .NET implementations remain (even with the recent community promise, but there's always a legal risk with any software you use anyway), this is purely an emotional and political decision. It's fashionable to call my kind "freetards" :). Yet, I've been using and enjoying free software for a long time now, and I remember your stories (notably how you were interviewed by Microsoft and told them you would join them if they changed their business model and developed free software) so I feel you're not the last to take emotional and political decisions. Please note that I appreciate the existence of a Free .NET runtime.
.NET environment? Sure, there is a lot of inertia with Sun, but if someone could have achieved it, that would have been you. At the end of the day, you are still bound by Microsoft standards, are they so much better than Sun's that it justified starting a free .NET implementation from scratch (granted, neither HotSpot nor the JDK were free at the time, but there were already free partial implementations) ? I have read your reasoning at the time of creation of Mono. Of course, after all this work it is late to have second thoughts and regrets, but in retrospective, was it such a good idea?
.NET are strong, but from what I see here Mono is only marginally used even for server-side solutions, and there is a lot of rejection on the desktop from the free software community (which I agree with, even if I have had F-Spot and Tomboy, I do think running Mono for two apps is excessive).
Concerning type erasure, as it has been pointed out by my sibling-thread, it's a design choice. Scala also has adopted type erasure with generics. The other choice could have been made, that is encode type annotations for generics in the bytecode. There is nothing in the JVM preventing it to be done, since it can be done manually, the [alternative language] compiler can add the required info. In Scala, the choice has been made to mimics Java (and I guess, the more the generated code will look like Java, the more we will benefit from runtime optimizations). Thanks to Scala's very powerful syntax, there is a library called Manifest that automatically adds the type information and easily allows you to code as if there were no type erasure.
Still, I agree this feels like a weird rule, especially the first time you run into it. It is not the expected uniform behavior. The same goes will tail-call optimization that should be in the JVM (and should be in OpenJDK7), closures, etc. Generally speaking, the JVM should be a generic platform for languages exactly like the
But I am one of those guys who wouldn't run Scala on
You have done an impressive work with Mono. Don't you think the same effort could have been to make the [renamed] Java platform as generic and powerful at the
We both know the linked article is a joke and Mono doesn't seem to be gaining any real share. Sure, C# and
At the end of the day, I just regret the Mono vs Java situation created yet another division in the community. Of course, and I thank you for it, you are very much responsible for OpenJDK becoming free. And I agree that Sun's strategy regarding both licensing, evolution and genericity of the Java platform has been awful. Yet, right now, between the two, most free software enthusiasts would choose Java. There is no way to rewrite the past, but maybe there could be a way for a better outcome.