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!
But...but...but we never get viruses. =P
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)?
we have java apps where i work. and ZERO mono. ha ha ha.
Since Eclipse 3.1 is barely distinguishable from Eclipse 3.5 (other than an even greater mess in the preferences and project properties windows), I have to agree with the Debian team. Why bother upgrading?
Anyone who currently uses Eclipse: try NetBeans or IntelliJ for a week. You'll never want to go back.
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
Talented, intelligent developers would choose neither. Oh, and the word is spelled "yeah" damn it!
Cross platform is a huge reason why I've been loving Mono.
I've used java for years because it took common programming tasks and made them not only cross platform, but some what standard. .NET/Mono borrowed from that.
Think of network sockets, file access, threads, and a bunch of other things that quite frankly are annoying to do in C or C++. Even worse they are way different on Windows and Linux and so you end up writing big chunks of code twice...for really no reason. Apache portable runtime hopes to do it for C++ apps...but it's quite frankly a pain.
Bottom line if you want to write a GUI based type app Mono is better than Java Swing and better than playing around with C++ and GTK+...unless you need something to the scale of Firefox or openOffice. Even then I think Mono could scale.
The Java VM was a good idea, but Sun never bothered to port other languages to it. With Mono you get a choice of languages, a common library, and apps that really can run anywhere without a whole lot of extra work.
RedMonk analyst Stephen O'Grady, the guy being quoted in the article, is a Microsoft shill. And the whole article is filled with FUD.
My brain hurts... is Youtube being DDOS now?
Please see this.
Yours In Parentheses,
Kilgore Trout
I second turgid, and I will raise a toast to him.
compare for fuck sake.
http://www.javacamp.org/javavscsharp/getStarted.html
...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.
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...
There's a lot of truth to the distros not keeping up w/ Eclipse, or its plugins. Eclipse is a good IDE if you've got a couple of people on your team who can set it up, resolve plugin dependencies, etc., but a lot of shops are finding those kinds of engineers in short supply.
Java is struggling at this point, and there's not much new development going on in Java from what I can see. However, Mono on linux (desktop or web) is yet another technology that middle-managers find confusing, alienating, and intimidating, and that will prevent it from becoming as widely adopted as Java was, unless something major changes with respect to Novell's marketing. MS always wins the marketing battle, and as much as I dislike their OS, the dev tools are pretty good, and a lot easier than Eclipse to work with once the license fee is paid.
And before you start telling me that it's so easy to download and install a new Eclipse, remember that a lot of shops don't have more than a couple people who know how to do this kind of thing on a Linux desktop...I even have several VM images ready to go, but it's too alien/new/disconcerting for a lot of folks to try out when mgt. has bought VS2008 licenses, is disruptive to project schedules, etc. If it were up to me I'd be using python as a high-level and c++ where needed.
Mono needs to die a death. Please ignore it and hopefully it will go away.
.NET is an extremely popular platform. Mono is a great back door for Linux to get into the business environment by being able to say that you have Linux servers AND .NET support. There will be less worries about moving applications.
And as far as the parent is concerned, I have to agree. Java class hierarchy is a big pain in the ass! Trying to find needed classes and having to include things that aren't needed just to use certain features. It's as bad as MFC in that regard.
Nope, I think .NET is better in that regard than Java is.
There are orders of magnitude more stuff "built-in" to Java (the platform),
I don't think you know exactly what that term means. The BCL of 3.5 .NET framework defines 294 libraries which each contain hundreds of interfaces, classes, enumerations, structures, delegates, etc. So now to do the math according to you Java must have at least 2 orders of magnitude more of everything (as you said orders) so if your claim is correct Java contains at least 29400 built-in libraries for a combined total of 2940000 interfaces, classes, structures, etc. I'm sorry, but the facts just don't bear your hyperbole out.
Maybe he was speaking in Middle English!
In this context, "Yea" is a perfectly acceptable word to use when starting a sentence.
Convert FLACs to a portable format with FlacSquisher
The browser is where it's happenin, doods.
Java is the new cobol. Another bad attempt at extending C. It's for immigrants to program in.
Mono is Mickeysoft and yet another pathetic attempt to extend and objectize K&R C. It's for losers.
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 ?
Who is using Mono besides the Tomboy guys anyway? I know I'm not. Of the two, I've only really used Java.
Can an informed authority tell me whether Mono or Microsoft's .NET can stream data over the internet? Very useful in Forex Trading. This is what I mean.
I think the problem is that while Java is cross-platform, it's apps have always been treated like second-class citizens on Windows and Mac platforms. They behaved different, had a very different UI for most of its' life, had a slow big runtime for the dial-up days that every app seemed to have a different version of the VM to run and took forever to load or update.
.NET (at least on Windows) has always had a form designer which is very quick to learn and rapid develop over Swing/Eclipse which has been code-based (I know, behind the GUI forms is code in .NET), but for a lot of us (like me) our CS programs focused on CS, not software development/engineering 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.
For that reason, I think a lot of developers have avoided it on Windows and since Windows has such a market share, if you're primarily a Windows developer, Mono is a good choice. Mac development has always been a niche job and learning the specifics library methods to make Java apps "work" like native mac applications I can't see much reason in not just writing it in Objective-C. Apple has always lagged behind Sun in releasing recent VMs and for OS X 10.4, which is still very in use as many Mac users don't upgrade for the sake of upgrading, it still hasn't been given Java 6.
Forgive my spelling from time to time. I'm often posting during short breaks.
Aw jeeze.... ever heard of figures of speech?
Anyhow, the guy you reply two included 3rd party libraries in that figure. I would say he is not that far of the mark: one order of magnitude is more apropriate, but still, thats "an order of magnitude" larger.
NO SIG
"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.
Yep..
They "would be" talented, intelligent developers if they had chosen python or whatever the fuck else that has no ties to microsoft patents (or like jjava...).
NO SIG
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.
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.
mono is used often in the indie radio programming. www,dflshow.com is one example with the whole livestream thing.
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.
Except if you look at the Java 6 API there are only about 205 packages.
Amen... Swing sucks, SWT is great but not enough people use it.
it's had a good decade and a half of hardening in real-world situations (top businesses etc.)
.NET builds on Java's experiences as well, and according to Miguel they did a better job of addressing Java's main criticisms than Java itself.
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)
Mono has that too.
and there are independent implementations of the Java libraries (e.g. GNU Classpath).
Mono IS an independent implementation, along with DotGNU.
Mono needs to die a death.
No, it doesn't. Please stop talking out of your ass.
If you dont like it, dont use it. Why wish for it to go away? Personally I prefer C#/Mono over Java, but life is too short for me to be preaching to others not to use it.
Java is irrelevant for the desktop at this stage and Mono simply isn't welcome on my machines. Vala is shaping up nicely and has none of myriad issues afflicting Java or Mono. There's nothing worse than Mono zealots, despite plenty of people making it clear that they don't want their software these obnoxious mono people keep trying to push it as a dependency.
No thanks.
actually neither produce executables.
Why bother
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."
I feel that way about Java too.
The Microsoft 'community' - Microsoft friendly press, clowns like Miguel De Icaza, etc. all are playing hardball to fuck Linux on the desktop up and the Open Source community is just rolling over like pathetic little dogs.
That incompetent little Microsoft fanboy De Icaza successfully managed to derail the basic window/desktop management into to a pointless and futile war.
And now with this mono garbage they are derailing Linux application development. And you idiots are falling all over yourselves trying to prove to the world how 'open minded' you are for actually using patent encumbered Microsoft technology.
What a fucking joke.
Open source community - you're nothing but a bunch of suckers and losers.
Letting mono worm its way into Linux application development is like Microsoft making Linux hit itself in its face with its own fist like some contemptuous older brother who wants to see just how far he can humiliate his younger brother.
The execs up in Redmond must be shaking their heads in disgust at being faced with such a bunch of fucking losers.
Personally, I don't care one way or the other (I don't care for either one), but I'm left wondering: could anybody honestly consider the "comparison" on the cited site useful in any way, shape, form, or fashion? Even if it provided a comparison that was deep enough to have a hope of meaning something, do you think there's just a hint of a possibility that a web site hosted on "javacamp.org" might have (and provide) a slightly biased view in a comparison between Java and any perceived competitor?
The universe is a figment of its own imagination.
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.
"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...
Mono is a great back door for Linux to get into the business environment
BS. If you are running on Mono, then you are getting Mono or .NET into your environment. Mono is no more a great back door for getting Linux into your business environment than Java was for getting Solaris into your business environment.
I don't use either. Back when I was interested in Java it was too much of a moving target. But I get the impression that both today are basically glue languages combined with lots and lots of libraries and frameworks. Knowing the languages seems less important than knowing the libraries and which pieces to glue together.
You would think that after creating the Linux desktop Gnome versus KDE war and turning 'Year of Desktop Linux' into a joke and now something not even funny anymore, that Linux developers and distro managers would have gotten a clue.
How many more times is Lucy(Miguel de Icaza) going to hold that football out there for you Charlie Brown(Linux community) before you catch on?
Did you even bother to click the link? There's nothing biased about the comparison. It's not very compelling if you asked me, but it's definitely without bias.
It's all men here anyway!
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
To correct your last point, there is even a specific distribution of Eclipse that includes already-integrated SVN.
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.
because eclipse sucks? who's with me
"If you dont like it, dont use it. Why wish for it to go away?"
reduce complexity?
Under the influence of Post-Cyberpunk Gonzo Journalism
Such bias is hard to avoid even under the best of circumstances. Even an author who really tries to be objective still tends to have rather set attitudes about the familiar versus the unfamiliar. I don't use either regularly, and don't care for either one, but I'm still enough more familiar with Java that I'd probably have difficulty comparing the two entirely fairly. For somebody who knows Java far better and uses it a great deal more, a truly unbiased comparison becomes simply impossible.
In this case, the problem is compounded considerably though: even if (somehow) they managed to write a comparison that was both meaningful and unbiased, the people to whom it could be useful would have no way of verifying its lack of bias. The only people who could/would know such a thing would be those with sufficient knowledge of both languages and platforms that they no longer needed any such comparison.
I stand by my original comment: the cited comparison is completely meaningless, and even if it did mean something, nobody who needs it would know enough to be certain whether they could trust it.
The universe is a figment of its own imagination.
Don't get me wrong here - I despise Java, primarily because it's a resource hog on all platforms. Only masochists could ever have really liked Java - especially on older and/or low end machines. It blows. But, mono? Microsoft is blowing it's own horn here. Java is already on 100% of *nix desktops, plus or minus a percent. Mono has made it onto 10%? Wow!! Mono growth outstrips Java!!!
Give me a frigging break.
There must be some natural turf somewhere, but we won't find it here.
"Windows is like the faint smell of piss in a subway: it's there, and there's nothing you can do about it." - Charlie Br
Mono needs to die a death. Please ignore it and hopefully it will go away.
Really? Why so much hate on Mono? Wait - let me guess - It's because Microsoft founded the platform it's based on, right? Java may be more mature, but I welcome the framework competition and possibility that something else may mature to the point where Java may one day be replaced.
As a previous Windows user, newly converted Linux user, I can say Mono was a big factor with that transition. With Mono I've had the pleasure of a light (and fun) rewrite of many of my applications for cross-platform compatibility. Regardless of Java being cross-platform, I don't understand how Mono deserves death given how it aided my transition.
Please, no, your comment needs to die a death. In the world of open source, I don't understand how multiple development choices are a bad thing.
I hate to say it, but:
I. Hate. Java.
It's fine if I can't *tell* I'm using Java. That's ok. I should *never* be able to tell when I, as an end user, am using a program done in a specific language. The language should only be apparent to the maintainers and programmers.
Heck, I hate Python too (as a dev), but I've never met a Python app that gave me that 'Oh, crap' moment the parent poster is referring to.
But you launch a Java app that *looks* and *feels* like a Java app, and most of the time you'd rather use anything else.
This is probably just due to the millions of awful Java apps out there (from the early Novell tools to the SAP visual admin), but the only other language that gives me this feeling is VB 4.
As a programmer, I agree that Java isn't so bad. C# is ok too. VB.NET isn't so great (they broke it!!!) but .NET just doesn't give you that gut-wrenching feeling that Java does.
Ah, so that explains the performance.
coffee | nose > keyboard
People care about what other people code in if there's a 200+MB download just to be able to run it...
If people coded in native apps that argument would be fine, but if I have to install a huge framework to run a note taking program it's hardly worth my time.
Every time I start to have faith in humanity, I ruin it by driving to work between 7 and 8 am.
Ok I'll concede that an interpreted code body is an executable capable of running on a virtual machine. But who really cares anyway it was a toss off reply to an AC and it's really irrelevant.
Why bother
1) http://www.theserverside.com/news/thread.tss?thread_id=46887
2) http://weblogs.java.net/blog/alexwinston/archive/2005/04/strongly_types_1.html
3) http://www.developer.com/java/other/article.php/3300881 ?
4) http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
5) http://java.sun.com/j2se/1.5.0/docs/guide/reflection/proxy.html ?
Absent? (Admittedly, I don't code in Java, but I got those links just by googling all your points.)
Every time I start to have faith in humanity, I ruin it by driving to work between 7 and 8 am.
"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.
that Java on desktop is not engaging to developers, because:
1. it takes forever to load,
2. it mostly looks different (read inferior) than native UI widgets,
3. takes forever to design UI of Java app to be competitive with other made using Gtk, Qt, Mono, etc.,
4. severely lacks interfaces with operating system, which limits domain of apps made,
5. focus to desktop apps is lacking - widgets are limited, experts and user groups are almost non-existing
Finally, there are very few well-known Java apps with wide use, one of them is Vuze.
From what I gathered they pretty work like type erasure in Java, ie. there's no genericity at all for reference types, it's the same code with implicit casts for all instantiations. (Value types are different naturally.)
I don't see how this is so great, considering I can't do shit with a generic type parameter, like call a constructor that takes some arguments or call a static method.
I understand it was a functionality/overhead compromise, so they could do loadable code and not have to JIT ten thousand different instantiations. I still love using templates a lot more.
My own personal experience:
I hate Java, and have for a long time, mostly thanks to bad early experiences with slow-ass bulky apps (take the apps running under X on Novell for example). On the other hand, I really like C# (the language appeals to me, especially with some of the newer functional-like stuff being added).
Having now written programs in both, I can say that despite my hatred of Java, I would much rather work with it. The documentation for nearly everything is fantastic, with excellent linkage to related topics (e.g. try picking a specific implementation of a given collection, like Map - a full list of each available option, and each one well documented as far as how to use it, what the performance characteristics are, etc etc). The documentation for .Net is practically the opposite. Hardly any linking except directly upward in the hierarchy, semi-useless descriptions of what the class is, does or how it works, and to add insult to injury, once you find a class you typically have to drill down through two levels to see the description of a particular method. Even then the documentation is poor, leaving important details explained *only* in code samples.
If you want to read about a class in .Net, you had better get used to reading code samples as the only form of documentation, or start coding by copy and paste. Blech.
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.
>Absent? (Admittedly, I don't code in Java, but I got those links just by googling all your points.)
Yep. Absent.
These are hacks, they are nowhere close to power of LINQ in C#. True LINQ support requires language changes (anonymous types, Expression Tree, Extension Methods).
Admittedly, these are clever hacks and make life somewhat easier (I myself currently contribute to http://code.google.com/p/jaque/ ).
if you're primarily a Windows developer
That was part of the problem, .net wasn't cross platform capable until Mono came along. MS ties it's tech to it's own products, or threatens to drop support. I can easily imagine MS Embracing, Extending, and Extinguishing Mono and .net on Linux. Meanwhile I use Eclipse for Java, and can use it for other languages as well, on my Mac. And if and when I finally rebuild my Linux PC I can use Eclipse on it as well.
Mac development has always been a niche job and learning the specifics library methods to make Java apps "work" like native mac applications I can't see much reason in not just writing it in Objective-C.
This has a similar problem, using Mac specific GUIs it's no longer cross platform. And Objective-C isn't cross platform either.
for a lot of us (like me) our CS programs focused on CS
That's how it should be, CS shouldn't focus on specific tools but on general principles.
Falcon
Should there be a Law?
Actually, he is very well paid by Sun Microsystems. At conferences, you won't find him very far from his Sun keepers.
By that definition, both produce surprisingly lean executables.
http://www.mhall119.com
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.
How are those Java applets working out? Oh, wait they are doing something now, 12-13 years later (JavaFX?). Talk about blowing it. I mean sure, applets sucked, but couldn't they have tried Applets 2.0 in 1999? Yes, I say they are so slow to change that Microsoft copycats and outpaces them in the end. Sun sucks.
People care about what other people code in if there's a 200+MB download just to be able to run it...
Because anyone forces you to use their app?
VB is Microsoft's bastardized version of Java.
So Microsoft bastardized a language that 5 years before it existed? That's amazing even for them!
I'm sorry, but Eclipse just runs from the decompressed download, even if it's on your desktop.
No it doesn't. Eclipse runs in my admin account but every tyme I start it in my user account I get error messages. Sure, I could use the admin account but I don't want to screw up things. I can easily delete then create a new user account, if I really needed to, without messing anything else up. I only use the admin account to install hardware and software and to update my system.
Falcon
Should there be a Law?
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.
You must not be including all of J2EE and J2ME.
http://www.mhall119.com
Excuse me. Java pre-dates VB by a considerable amount. You haven't been around long either have you?
Why bother
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
Likewise, your fifth citation regards dynamic classes. The other post was about dynamic methods. A dynamic class means you can create a new class at run time. A dynamic method means you can create a new method for an existing class at run time. While there's certainly similarity between the two, they're just as certainly not the same thing.
To give a really simplified (but hopefully not to the point that's it's actively misleading) explanation: for Java, think of a grid with classes along one axis, and interfaces along the other axis. A dynamic proxy class lets you put an 'X' at a more or less arbitrary box in that grid, setting up the connections so that class implements that interface. On the C# side, think of a class as having a row of boxes, one for each method in that class. A dynamic method allows you to add an entirely new box to the row, so it now has a method that didn't previously exist at all.
Unfortunately, if the method for that "box" is really completely new, you won't have other code that knows how to use it, and it won't necessarily accomplish a lot. One obvious use is about like in Java, to add methods that some existing code already knows how to use. OTOH, it certainly is possible to use it other ways. For one example, another program sends some previously unknown message, and you connect things up so that message ends up invoking your entirely new function. Taken to an extreme, you could define your "program" as little more than a tiny framework, for defining functions and connecting them to be invoked by messages (collecting appropriate data from dynamically generated forms).
The universe is a figment of its own imagination.
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#.
This sounds like something someone would write under the influence of some serious amphetamines.
I don't believe in time. It's a grand conspiracy designed to sell watches.
Excuse me. Java pre-dates VB by a considerable amount.
Visual Basic 1.0 was released in 1991. Java was released in 1995. So, no.
Java does predate VB.NET, however. VB.NET is not compatible with VB versions 1-6 and changes some fundamental concepts (like the object model), though the syntax is mostly the same. Rather than "C# is VB with C syntax", it's more accurate to say "VB.NET is C# with VB6 syntax".
Visual IRC: Fast. Powerful. Free.
"I'm not trying to say I think Java's generics are entirely inferior, or anything like that -- just that what you've cited isn't really exactly the same thing."
Well, I wrote a fair amount code in C# 3.5 and I haven't found an instance where reified generics were a problem. On the other hand, type erasure has bitten me in the ass a few time in Java. And it's also possible to create reified generics with full backwards compatibility (read the comments to the article you've posted).
"A dynamic class means you can create a new class at run time. A dynamic method means you can create a new method for an existing class at run time."
Yup. And C# (or more exactly, CLI) can do both. Java also plans to add invokedynamic instruction, but it's not here yet.
Two comments above, it states that VB came out in 1991, Java in 1996. I'm not sure if time flows backwards for you, but the last time I checked, 1991 was before 1996. Granted, that's for the language. Which is the only fair comparison, as VB is also a language. The Java *platform* began in December, 1990, but wasn't even shown to anyone until 1992. So VB still predates Java.
I'm starting to think it's you who haven't been around very long.
Today is red jello day - all workers must eat all of their red jello. Failure to comply will result in five demerits.
No it doesn't.
From wikipedia, Java's first release was in 1995 and VB's first release was in 1991.
No. Reified generics instantiations create a new instance of a generic class. I.e. a List will be different from List in C#.
While in Java they would be the same. It's pretty efficient in practice, more so because C# allows to parametrize generics with primitive types and structs.
Of course, templates in C++ are way more powerful (they are Turing-complete!!!)
Excuse me. Java pre-dates VB by a considerable amount. You haven't been around long either have you?
The initial project that became Java started in 1991, the same year Visual Basic 1.0 was released. Java was released to the public in 1995, the same year Visual Basic 4.0 was released. How do you figure that Java predates VB by a considerable amount?
I've never seen a Java app on Windows that ran with any decent GUI ever. All of the objects seem to be widgets drawn custom instead of using native win32 functions and objects.
File / Open has its own dialog, which looks ALMOST but not quite like Windows version. It is terrible to operate with a keyboard and is missing features I expect in the dialog. You're recreating things instead of using the native libraries. It would be one thing to create new things, but these are just bad copies.
It's like Java developers and devs who use Java have never seen a GUI, and don't quite know what people expect. Certainly they aren't Windows users. As much as they imitate it, they really seem to have no idea what it's supposed to be like. I get scared when people say things are written in Java.
Because anyone forces you to use their app?
Company I work for was recently bought out. We're currently migrating to their crappy software from our former web based stuff. Way cheaper for them to hog resources on my machines than it is to migrate their database to what we had.
So while you may do whatever the hell you want on your home machine, corporate overlords will force you to use their crappy apps in their machines.
From what I gathered they pretty work like type erasure in Java, ie. there's no genericity at all for reference types, it's the same code with implicit casts for all instantiations. (Value types are different naturally.)
Not quite. There are no "implicit casts" with .NET generics.
You're probably thinking of the fact that all instantiations of a generic method with different reference type parameters share the same native code. But when you call a generic method, the VM's static type checker knows the actual parameter/return types, so there's no need for any type casting at runtime: sharing the native code is just an optimization since the native code would be identical anyway.
The difference means that .NET generics can have better performance than Java generics, even when the type parameters are reference types, because no runtime casting is needed. The .NET VM can verify that the method call is type-safe because it has access to the type parameters that Java throws away.
Visual IRC: Fast. Powerful. Free.
"Mono is clearly more popular than Java. I've been using desktop Linux as my primary desktop for three to four years, and use just a handful of Java apps day to day," O'Grady said.
Clearly he gives no information about the numerous (more than a handful) of Mono apps he's using day to day on Linux. Oh, previously in the article they mention Tomboy, Banshee, and Gnome Do. So what are all the others too numerous to mention?
On any platform I use (Windows, Linux, OS X), I user fewer than a handful of Java apps each and every day. And you know how many .Net or Mono apps I use (including on Windows)? Fewer than that.
I suppose going from zero Mono apps in popular use to 3 or 4 does represent a "spike" in Mono development, but I'd hardly say it's evidence of Mono outpacing Java development on Linux.
As for outdated versions of Eclipse on popular distros, of all the people who would go to the trouble of updating to the latest version regardless of whether it was packaged with the distro, developers would. Pointing out a lack of code completion or integrated debugging in Eclipse is a laugh.
LINQ is a .NET 3.5 feature not a C# (as in the ECMA standard) feature. There is no such thing as C# as far as any sort of standards are concerned.
Analogies don't equal equalities, they are merely somewhat analogous.
You comment suddenly made me wonder. What if the world was written in brainfuck?
That... That would explain a lot.
Sheesh. Back in my day we got by just fine with "You shithead".
I hate printers.
Are you thinking of VB.net? Because VB (which was based on QBasic) was released in 1991. Plain old Basic has been around longer than me. VB.net (which it could probably be argued is a separate entity from VB) on the other hand is a lot newer.
Java came around in '95. If Java's been around considerably longer than VB, then please, go fix the wikipedia article for it.
ignore it? what the fuck is it? i've never heard of it. now, i'm going back to my dyl 280 coding....hey, has anybody seen my syncsort manual?
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.
Actual I think VB.Net is more of a VB, C# Frankenstein monster. Microsoft chopped up VB6 and sewed it into the C# Common run-time environment. If you knew Basic you could basically throw together some pseudo code and VB would work. No such luck with the VB.Net monster. I heard that many of the issues I had have been cleaned up, but I still wont touch it. Which is a shame because VB was good if you need a quick prototype of a windows application.
If you have to do .Net programming stick to C#.
And as far as the parent is concerned, I have to agree. Java class hierarchy is a big pain in the ass! Trying to find needed classes and having to include things that aren't needed just to use certain features. It's as bad as MFC in that regard.
Wait, parent said there wasn't enough; you're agreeing and saying there's too much. Which is it? (BTW... you don't load anything that you don't use, in the same way that you don't load classes you don't use in .net. "import" statements do not mean "automatic overhead of loading classes"; this is true on both platforms.)
Mono is clearly more popular than Java. I've been using desktop Linux as my primary desktop for three to four years, and use just a handful of Java apps day to day," Oâ(TM)Grady said
I'm sorry... has someone missed the gazillion java applications that are cross-platform? Is this article really based on the opinion of ONE developer?
However, there was a near consensus among the experts interviewed by SD Times that Mono has done a better job at attracting developers than Java. According to O'Grady, Java and Linux are two of the most popular disruptive technologies in open-source development, but they are not intrinsically paired on the desktop: Java can run on any number of platforms, whereas Mono can more effectively target Linux. Mono also runs on Mac OS X and Solaris. "Regardless of what you think of Microsoft, there are nice technologies here," he said.
Yes, yes it seems that it is.
Microsoft is still planting articles in the trade press. Oh, what a surprise.
About seven years ago I went from full-time Java programming to full-time .NET programming.
And after a month or so of being uncomfortable, there came a day when I thought to myself, "Oh thank God, the nightmare is over."
Real async I/O (not faking it by handwaving and mumbling "Well, do that with threads."). A wonderful native code interop story. An IDE that just worked. The ability to do user interfaces that didn't utterly suck and didn't look like they were designed by a misanthropic X-Windows hacker. Oh, it wasn't perfect, but I was spending most of my time writing code and actaully having fun, instead of wading through screwed-up configuration files and figuring out WTF was wrong with the JIT -vs- non-JIT environment.
Say what you want, but the day I left Java behind, I was quite happy.
Any sufficiently advanced technology is insufficiently documented.
What's this? Slashdot repeating anti-Java bullshit? I'm shocked, SHOCKED!
There isn't? You'd better tell the 1.1 million websites that are returned when googling "java 6".
Look at the software source code and package names, and try typing 'java -version" at the command line.
Better yet, I can open the Java Preferences Application. It shows:
Java Applet Plugin
As well as:
Java Applications
The book I have from Sun is titled:
"Core Java(TM), Volume I--Fundamentals (8th Edition)" and is for Java SE 6.
Falcon
Should there be a Law?
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.
How big is the JRE? Or glibc, or perl, or python, or ...
The Hustle is now more popular than the Charleston on the dance floor, the Ford Granada outsells the Chrysler Cordoba, and people prefer the taste of Bubble-Up over Moxie.
It's a very dark ride.
Not including syntactic sugar like events, automatic boxing, operator overloading and annotations, the first version of C# had delegates, enumerated types, pass-by-reference, data types appropriate for working with money (Decimal), native code interop, and value types. All of those were things that Java lacked.
If Java had those features, Sun wouldn't have sued MS to prevent them from adding them to Java. As a result, MS made their own language with those features.
And now Sun is trying its damnded to copy all those features, but it's too little, too late. The JVM just can't support proper closures and proper generics.
C# is a much better language to program and it's almost impossible for Java to catch up.
dom
Does anyone know QtJambi is doing? I heard that Nokia has stopped maintaining it since purchasing trolltech. Is that a big deal, or was it largely community supported to begin with?
Who names an application framework after an infectious disease?
If you compare VB.Net to VB, you will find that it's more akin to C# with VB syntax- which is why he probably made the comparison.
Having programmed in quite a bit more programming languages than is healthy (You could count them on your hands and toes and still not get all of them counted...)- and many of those in production settings, I can tell you that it's little different than Java in nature. People claim that there's loads done for you and you can code in a high level. The same can actually be said of Java. Moreover, it can be said that while it's "nice" to code at a high level, this ALWAYS comes at a price.
Keep in mind that LSE was done up with .Net- the full monte. Unfortunately, LSE, even though it's volume isn't the same as NASDAQ or NYSE, cratered under their nifty new toy and deployed back to a Linux based system that could cut the mustard there.
C# isn't the greatest thing since sliced bread and I really, really wish people would QUIT trying to make it out to be that. It's nice. It's suitable as a tool for SOME tasks- though it's debatable that it's better than other tools at those same tasks.
i think you need to pipe down - that's 2 comments you have made that have resulted in multiple people ripping you a new one.
If you mod me down, I will become more powerful than you can imagine....
I switched from Windows to Linux and Mac OS X and I want to program cross platform. I figured that at first I could program in Java, but I want to learn to program on Macs and Linux PCs in C/C++ as well as other languages.
Falcon
Should there be a Law?
.NET is not a language... .NET is an environment that runs on the CLR which can be accessed through several different languages (Managed C++, C#, J# to name a few)...
Java is a language that runs the JRE on a JVM.
For better understanding,
Java is to C# as .NET is to the JRE as the CLR is to the JVM.
Any questions?
Number 4, "4. Linux developers are forced to switch to Microsoft software or stop using Mono" , is number 3.
Falcon
Should there be a Law?
You are correct here. This is a well established historic footnote of the language and easily verified. Try not to feed the trolls. It's better if they starve.
Absolutely. I've been involved in development of several major Java desktop apps and this is always the take of most of our Windows user set - things don't look, feel or act quite "right".
This is not a self-referential sig.
Mostly, I would say that Mono is faster. Otherwise, "same crap" with -slightly different syntax (Java syntax looking saner). I work with both and tried both on mobile devices. With Java, I've run PersonalJava and Midp2 apps and while its not lightning fast, its fast enough. But it is very limited. For Mono, I've tried it on Nokia N770 Internet Tablet. Almost as fast as a native application (mind you this is a 200Mhz 64MB RAM ARM9 device) and it is not a compact framework or a special mobile edition , but the whole thing! My only issue with mono is GTK# - it is PITA (probably becouse GTK is PITA) from the programmer's point of view
I really, really like C# and I gotta say, I'm a big fan of operator overloading, a feature lacking in Java that always manages to piss me off.
I found my work in .NET to be pleasant and I actually really dig ASP MVC for web development. It's not my favorite, but I'd say it's my favorite statically typed language. I wish people would evaluate .NET beyond the fact that it's a Microsoft creation.
Well, I wrote a fair amount code in C# 3.5
Apparently not enough to know that there's no such thing as C# 3.5. There's C# 3.0, and .NET 3.5, but no C# 3.5. Even a casual familiarity with the technogies would make you aware of that.
If you need web hosting, you could do worse than here
Umm.. what? That comes as a suprise to my copies of the ECMA 335 and ISO 23270, both of which claim to be C# standards.
No, LINQ has not been added to these standards yet (they're in the process of doing that for C# 4) but C# is certainly both an ECMA and ISO standard.
If you need web hosting, you could do worse than here
Removing the Java runtime engines on my Ubuntu Linux machine results in only one application being uninstalled: azureus.
Removing the Mono runtime results in about a dozen Gnome desktop application being uninstalled.
Java really has little significance on the Linux desktop, and for good reason: Java applications don't look and feel right on Linux.
You don't hate Java, you hate Swing.
Although you're right. Swing is horrible and instantly recognizable as "Java" when you run one of the apps.
If Sun dropped Swing for SWT, Java would be a hell of a lot more competitive for desktop apps.
Or may be it is just joke? How one can compare Eclipse and Netbeans to Mono Develop?
Novel is pushing hard it's half-working Mono in Gnome but it does not mean that we need it. "mononono" pakage is best proof of it. Is there "javanono" package somewhere? Right.
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
.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.
Comment removed based on user account deletion
Plus a good IDE helps generate the boilerplate code - e.g. Eclipse's code assist expands "fore" to an enhanced for-loop, parametrized for the closest Iterable...
Yes they do. A handwritten recipe for cookies is executable, it just runs on a different class of machine.
Your mum?
...sorry, I had to. I just had to.
Rampant carbon sequestration destroyed the Dinosaurs' tropical paradise. I'm here to help repair the damage.
There is one very important thing that Java has (and C# doesn't) in my opinion:
- A free reference implementation.
- THOUSANDS if not millions of Open libraries available (for ANY kind of task that you want to do)
On my 6 years of Comp.Sci. research I have looked at different (scientific) libraries available. Almost all of them are written in Java (or C++) and are available for free.
In general, the feeling I have from the people who write applications in .NET is a feeling of closeness.
I like C# a lot, I worked with it (in a production environment) when it was just starting (.NET 1) and since then it has progressed quite a lot. However, I still prefer Java or C++/QT4 whenever possible.
Ubuntu is an African word meaning 'I can't configure Debian'
might have been true with c# 1.1 but now c# is far ahead (unfortunately in a way I might add)
if (!signature) { throw std::runtime_error("No sig!"); }
It is arguable whether piling features and syntactic sugar into a language leads to a better language.
C#'s generics implementation is superior to Java's, but there really wasn't a better way for Java to provide decent binary and API compatibility with the decade worth of code written before generic types were introduced in version 1.5. Implementing generics through type erasure addresses most common use cases. There are ugly cases specifically with arrays. Essential Java has a good explanation of the rationale behind the generics implementation in Java (the chapter is available as a free sample). It's not an ideal implementation, but calling them bad shows a failure to appreciate the design constraints they were under.
Operator overloading makes languages ugly. See C++. The string special case in Java is a little arbitrary, but operator overloading complicates programs far more often than it simplifies them, and in my view (and apparently a view shared by the Java designers) the relatively small number of cases where they can drastically improve readability outweigh the complexity cost of providing them. Additionally it is all too easy to use them in a way that is not consistent with the semantics of the original operators. Vectors, matrices, strings (concatenation) and advanced numeric types can benefit from operator overloading, I struggle to think of other situations where it wouldn't just be misleading.
Value types: this is a powerful niche feature, which is handy for types that you would rather think of as values, for example vectors and matrices. This allows a program to more closely mimic common mathematical expressions of the concepts, which is nice. Unfortunately they are FUCKING UGLY, and arguably encourage non-object-oriented. As a side rant, at the University I attend the introductory programming course taught structs in preference to classes. I couldn't fucking believe this (I was a sessional assistant for the paper. I'm pretty sure this happened because the course merged with a VB course and the coordinator had previous exercises that used VB6-style Types). I got very tired of being asked why this code:
aList[3].name = "Bert";
Gave a compiler error along the lines of "Cannot assign to method return value" when the list contained structs. Stupid cases like this pretty much reinforce my belief that user defined value types have no real place in an object oriented language. They look harmless but they complicate the semantics a lot.
A lot of the other features you list bring C# closer to a functional programming language. I think it is a good thing that people are exposed to ideas of functional programming, but simplicity is also important. Functional programming languages use the function as their primary abstraction -- object oriented languages use the object as their primary abstraction. Many functional languages have very concise semantics which give rise to expressive techniques, for example Scheme -- which was designed as a minimal language with concise syntax and semantics, but gave rise to very expressive programs. Likewise a language that is designed as purely object oriented can have quite clean syntax and semantics. Merging the two is messy.
It should be noted that Java's support for anonymous classes is the object-oriented equivalent of lambda functions, which allows for similarly expressive programs, without breaking into a different programming paradigm.
Reference/Output parameters. A horrible hold-over from C style programming. Normally if you need to return multiple results, or modify input parameters defining a private/package-local class is a nicer way to go. If you really need reference parameters, they can be approximated in Java with something like this:
class Ref { public T value; public Ref(T value) { this.value = value; } }
The lack of unsigned types isnt't a huge deal for most programs, it can get slightly annoying if you are writing low level programs (signed bytes are
It's just easier to write "C# 3.5" than "C# 3 under .NET 3.5".
Java is as slow as molasses.
Also, water is wet.
Liberte, Egalite, Fraternite (TM)
"1) High performance VM" .NET is quickly gaining on Sun JVM. So not for long.
"2) Code that does what it says without hidden conversions, text substitutions, and macros."
So?
"3) Other languages that are actually useful like Scala and Clojure."
And .NET has F# (officially supported now!), Ruby, IronPython and so on. Microsoft has even made changes to the CLR to better support custom languages, while Scala and Clojure have to use horrible hacks to implement closures and continuations.
"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?"
YES! I need a super-fast JIT to print out customer numbers. Have you EVER written a sizable business application? Do you propose to move all data queries to a separate application and then what, use text files for data exchange?
Also, LINQ is typesafe. You can check at compile-time that your queries are correct and IDE can (and does!) use type information for rich autocomplete and inspections.
Besides, there's also Parallel LINQ ( http://www.ddj.com/windows/212700663 ) which allows me to write parallel queries with nice logical syntax.
Er, whose machines?
Now get back to work!
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
well you can download the dotnet SDK for free if that's what you mean, it ain't open source but it's free.
- true, java beats dotnet here although dotnet is getting there, also lots of java stuff is being ported over to dotnet.
if (!signature) { throw std::runtime_error("No sig!"); }
Still C# _is_ VB with C syntax.
Notice how C# is to the CLR like VB is to COM. It's the same shit all over again, but only this time they designed both simultaneously, and with a C-like syntax.
Don't even mention C++.NET or VB.NET, they are a joke.
WPF requires 3.0 or above, and WPF is so very attractive because it's much less pain than Windows Forms (finally, autosizing of widgets and built-in themability). Problem is, MS has finally released a GUI toolkit worth using but the majority of Windows machines are still running XP and therefore the first WPF application you ever use will require this massive (relative to the size of the application) dependency.
I swear we should be allowed to give mod points to sigs... "-1, Offtopic"
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
Not according to my tests. Server Java is a LOT faster.
Good post. I wish I had mod points right now.
When it comes to generics in Java, the most annoying are the warnings you get when mixing with bare types. (Converting between List and List<T>).
Value types/structs: never really saw the advantage over objects. The JDK team refuses to implement them and I believe they are right.
I consider the fact that .NET people always bring up the native code as a weakness of the CLR: if it is possible in the VM, you should do it there and only call native code if you can't.
WWTTD?
C# is Microsoft's "bastardized version" of Java (though mostly better IMO), and VB.Net is C# with VB syntax.
You are right, I don't know why people are still talking about this. C# was copied from java, as it was from delphi and c++. This is even officially documented in pages, video interviews, books... Just as java was copied from c++, that came from C...
.NET and C#.
It is impressive that people still don't realize that any thing that are created today will borrow only the good features from things created yesterday, discarding the bad ones. C++ was no different, Java was no different, C# was no different, and if Sun/Oracle decides to create a new java from scratch today, they will surely copy a lot features from
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?
Swing is horrible and instantly recognizable as "Java" when you run one of the apps.
It doesn't have to be. This look and feel (requires java installed) can be used for prototyping (so the boss doesn't think it's done) but mostly shows the power of swing + PLAF (pluggable look and feel). Here's a screenshot and this is the site, those widgets actually work.
Attention zealots and haters: 00100 00100
In Ubuntu at least, the package managers only installs Eclipse 3.1. You have to manually download and install/configure any newer Eclipse versions. It's really a pain. I don't have a clue why it hasn't been upgraded...
download; tar xzf eclipse-SDK-3.4-linux-gtk.tar.gz; eclipse/eclipse; start coding. Now, was that so hard?
On the Eclipse side of complaints, wheres text wrapping? Many 'smaller' IDEs have that.
in preferences there is a search box, type "wrap", search. You can configure that (it is formatting, so it works when you do Ctrl-Shift-f or when you trigger that on save).
Why don't you just go up one level at that link and read a few of the offered comparisons? It looks pretty even-handed to me (on just the languages themselves), and if there's a bias it's towards painting C# as basically the same as Java. Hence the post (in sarcasm) that you responded to.
Attention zealots and haters: 00100 00100
The article is a really sad swipe at eclipse.... Too bad that's really not even important. I love using eclipse to write C# code. Visual studio is also good but very costly. It and eclipse are very close in features stability etc. They are both decades old though, so it's really very premature to even compare monodevelop to either.
That being said a Mono/.NET's approach using a CLI is simply better than java. Period. It's not arguable to say "Java is better than the system that can use any language". with Mono you can code in Java, VB, C#, hell even cobal and get nice nativity compiled libraries out. it's just a better system. The argument can be over eclips vs monodevelop but CLI vs java is just not even a discussion worth having. I know there is the capability for java vm to use other languages but, well, it dosen't.
Let's see...
On Linux, it's in the package manager. And it's likely to be far, far less than 200 megs worth of dependencies.
On Windows, Java is maybe, what, 30 megs? 50 megs?
And while .NET is huge, "worth your time"? It's right there in Microsoft Update, and it ships with Vista. You are getting your updates, right?
Even if your statement was true, if it was a good note taking program... I'm on fiber. 200 megs is nothing.
Don't thank God, thank a doctor!
So, basically, powerful features are "messy", and having to for example create extraneous classes to work around a Java limitation is "a nicer way to go"?
Attention zealots and haters: 00100 00100
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.
You have to understand what that mod really means. Anyone who would mod down something for merely disagreeing with it is a total putz. Hence the "Troll" mod is basically only ever used to admit something about oneself.
gcj & other native Java compilers are all in our imagination?
And that official reference implementation is supported on *more* than one OS family.
And there are first-rate development environments (IDEs) available in the F/OSS world, for any Java-supporting platform.
Seriously, on a language-vs-language level, I'll admit that C# is leaping way ahead of Java (which seems far too complacent). But on a platform-vs-platform level, Java has *loads* more of a community of stuff than .NET has. (with .NET, it either comes from MS, or you have to pay some dippy little shop lots of license fees to use it)
it was coined by the same people that consider java "functional". They're from the society for creative definitions.
The Mono packages (including libgdi+) come in at 26MB
Java weighs in at around 57MB (jdk 1_5_0_16 bin and src, required for install on my system, I won't bother adding in the patches required for FreeBSD since they aren't required on other systems.)
Java is 15MB on windows (full install), 20MB on Linux.
Now, here's something that I can say for caring about the language used: Java uses the system regular expression library. I was trying to figure out why an app I was using worked differently in Windows XP, Linux and HPUX. Turns out, it was using the regex based find function. I decompiled the bastard, and added in my own custom find function. It was slower, but identical input provided identical output.
I've not had that issue with .NET/Mono, provided the application wasn't built on the most recent Visual Studios release. Even if it was in the most recent VS release, if it worked, it worked fine, but some apps would only work in Windows.
Neither is perfect. Pick your preferred bugs. At 26MB for mono, it's a better option on FreeBSD, but Java is smaller on Windows and Linux. In either case, unless you are on a system that 8-10 years old, or an embedded system, that amount of disk space isn't really a huge deal.
Self proclaimed typo king, and inventor of the bear destroying coffee table (patent not pending).
LINQ kicks ass for just the functional aspect of it.
I hate to bring this up but LINQ isn't protected in Mono. I have a feeling that this is one of the things that are really going to hurt a lot of people when MS decides to sue.
Cheers!
Well, I have an easy answer: They both are crap and can't hold a candle to Haskell. In code beauty, elegance, efficiency, and speed.
Any sufficiently advanced intelligence is indistinguishable from stupidity.
Why would you do this crazy madness, when you could just use Haskell, which was designed from ground up with all those cool concepts that now get glued left and right to every second language? .NET implementation too, including all the APIs.
You know, it has a
Any sufficiently advanced intelligence is indistinguishable from stupidity.
> basically talking about how Debian is garbage
Indeed. The default tomcat starts from a switch user script which keeps the environment variables. As a result user.home is /root and user.name is root. But of course the Java binary runs as user tomcat which doesn't have access to its own home dir.
Then they ship with a broken security policy which denies everything beyond JSP .
The Debian/Ubuntu core packages are fine, but Java, which defaults to GCJ, and all dependencies like ant, eclipse, tomcat, etc. are *COMPLETELY* broken.
NEVER EVER INSTALL debian or ubuntu non-core components.
creates what I'll call an executable stub that invokes the IL code interpreter
I'm sure the GP is referring to compiling a program down to 100% native machine code. If there is an "interpreter" involved, then you don't get that.
GCC's gcj will do this for *some* Java apps, but it has limitations (mainly on the GUI side). Don't know about Mono.
Even JIT compilers, which Java has, and I assume Mono as well, can only compile parts of a program to machine code, the virtual machine's interpreter loop is still there, so between that and the overhead of the garbage collector, Java/Mono apps are prevented from approaching the speed(*) of a fully compiled app, like one written in C/C++ for example, because the latter has no interpretation being performed.
(*) speed being also dependent on how well/poorly the app is written, whatever its language, of course.
I like IDEs and debuggers :(
I used to rail on about delegates and C# until a very well respected Java guy I knew taught me about anonymous class declarations and how I could use them to accomplish a very OO delegate. I learned that 1 it was much cleaner and 2 i was a moron.
You don't know shit, you pompous ass.
P.S. "Young one" is something said often by the unfortunately unskilled and unwise old and irrelevant generation.
Java may not be moving anywhere, but languages on the JVM sure are. Clojure, Scala, JRuby, Jython, and of course, Groovy.
Reviewing just the first hour of video games.
1) High performance VM
When measuring performance, the standard deviation is more important than the average.
The JVM may have lots of performance, but it boots up slowly, it warms up slowly, and when the garbage collector kicks in the world gets frozen.
The CLR may not have such a fancy VM, but its main language (C#) is more efficient on current hardware (structs are allocated on the stack, methods are non-virtual by default), while being better designed.
2) Code that does what it says without hidden conversions, text substitutions, and macros.
This implies that explicit code an 8 year old can read is somehow better. That's not always the case.
One way to tackle complexity is to build layers of abstractions. For a positive example you only need to look at mathematics ... imagine all the theories in analysis, probabilities, statistics, formal languages ... being described and demonstrated in the language of an 8 year old.
And another thing ... in every other profession, simple and abstract is almost always equivalent to concise. Except software engineering, a view shared especially by Java programmers that got burnt with C++. Well, maybe you shouldn't use Java either, since it does weird things to objects that aren't referenced anymore. C++ is a lot more explicit in this regard.
3) Other languages that are actually useful like Scala and Clojure.
F# is an Ocaml clone, and I saw a lot of Ocaml libraries being ported to F#. It also has good VS integration and good tools.
Axum is a language with actor-based concurrency, much like Erlang. It's still experimental, but I've played with it, and it's already solid.
And then there's the DLR which is a framework of optimizations for new languages and a MOP making dynamic languages interop better ... meaning you'll be able to directly instantiate objects written in IronPython from IronRuby or from C# (using "dynamic").
I know of an open-source effort for Java, similar to the DLR, but if it doesn't get adopted as a standard among language designers, then it's all in vain.
Also, .NET has had from day one better integration with C/C++. If I'll have to use JNI again, I'll probably kill myself.
And LINQ? Why are you doing database and 'data sources' queries in something like C#?
You misunderstood LINQ. It is a generic framework for doing interrogations on any kind of collections. Being able to query databases and XML objects is just a side-effect of its design.
And it's really useful too. If you look at any piece of code you wrote, chances are you're looking for some kind of object in some kind of connection or data store. Linq gives you type-safety, a C# syntax for queries (with C# methods and types) and a unified language for interrogations on structured data (instead of having to use SQL (specific to your rdbms), XPath and iterate through arrays, all in the same method ... it does joins on too), and it can be extended to any type of data-store, like CouchDB and HBase.
This seems to me that you're just sorrow because the grapes are out of reach.
C, Shell, and Perl work well enough. What is this 'mono' and 'java' you speak of?
Wrong, C# and VB have very little in common - except they both can compile into MSIL and use the .NET framework. LIKE EVERY OTHER .NET LANGUAGE.
(sorry VB.net compiles to MSIL - not classic VB which is absolutely NOTHING like C#)
C++ is widely recognized as a byzantine failure in every case.
Well, I don't know that you can get away with "widely recognized", but certainly you yourself are entitled to the opinion. I used to share it too, even when I was using it professionally.
Two things warmed me up to C++: Exceptions and RAII. Exceptions *cannot* be replicated in C. Throwing an error condition and then aborting block by block until you find one that wants to catch the error condition is just a god-send for writing error-safe code.
RAII is *necessary* given Exceptions, and merely extraordinarily convenient otherwise. You don't want to count on getting to the "cleanup" bits at the end of your functions because (a) you'll forget them occasionally, and (b) exceptions will circumvent them. Allowing cleanup to be associated with the object that needs to be cleaned up, and then having it automatically called when the object goes out of scope, is god-send number 2.
I have yet to see a language that does RAII as nicely as C++. Python is coming close.
Because it's not about which language is "best." It's about which is most cost-effective. Programming is either about money, or it's masturbation (not that there's anything wrong with that....).
.
When was the last time YOU made money with Haskell?
Please do not read this sig. Thank you.
The London Stock Exchange example is useless. Yes, it ran Windows Server and an application coded in .NET. Yes, it crashed. But no one can prove whether the problem was the operating system, the database, the .NET platform, or buggy code.
It's my understanding that C# is more popular than Java for desktop applications because of faster startup and lower memory use. I can't imagine many companies would decide to move to C# from Java for server applications for anything more than political reasons.
That's actually really cool - it doesn't look anything like Swing, which I supposed is the point :)
Going from a procedural language to a procedural language with functional options is relatively easy. That's cases like C++ to C#, or even older versions of C# to LINQ. It's also true with Java and Scala. Going from a procedural language to a purely functional language like Haskell is far more difficult. I'm a mediocre C and C++ developer and a passable Java developer, and it's taking me a lot of work to learn Haskell. It seems worthwhile, but I can understand why Haskell hasn't taken the software industry by storm.
Scala is available for .NET too (http://www.scala-lang.org/node/25 - bottom of page).
As a platform, .NET has far more in common with Delphi than it does with Java. It even shares a common creator.
You need to restart your computer. Hold down the Power button for several seconds or press the Restart button.
1. Competition is good for both projects
2. Java has had serious problems and still has. Although it recently became open source, it it still controlled by one company. And this company has NO CLUE how to build a good software product. Instead of building the essential blocks needed for desktop applications, Sun company invents spects which nobody needs (example: EJB1) or nobody wants. Linux users are left with a half working implementation which fails to even meed the basic requirements: no module system -> "jar version hell' -> NoClassDefFoundError exceptions at runtime, a broken GUI: swing draws everything and then sends the result as a huge IMAGE down to the X viewer and so on and so on...
> Anyone see Apple fucking around with Mono?
Since Apple isn't pushing Java anymore (Jobs once called it "bloatware"), Novel's Mono is quite strong on the mac.
> Anyone see Google fucking around with Mono?
Google has implemented its own JVM to get rid of the many problems that Sun Java (the platform) has. Dalvik is how java me should have been.
> But the Linux community never fails to seize an opportunity to shoot itself in the foot
Continue reading at point #1 until you understand the linux ecosystem.
Whoops, that was supposed to be:
Not sure if it's me or slashcode this time, it's certainly been eating some of my spaces so I wouldn't be surprised.
Yes, that probably will change in the future, but as of now listing non=standard is somewhat dishonest.
Analogies don't equal equalities, they are merely somewhat analogous.
I'm not sure why this is marked flamebait....
I've never worked with Java, but I am a full-time .Net developer. The second real job I had was a consulting gig....we did most of our projects in .Net but a few clients either had existing code in Java or wanted to use Java to avoid costs often associated with Microsoft technologies.
Anyway, while I didn't know Java, we had a lot of very sharp programmers who worked on professional, successful projects in both Java and .Net. The general consensus was basically what parent said.
From what I've heard, ASP.Net really makes web development a lot cleaner than the Java equivalent. Go here and check out the graph - http://news.netcraft.com/archives/2004/03/23/aspnet_overtakes_jsp_and_java_servlets.html you can see ASP.Net gaining market share and passing Java technologies, back in 2004.
I believe JSF was supposed to be Java's answer to ASP.Net - but from what I've heard it's not quite on-par.
Visual Studio isn't a requirement of using .Net (and isn't relevant to the Linux development discussion) but in terms of general .Net vs. Java - it really does seem to offer more to the developer than any of the Java IDEs. Yes, you can find plenty of Java programmers with years of experience in Eclipse who use Visual Studio and say, 'Man this sucks because you can't do X, Y, and Z' (but X, Y and Z are available - they just didn't find it). But yeah amongst people who regularly use both, I really believe the majority are going to say that Visual Studio is the way to go.
More recently, LINQ has made a fairly large splash in the development community. There have been quite a few articles/blogs expressing concern that LINQ, along with other .Net developments are giving .Net a clear edge over Java. And some of these are coming from Java developers - which means it's more than just fan-boy crap.
http://tech.puredanger.com/2008/01/31/is-linq-leaving-java-in-the-dust/
I know of, at least two, Java-based implementations of 'LINQ'. But, really, they are just playing catch-up to Microsoft's innovation in that area. And while many of the basic samples given work perfectly, if you dig deeper you'll find that they are lacking, compared to the Microsoft's LINQ. Naturally, people have been programming for decades without LINQ. It's not 'needed' by any stretch of the imagination...but many feel it's an important step forward.
Anyway, I'm *not* saying .Net is better than Java. But, I am saying there are certainly people who would make the argument. And there are certainly people who would argue that Java is better. They both have some real pros and cons....but the parent pointing that out isn't flamebait.
When I wanna read highly likely baloney articles I visit http://digg.com/ (no offense Kevin, but it happens more often than not nowadays - unlike when digg was still new)
I come to Slashdot because I favor and believe in the system article moderation system.
So how then does nonsense like this reach the Slashdot front page?
Check this, 240 languages and counting: http://www.is-research.de/info/vmlanguages/. Now just die of shame.
Of course not all these "languages" are highly relevant. There are abandoned or not well maintained projects, academic stuff, and several extremely niche languages/tools. But I suppose this can be said at least for a few of the .NET entries as well.
Wikipedia's articles have very different quality. You'd think that the articles used some criteria like only including languages which are current / well maintained, but the JVM article it misses such entries like JESS and Drools, both very "alive" and popular for logic/IA and rule-based programming.
> Java/Mono apps are prevented from approaching the speed(*) of a fully compiled app, like one written in C/C++ for example, because the latter has no interpretation being performed.
Not really. Their speed may never equal that of a similar program written in C/C++, but it's getting pretty close. Besides, a JIT compiler could compile the complete program when you start it, thereby removing the interpretation completely, introducing only a slight delay before the program can start running (which should be no problem at all for any program that is supposed to run for more than half a minute).
But no one can prove whether the problem was the operating system, the database, the .NET platform, or buggy code
Actually the answer to that question is "Yes"
Why bother
Gotta love these MS fan bois.
Why bother
According to the language shootout mono is 50% slower. That's the best case for mono, because in a real program with lots of heap and method calls more than 1 or 2 deep Java destroys mono, and is significantly faster than CLR. JVM is ridiculously fast.
Extension methods in C# are text substitutions. Look at the IL like you mention, and they look nothing like what appears in the source code. Same with lots of other features in C#... what the code says and what gets compiled to MSIL are sometimes very different.
is really making progress on my Commodore 64.
Seriously leaving Java in the dust.
Eclipse sucks on my C-64 too. It can't even load XML files bigger than ~60K yet.
a lot of shit there ... probably smoking something ... you don't understand ... you can't understand ... you shouldn't be spreading shit ... you must be out of your mind ... just a java fanboy ... nonsense shit
-1, Flamebait
I can't give numbers
So you base your argument on personal, subjective experience. Nice.
Disassemble a call to an extension method. It doesn't call a method on the same object in MSIL that it does in the source code. It's 'magic', which C# like C++ is full of. Just like the post said.
C++ isn't a supported language any more than JNI/C. So for usable languages you have C#, VB.NET (mostly a different syntax for C#), F#, IronPython. Compared to Java, Scala, Groovy, Clojure, JPython, JRuby, Fortress, etc. Your point?
I really, really like C# and I gotta say, I'm a big fan of operator overloading,
Great... another person who probably overuses operator overloading.
Hint: operator overloading is just like inheritance: it should be used extremely sparingly, and every time you use it, you should think twice and make sure there isn't a better approach you could be using.
BTW, C# has plenty of other features that make it superior to Java, real, honest-to-god lexical closures being the most obvious.
Why would you do this crazy madness, when you could just use Haskell
Because only a masochist would actually want to develop large volumes of code in a lazy functional language? Because the toolset sucks? Because you can't hire people who actually know it and can use it effectively?
I sit corrected.
Why bother
Great... another person who probably overuses assumption.
Hint: Being a douche bag and making assumptions without context is just like being a fucking twirp: it should be used extremely sparingly, and every time you use it, you should think twice and make sure there isn't a better approach you could be using.
But hey, while we're on the assumption train should I just assume your another jack off functional programmer that thinks he knows everything? (Which, in and of itself is an assumption about functional programmers, but hey... most of the vocal functional programmers around here are assholes so with my limited context why not presume that all functional programmers are assholes and so... well... you must be one too.)
There are plenty of instances where operator overloading is legitimate. (You know, like Java internally overloading + for string concatenation.) When I make a method like .add() it's amazing how often that would be more programatically natural to use, oh I don't know, the fucking +. Combining two objects to form a concatenated object is another instance that it seems useful too, particularly if it returns a new instance. (In fact if it modifies either of the objects in question, that's a BAD use of "+".)
And how the fuck is inheritance something that should be used "sparingly"? It should be used--like every other thing in the programming universe--when it makes sense and when you need it. It makes a lot of sense in some projects and none in others. And--like every other thing in the programming universe--it's abused and misused. Shocking.
Abuse of operator overloading is no different than bad naming conventions for methods. Obviously, since you seem to know something about C# you probably also know that no one is forcing you or anyone else to utilize operator overloading at all in any language.
Unlike Sun's JRE, both Microsoft's .NET Framework and Mono have an AOT compiler - in case of .NET, look for ngen.exe. Mono has an --aot flag, but I ran into problems with it. Both are supposed to generate native binaries that - compared to C/C++ binaries - include additionally just some debugging and runtime data, but everything runs natively from clock cycle 1.
Ezekiel 23:20
Ezekiel 23:20
But hey, while we're on the assumption train should I just assume your another jack off functional programmer that thinks he knows everything?
Why, because I know what I closure is? That's awfully short sighted... closures are available in most major languages these days, save for some glaring omissions (Java being one of them... and Python, whose closures are somewhat crippled), and are incredibly powerful tools, particularly if you're writing event-driven applications.
There are plenty of instances where operator overloading is legitimate.
Plenty? Hardly. Some (I would say a few)? Yes.
When I make a method like .add() it's amazing how often that would be more programatically natural to use, oh I don't know, the fucking +.
And how often, pray tell, do you actually find yourself doing that? Most people aren't (and shouldn't) be writing their own math libraries, so that's out. So, other than in a setting where you're performing an arithmetic operation, why on earth do you need to implement an operator+?
Combining two objects to form a concatenated object is another instance that it seems useful too
Uh, definitely not. + for concatenation is an excellent example of *stupid* operator overloading. And that's doubly true if the language supports dynamic type coercion (I'm looking at you, Javascript). There's a reason Perl uses the '.'. Most other languages do it because they inherited it from somewhere else.
No, at best, concatenation should get its own operator to indicate you're, you know, concatenating two things together.
And how the fuck is inheritance something that should be used "sparingly"?
Because 99% of the time containment provides the same capabilities while reducing the coupling between the code. Do I really need to spell this out for you?
And--like every other thing in the programming universe--it's abused and misused. Shocking.
Precisely. And your first position should be to *not* use it until you've convinced yourself that it's genuinely the best solution for the problem at hand.
And just like inheritance, 99% of the time, operator overloading is the *wrong solution*. It makes code more difficult to understand and predict, as the overloaded operator can be hiding complex logic behind an expression that, on its face, looks simple. As such, just like inheritance, one should come at a problem with operator overloading at the *bottom* of one's list of candidate solutions, and only use it when you're convinced it really is the best tool for the job above all other options.
Bingo. Unlike languages where the 'powerful features' are a consequence of the semantics, C# designers apparently feel the need to keep adding more and more constructs to allow non-object oriented programming techniques to be used.
An example of this I think is C#'s handling of events (they are specified as a language feature, or at least treated like one). In order to allow you to call an anonymous method without typing problems (to allow event handlers to be added to an event) the concept of delegates was necessary in the language. Java has neither, instead it is all implemented within the existing object-oriented semantics of the language. There is the concept of listeners which are added to objects that call known methods in the listeners when an event occurs.
This might require a little more code, but anonymous classes (i.e. extend a class/interface, specify methods 'in line' -- like lambda functions but for objects), but is much more flexible and allows the concept to be reused in situations it was not originally designed for -- by making a listener a remote object in an RMI application you can have distributed events.
In addition to this, complicating the language makes it harder to implement portably -- a higher chance that implementations will be subtly different. Keeping the core language simple is a good thing if you want your language to be portable and implemented by others.
Well, they have prudently removed MS .NET tests vs Java (-server) on Windows. .NET was on average 15% faster there. FOSS zealotry at its best - if Microsoft beats us, let's remove the test.
Microsoft doesn't allow published benchmarks of .NET, apparently some 10 years later they are still embarrassed with its performance, so I'm not sure why you are complaining about OSS.
Makes perfect sense then, if you favor language purity and neatness and having to type more boilerplate constructs all the time, over language power and expressiveness and having to deal with complexity and non- beginner-friendliness. I guess hence why Java people hate C++ and call it too complex. And dislike C#. And C++ people hate Java and call it dumbed-down. And tolerate C#. If Mono is outpacing Java in desktop Linux apps, maybe it is this nature of it that is partly why.
Attention zealots and haters: 00100 00100
It could compile all the functions/methods/objects of your app to machine code, but your app is still being "processed in a loop", even if most the normal work of that loop (bytecode interpretation or JIT'ing) has already been done. Instead of interpreting bytecode, the loop just directly executes the native code, but then return passes back to the loop and it goes to the next chunk of code to run, and then the next, etc.
That "control loop" is the "main()" routine of your platform's runtime engine (CLR/JVM) and is still adding some (however small) overhead, in addition to the eval loop, there is garbage collection, the security framework, error checking/handling, dynamic typing, etc, etc. Thats why they call it "managed code", and it applies to both CLR/JVM equally. You can't completely get away from that "managed" aspect, if you could, it wouldn't be CLR/JVM anymore.
However, as you or someone said, depending on the source code, a clever JITC with a highly optimized runtime, can get within 5% of the speed of "unmanaged code" (ignoring garbage collection), I wasn't trying to imply that it was always a drastic difference. For many apps/purposes, thats plenty "fast enough".
Well, there's a switch to the Java runtime to tell it to "compile everything it can *before* running" which is close to the same as "ahead of time". It isn't precompilation though, true. I guess there's a philosophical difference here between CLR & JVM on this, since precompilation *could* turn into "premature compilation" that can actually prevent a JITC from doing the best runtime optimizations its capable of. A JITC that can optimize across the entire program, possibly using runtime profiling information, is best when it can "see" all of the "code", whether in source or bytecode form (CLR/JVM bytecode still preserves semantic information about the code/data an optimizing compiler needs, which is normally lost once the code is compiled all the way to machine code).
Its probably just because of the fact that CLR is now integrated into the OS (Windows), that it made sense to MS to support precompiling it just like any other system library, after all, to them, thats what it is now: a system library.
I probably should have been a little more clearer in what I meant by compiling "down to 100% native machine code". I wasn't just referring to any bytecode that would need JIT'ing or interpretation, I was also thinking of the overhead (no matter how significant or not) imposed by the platform's runtime engine (CLR/JVM).
See my response to the other poster.
The upside of "managed code" is that a lot of things are done for you, the downside of managed code is... that a lot of things are done for you. :)
They both are crap and can't hold a candle to Haskell. In code beauty, elegance, efficiency, and speed.
Everything I've heard says Haskell is rubbish for general-purpose programming. Haskell has a win because it's pure-functional, but that only matters if you don't have state and you don't need to interact with the outside world. And everything has state, and needs to interact with the outside world. Monads? Don't talk to me about monads. If you pass a state variable everywhere, it's a horrible, kitchen-sink mess.
i'd hit it so hard, if you pulled me out you'd be the king of britain [bash.org]
It's my understanding that C# is more popular than Java for desktop applications because of faster startup and lower memory use.
Well, its *my* understanding that C# is more popular than Java because its being pushed by MS, the 800 pound gorilla of the PC desktop market, and oh, I would imagine the difference between being integrated with the OS (IE all over again) versus making end users go onto the net to get the other one, is also playing a role...
:)
So which of us is going to blink first and reach for our trusty '[citation needed]'?
which means either using the latest version of Mono
Staying compatible only until Microsoft decides it doesn't want Mono to be compatible.
Hell, even Windows developers don't necessarily care about staying current.
Guaranteed job security by using tech others don't know.
I'm a developer on two commercial apps written in C#, and they both target .NET 2.0. In the case of one of them, that's specifically so that it will be compatible with Mono.
Because you say one will, it's only logical to conclude the other will or may not be compatible. So whoever uses it may be locked into proprietary software then left out in the cold when support for it is dropped. And yes, MS does do that. I bought a brand new PC with NT4 and 3 years later MS stopped supporting downloadable patches. The last tyme I ran Windows Update the MS mothership said it no longer offered the updates online, it further said that if I wanted the latest update I'd have to order it on CD then they'd ship it.
And when .net reaches 5.1 or 10.1?
By then, presumably Mono will have caught up with .NET 4.1 or 8.5.
Unless MS wants to break compatibility, which I had already said they do.
By your reasoning people should still be using Windows 3.x. I doubt 1% do today.
The situation with Mono is different. If you write a bunch of C# code for Mono, using the features of .NET 2.0, because you want your software to run on Linux, you aren't going to give up on Linux compatibility and throw away all that investment just because Microsoft releases a shiny new version.
No it's not different. If a person wanted to they could still write software for Windows 3.x and those who have the OS can run it. But Someone running Vista will not. With Mono, sure something may run on the current version of Mono today, but that does not mean Mono will be current in 5 or 10 years. Anytime MS wants to they can stop supporting Mono and make .net incompatible. Heck MS doesn't even keep compatibility between different versions of Office. I doubt that many people using Office today would be able to view a document created in Office 1997, without some plugin. And I definitely would not be able to open and have rendered properly a document I create in Office 2007 in Office 1997.
You really think Linux developers are willing to give up on Linux just to "remain current" with Microsoft's releases? Seriously?
If they want to remain current but MS stops supporting Mono, and breaks .net so it is not compatible yes.
Falcon
Should there be a Law?
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).
It would be nice if gcj would work on modern Java programs as it didn't the last time I checked. Or at least not with the sample of programs that I tried, but this was admittedly some time ago. I didn't explore more because my requirement was for those particular programs (I was revising a course I'd written on them) and I just grabbed a suitable Sun JRE instead.
"Little does he know, but there is no 'I' in 'Idiot'!"
when the garbage collector kicks in the world gets frozen
Errm... I'm pretty sure this isn't a big problem in Java anymore. Now in Mono, it may be - Mono does freeze the world to GC, and it uses the Boehm garbage collector which is a relatively crude, non-compacting mark-and-sweep collector only slightly evolved from the 1960s. In 2.6, they're planning to move to a generational GC, thereby catching up with Java 1.2 (released 1998). I'm not exaggerating - I've read the docs, and it's the same scheme as Java 1.2's.
I wouldn't touch either of these platforms with a stick, unless absolutely necessary, as a user or as a developer. The trivial extra work required to avoid them is always worth it.
I think those are accurate points.
.NET by a long period. Java Web Start, Sun's idea for easy web distribution of digitally signed Java applications with fine-grained security, also predates .NET.
.NET framework for desktop apps. But the damage is done, the window of opportunity is closed.
But Java has been around for years, most PC vendors have shipped their products with the Java Runtime Environment (JRE) pre-installed, and many Linux distributions install the JRE by default or make it an easy option. It all predated
Java desktop applications had plenty of time to gain marketplace momentum, the infrastructure and development tools have been free, and the PC vendors sold desktops and laptops with the JVM pre-installed. It still never took off. As PCs get more powerful, Java GUI themes get much more pretty, the JVM continues to get more efficient and lean, Java is moving into a position where it is the technical equal (and source code license superior) of the
But Java has been around for years, ... Java desktop applications had plenty of time to gain marketplace momentum,
True (although FWIW, the last complete PC that I bought did not include Java), and nor will I argue about the technical flaws of Java, they can and are being fixed, but they exist now and are real. The main difference is what I alluded to, that Java has always been trying to be cross-platform, something which MS obviously doesn't care about.
It still never took off.
Well, besides Java's technical problems that I mentioned, MS also played a role in this as well. They never wanted Java to succeed because they didn't control it. Once the embrace&extend of Java failed, .NET became "Plan B".
the window of opportunity is closed.
On the Windows platform, certainly. That was inevitable once MS released .NET. NET has little to no relevance to the other platforms however, and I don't believe Mono can change that.
Everyone knows why MS created NET, and I believe *most* people on non-Windows platforms know not to touch it, even with a ten-foot pole.
Microsoft's embrace and extend isn't what stopped Java GUI apps from becoming popular. I'm no big fan of Microsoft, but Java's failure on the desktop really has nothing to do with Microsoft and everything to do with Java.
I don't have a problem with Mono. Nobody is shutting down OpenOffice or Google Docs for interoperability with Microsoft Office proprietary file formats. Nobody is shutting down MingW for compiling code that runs on Windows. Nobody is shutting down Wine for building a Windows API layer. Nobody is shutting down Zimbra and Open Xchange for providing compatible features from Microsoft Exchange. The Samba is even working (finished??) on full interoperability with Microsoft Active Directory.
I ignore Mono because I see no reason to tackle C#'s learning curve when I'm comfortably employed as a Java developer. If I want some of the C# and F# features Java doesn't have, I'll use Scala. But I don't see any problems with using Mono.
But it's quite simple. Dot-Net is for Catholics, and Java is for protestants.
Build your own energy sources from scratch. http://otherpower.com/