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)?
This is like saying touch-enabled applications have made great gains in iPhone application share.
Or that there are more MFC apps than Java equivalents for Windows productivity.
Heh? Someone bought tickets to the spin train.
A lot has changed in the last 10 years. Your comment is very telling, and not very helpful. It's so bad, it's not even wrong. I'm sorry that's what you think.
With .NET, there is loads of stuff built in so I am not doing a lot of low level coding.
There are orders of magnitude more stuff "built-in" to Java (the platform), 3rd-party stuff, independent implementations, and it's had a good decade and a half of hardening in real-world situations (top businesses etc.)
gcc even has a java (the language) compiler now (OK for about 5 years) that generates native machine code (what everyone used to whinge about) and there are independent implementations of the Java libraries (e.g. GNU Classpath).
Mono needs to die a death. Please ignore it and hopefully it will go away.
Stick Men
The difference between Eclipse 3.4 and 3.2 is night and day when you actually use it.
Just because it looks the same (a shock to people who might want to change their hentai GTK theme every week) doesn't mean it is the same.
It's like those idiots that uses Java 1.1 in 1998 and think that Java 6 is pretty much the same.
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.
Please see this.
Yours In Parentheses,
Kilgore Trout
...Packaging has also been a detriment to Java on Linux, said O'Grady...
To this, [Linux] zealots will defend the status quo saying choice is working for Linux as if there are no draw backs.
This same problem is being reflected on the choice of desktop environments. No wonder after a decade of "Linux on the desktop", we in the Linux world still command a very small percentage of active users of desktop Linux. Some say we are irrelevant. It's sad.
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 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
It's a developer tool. Pull down the archive and run it. If it's that difficult for you, you have no business getting paid to develop code.
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 ?
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.
It rained here this morning, that means it must have rained all over the world.
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.
I'm sorry, but Eclipse just runs from the decompressed download, even if it's on your desktop.
If you need help adding a shortcut to your menu when you are a developer, you're in the wrong business. Maybe you need to be using .NET.
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.
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.
The Banshee guys, the Beagle guys, the Blam! guysm the Diva guys, the DotNet BlogEngine guys, the GNOME Do guys, the F-Spot guys, the FusionFall guys, the Graffiti CMS guys, the iFolder 3 guys, the KeePass 2 guys, the Second Life guys, the MonoTorrent guys, the Muine guys, the PHP4Mono guys, the Smuxi guys, the Sky Net guys, the Unity guys and the VistaDB guys. Just to name a few.
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.
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.
Yeah, I can do it, have done it, and have found it pretty easy. But as I said in my post, I have VMs ready to go. Most shops employ people who won't go to the trouble of learning how to use a repository installer let alone a tar/gz/rpm install, and I'm in a shop like that now. Last job, no problem--but go to an MS shop and tell me what you find...
Thanks, this was a big part of my point the other guy didn't seem to understand.
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...
After all the years of just how invincible and all powerful open source is it is staggering to look at how easy it was to stop it dead in its tracks:
A simple fork of the current main desktop package and the Linux world has been wasting their time in KDE vs Gnome flamewars for years now.
And then you had Sun performing the thankless task of keeping Java free from destruction by Microsoft while the stupid little kids here on Slashdot were screaming about how Java isn't 'GPL'.
And now the Linux community is actually starting to willingly include a Microsoft patent mess right into the heart of distributions - and for what? A few shitty and poorly written apps that already have faster, lighter, and better C++ versions.
Anyone see Apple fucking around with Mono? Nope.
Anyone see Google fucking around with Mono? Nope.
You would either get laughed at or outright fired if you made such an inane suggestion.
But the Linux community never fails to seize an opportunity to shoot itself in the foot.
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?
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
Is this the part where you want us to name all the projects that use Java?
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.
"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
Actually it did not rain here today so I am highly dubious about you're claim that it rained where you are.
Creationist Textbook Stickers Declared Unconstitutional by CowboyNeal
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
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.
I've used the GNOME desktop for awhile and I have always used a lot of
KDE apps just because they were better and more mature and more complete.
All the "speed of development" that the Microsoft centric development
process is supposed to enable here doesn't seem to be materializing.
A Pirate and a Puritan look the same on a balance sheet.
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?
By that definition, both produce surprisingly lean executables.
http://www.mhall119.com
Actually, it was a precipitation superposition here today, so I find both of your claims highly suspect and extremely plausible.
"I know that every word that man just said is true, because it's EXACTLY what I wanted to hear." -- Space Ghost
This must be a meaning of the word 'only' that I wasn't previously aware of.
MP3 Search Engine
How many application servers have you got where you can run C# servlets?
How many companies use C# to write Enterprise-level servers?
What does C# give me that Java doesn't?
Unless all of the above have a positive and constructive answer, I don't see any point why I would learn another language for my Open Source projects/contributions when I'm an expert on Java due to my day-time job. This article is bullshit.
Java vs C# is the wrong comparison to be making when it comes to what is "better" to develop on. What should be looked at is the JVM vs CLR. This is where the real power of these two languages, and the others that run on them, comes to light. Languages and libraries can be made, but if the underlying VM doesn't support certain features, no syntax will make up for it. And, in my opinion, the CLR is slightly ahead of Java when it comes to power, mostly because of the support for generics at runtime, whereas the JVM doesn't (Java generics are type erased at compile time).
A major fault that I've seen in numerous sub-threads is the idea that a Java user interface equals Swing. It most certainly does not. Swing is merely Java's complete pure-Java (i.e. cross-platform) user interface geared towards providing a unified look-and-feel. In this respect, it does a good job. While there's nothing inherently wrong with it from a toolkit perspective, it is absolutely not appropriate for usage on the Linux desktop.
Programming for the Linux desktop means more than producing a windowed application; one must integrate their application, both in terms of user interface consistency and application interoperabililty, with a major desktop distribution. Specifically, I'm talking about Linux's "big two" desktop environments, KDE + Qt and GNOME + GTK+. While each of these environments have their preferred languages (C++ and C respectively), many other languages have no issues whatsoever being tightly integrated into them via bindings.
Java is no exception! In Java, I can program a wonderful GNOME/GTK+ application just fine with java-gnome. Similarly, I can program a Qt4 application with Qt Jambi (although I can't seem to find an equivalent KDE4 bindings library) in Java. An application written in either will appear and operate on par with any application written in other languages, either natively (via C or C++) or via another bindings library (Python has a ton of bindings).
Furthermore, just like GTK+ and Qt have cross-platform capability, so do the bindings, and if the appropriate binding library for a given platform is installed on that platform, the Java application, too, will be able to be cross-platform without modification. This is, of course, the job of the distribution and/or installer software, but operates similar to the Deluge (Python) installer for Windows, installing the client port of the toolkit (GTK+, in this case) and the language bindings (PyGTK) alongside the application.
That's exactly how the Mono desktop applications work: they write their logic in native C# and use GTK+ bindings (GTK#, in most cases) to integrate with the Linux desktop environment.
Any Java application written for the Linux desktop that uses Swing over native desktop bindings is foolish. Each has their place, for sure, but on the desktop integration is everything.
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
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.
The beauty of the Linux community is that people can work on whatever the hell they want. Why should I care if someone wants to write a program using Mono? People writing software should use whatever tools they think would be best. And I'd guess that the people complaining about Java not being GPL aren't the same people using Mono. Stop trying to lump all open source users/developers into one group. People use it for different reasons.
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.
The fact that posts like yours get modded up here ashames me.
So the facts that Qt and Java's licensing were problematic due to copyright concerns (y'know, those things pretty much the entire world recognizes thanks to the Berne Convention) are just a triviality best ignored, while Mono's alleged "patent threat" is a serious problem despite being at *best* limited solely to the US and Japan?
And somehow the fact that the NIH poster-child Apple isn't using Mono is supposed to support your point, despite the fact that they've got the WORST support for Java in the entire industry, prefering instead to push their own little C fork?
Its obvious you have an axe to grind, but thats no excuse to ignore factual information and logical arguments.
No problem is insoluble in all conceivable circumstances.
"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.
You have just got to be kidding. For Windows it's just a .zip that you unpack, then run eclipse.exe. Make a shortcut if it helps. For Linux it's a tar and you can use a graphical archiver for that too. If a "software developer" can't work that out, I don't want to be anywhere near their code. It takes more clicks just to create a new project than to install Eclipse!
Sam ty sig.
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.
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?
Jesus Christ the paranoia is thick in here today... what happened? You all lost your tin-foil hats on the same day?
Comment of the year
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.
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.
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?
Google decided early on a limited set of programming languages to support. C# didn't exist then.
Who names an application framework after an infectious disease?
Could you cite an independent legal opinion that states the "community promise" is binding?
The world's burning. Moped Jesus spotted on I50. Details at 11.
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?
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.
There is no patent mess.
You were saying that before the "Community Promise". Funny, right?
And yes, the "community promise" doesn't make your statement true. The "Promise" only covers ECMA 334 and 335 (C# language and CLI), as you're well aware.
Astute readers will point out that Mono contains much more than the ECMA standards, and they will be correct.
- Miguel
Indeed, Mono is officially being split in half. But you already knew that.
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
Its obvious you have an axe to grind, but thats no excuse to ignore factual information and logical arguments.
You must be new here...
Could you cite an independent legal opinion that states "mono faces patent problems beyond the average open source project".
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.
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.
The last time I tried NetBeans, it was a pure Java IDE.
I run Eclipse at work for C/C++ development.
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.
I cant be incompetent and at the same time succeed in derailing Linux application development. Pick one.
Your rage prevents you from making a cogent argument though; I did not "derail" any application development, if anything, I created a project that many people seem to enjoy using.
The fact that you can not tolerate that others do as they please, and that you feel that people need to obey is merely a manifestation of your fascist tendencies.
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...
But when we finally get to Gnu Hurd land we will have hot and cold rain at a mouse-click. I don't know why you are so worried about the past - think of the future.
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)
It's a similar case for Visual Studio, VS doesn't look that much different since like 2003, but the code completion has come on leaps and bounds, if you go back to 2003 and write code then write the same code in 2008 you'll notice a massive difference.
I agree, most IDE changes now are under the hood, because there's not a lot more you can add to the UI once you've got all the standard features in you'd expect an IDE to have. Most developers end up using keyboard shortcuts anyway once they've inititally got used to the IDE's features.
"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!"); }
From the horse's mouth itself:
Q: Is this Community Promise legally binding on Microsoft and will it be available in the future to me and to others?
A: Yes, the CP is legally binding upon Microsoft. The CP is a unilateral promise from Microsoft and in these circumstances unilateral promises may be enforced against the party making such a promise. Because the CP states that the promise is irrevocable, it may not be withdrawn by Microsoft. The CP is, and will be, available to everyone now and in the future for the specifications to which it applies.
Personally, I'll still be using Java - you're a "second class citizen" developing C# on Linux, always trailing Windows. But you're a first class citizen on Java regardless of what platform you have on your development machine. And I like Netbeans :-)
Oolite: Elite-like game. For Mac, Linux and Windows
At what point in history was Java legal situation worst than the current status quo with Mono? Java has been cross-platform from day one (by Sun's choice) so developing Java applications for Linux was never more of a risk than developing Java applications for Windows. Also, there were never copyright concerns with Java so, please, stop spreading lies. The problem was inclusion of Sun's JRE in stock distros and the free implementations, though incomplete, could be distributed just fine (like Mono). Yet, there was never the threat of the platform (or parts of it) suddenly disappearing because of a patents violation. Had Sun sued the free implementations you could have still used Sun's JRE/JDK. This isn't the case with Mono, where at best you have a promise from Microsoft saying they are OK with people implementing C# and the CLI, which is only a very small part of the platform Mono intends to implement. The truth is that despite some people's wishes, the recent events change very little as the promise only covers the parts of .NET already believed to be safe (because of the ECMA stamp); they do bring and extra layer of security (which is a good thing) but that's all. BTW, software patents are definitely and issue outside of US and Japan. Firstly, as long as they remain valid in the US there will be big groups lobbying for them on Europe and elsewhere (the world is bigger than the US, Europe and Japan). Secondly, even if software patents are not valid in Europe, treaties between nations and the fact that the US is the most influencing country in the world makes them hard to ignore in practice.
The company I have worked for developed a bunch of java desktops apps. The comment was often, "glad you didn't use slow java for this...".
Its funny how slow it is if they know its java. And how fast it is if they think its not. Really they never new... cus it was written properly in the first place...
As for C/C++ whatever apps. They also take a long time to load and use all the dam ram are unresponsive and usually as buggy as hell. Its not what they are written in. Its what the writers wrote that make them sux.
The Grey Goo disaster happened 3 billion years ago. This rock is covered in self replicating machines!
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"
This has not been the case since NetBeans 5.5.
The current release, NetBeans 6.7 supports:
Java
C/C++
PHP
Python
Ruby
Scala
Erlang
JavaScript
Scheme
Also, at this point, NetBeans beats Eclipse hands down when it comes to speed, stability and installation size.
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
The last time I tried NetBeans, it was a pure Java IDE.
The last time I used it, I used it for Ruby. (I eventually switched to RubyMine, though.)
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
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.
IntelliJ seems to be the only Java IDE worth using. To bad you have to pay for it. maybe someone will fork the MonoDevelop project and make a JavaDevelop project.
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.
I still have never understood this great debate. At the end of the day what's wrong with having access to both? Java is indeed a neat language, and I agree with all of your points on that front, but it just never seems to have stuck it when it comes to GUI app development as compared to C/C++, and frameworks like Mono can have fascinating levels of flexibility. Java, also amazing for its own purposes, but I think it's safe to admit that they each have their strengths and weaknesses. It just seems foolish to throw free tools out of the toolbox due to the implied political persuasions of those who crafted their prototypical ancestors.
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.
Why did not hey call it a license then?
And we all have learned that misrosoft is soooo trustworthy with their claims on microsoft.com.
how is Mono trailing? They are compatible with the core .net 3.0 libraries. 3.5 was a minor upgrade that focused on the MS libraries.
Besides that... 2.0 through 3.5 and 4.0 all compile down to 2.0 IL code so my Mono program will run on Windows and the only difference is that I don't get some of the syntactic sugar like Linq.
The core .net libraries are covered by the C# portion. Stop pretending like it is useless, it makes you look like a moron.
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 :(
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.
You do get LINQ, we have supported it for about 10 months now in production (starting with Mono 2.0).
We are missing LINQ to SQL, but it will be bundled with our next release (Mono 2.6) or you can get it from the dbLINQ project today.
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.
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.
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
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.
You were saying that before the "Community Promise". Funny, right?
It was true then, too.
And yes, the "community promise" doesn't make your statement true. The "Promise" only covers ECMA 334 and 335 (C# language and CLI), as you're well aware. [...] Indeed, Mono is officially being split in half. But you already knew that.
Indeed. So if you stick to the C# language and core framework, and avoid proprietary libraries (the ones being split off), there is no patent mess, like I said.
But you knew that, right?
Visual IRC: Fast. Powerful. Free.
Or so I hope.
Google uses C# in one project. Orkut. It sucks.
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.
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 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/