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!
>> 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.
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.
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!
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.
It feels much more natural than Java programming.
chmod +x ./natural.exe
export DLLPATH=/usr/lib/libmono.dll
Yeah, right. Natural.
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.
but on the desktop integration is everything.
I hate integration. It means that a single update of a single package can bring the whole thing down. Honestly if i want to play music I don't give a carrots ass if its using the same font as the bloody word pad. I just want to play the friken music... I don't give a flip if it stores the setting in some kde standard place if it has crap playlist editing.... etc...
Whats the point of looking all nice and integrated if it doesn't bloody work? Which is why the bulk of the apps i use and find productive are bad examples of desktop integration.
The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
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.
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
This is not a trivial step. There will always be advantages to pure Java code, the most obvious being it runs anywhere you have a JVM, and installs and behaves exactly the same way with no platform dependent code.
"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.