Ars Technica Tours Mono
Kevin Francis writes "Over the coming weeks, Ars Technica will be taking a look at Mono, including a basic introduction to Mono, MonoDevelop, and C#, and then branching out to GTK#, database access, ASP.NET, advanced C# topics, and conclude with a discussion of the future of Mono, and the C# standard. All the examples will work on Windows and Linux, with OSX support coming shortly. Part 1 of the series is online now."
As you can clearly see, Mono brings almost limitless possibilities in breaking down the barrier between desktops: a commercial software provider would target Mono and it would "just work" on all platforms that Mono supported. How is this different from Java? In my opinion Java makes things harder than it needs to be. For starters, enforced exception handling can't auto-box/unbox primitive types and doesn't support arbitrary length parameter lists String.Format() style.
The framework of Mono provides the ability to make a very tedious task in C/C++ almost trivial in C#. As the above example, RegEx, shows, it helps the programmer concentrate on the program itself, rather than the logic supporting the code.
Yes, it is very exciting to have developers be able to easily write code that will work both on Linux, Windows, and OS X (obviously with the correct libraries) but will the coders utilize Mono when doing their work? Will they be concerned enough that Linux and OS X users are worthwhile supporting to make sure it is cross-platform?
When I first read this (slightly stoned) I thought the article headline was reading "Tours Mono" as in the disease...
I was slightly confused, as I thought that required kissing girls / sharing Mountain Dews, and that seems slightly out of place here...
Even though C# is a standardized language the .Net framework is not. I'm not sure we can be confident that Microsoft can't legally stop open source implementations of the the framework. Does anyone know what protection mono (and .gnu) have against legal threats?
Jeff
Time for coders to take a closer look!
:)
What are the methods currently used by GIMP, OpenOffice, Mozilla among others that already support multiple OS's?
Maybe Ill start learning coding with this and kill more birds with the same shot
What mono needs is a good RAD tool for developing GTK# based apps. I know you can reference GTK# libraries in VS.NET but there's no support for cross platform forms design.
The syntax for building Winforms is completely different to GTK# (as one might expect) but the documentation I've found doesn't really map types and methods for developers familiar with existing RAD tools such as MonoDevelop and the excellent SharpDevelop.
Tool designer support for GTK# is crucial.
"It's not your information. It's information about you" - John Ford, Vice President, Equifax
As you can clearly see, Mono brings almost limitless possibilities in breaking down the barrier between desktops: a commercial software provider would target Mono and it would "just work" on all platforms that Mono supported. How is this different from Java? In my opinion Java makes things harder than it needs to be. For starters, enforced exception handling can't auto-box/unbox primitive types and doesn't support arbitrary length parameter lists String.Format() style.
I find this kind of claptrap irritating. Java is one of the easiest platforms to jump into. If you found it harder than it needed to be, you needed more coffee.
*** *** You're just jealous 'cause the voices talk to me... ***
Ars Technica will be taking a look at Mono...
:P
...because most geeks no nothing about it
Novell is banking on making Windows->Linux migrations simple as a selling point for their tools. Providing a viable supported .net platform is a key. Do I think that this will become the de facto Linux dev kit? No. Too many users love their kit of choice (perl,pythong,java,etc) and in any case the open source community abhors being told how to develop. Nonetheless having one more option is a benefit. The only downside is potential bloat of distro CDs, but hey we crossed this line a long time ago and its what you have to do if you want to support N dev toolkits.
mono is more of an annoyance than any real system ailmeNT?
tell 'em robbIE?
To the best of my knowledge, Microsoft has never sued anyone for violating a patent, although they have been the target of such suits. Copyrights Yes, Patents no. I don't think that they feel thats its in their best interests to deterring developers from working on microsoft technologies.
What was the reasoning behind making the first letter of the method names upper case?
...and .exe on my executables?
When is Miguel going to port the windows registry?
I'm sorry but the thought of microsoft's mangled conventions polluting the linux/unix world is making me ill. :-(
Excellent! Java clone for VB programmers on Linux is finally here!
HERE HERE!
I think someone needs to create a C clone called "Q." Make it almost exactly the same, with a little less support, and it would be perfect.
Also, we need to make sure some reputable company patents the technology to ensure it says an open alternative to C (you know, SCO, Infinium labs, etc)!
I mean, take Python! (my favorite high level cross-platform programming languate)
- Python has been around longer than Java (it's from 1991)
- Python has been ported to a lot more platforms than Java (and certainly
.NET!)
- Python has various powerful language features that Java, C# can only dream of (metaclasses, generators, list comprehensions)
- Pure python programs will run everywhere a suitable Python is available
What's so special about Java orIt will be a sad say indeed when developers are tied to a specific language for a specific platform just because that is what someone has mandated from on high.
I look forward to the legal and security issues with .NET, Mono and .GNU. We live in interesting times.
Stick Men
The Mono project was conceived in the Summer of 2001 as an Open Source alternative to Microsoft's .NET development platform. Since then, it has come all the way to a 1.0 release among a flurry of controversy from mostly inside the Open Source community itself. Although we will not outline the reasons here, most of the criticism stems from the fact that .NET is Microsoft, and "we" don't like them.
.Net are not satisfactorily answered. What about MS total control of the standard? What good will the standard be if the company that owns 95% of the desktop starts shipping a .Net that deviates from the standard? What about the parts of .Net that are not covered by the the standard, and in fact have intellectual property encomberances?
.Net is essentially the Java runtime environment, with MS additions. Why is .Net any better than Java for application development. Is its speed any better? Is Mono's speed any better than Java's?
What a stupid simplification!! There are legitimate concerns over how MS exerts it monopoly power, and many of the resultant concerns with Mono and its support of MS'
Mono's main pull for developers is that it is cross-platform and makes writing applications very fast because of its extensive framework. Mono also has the concept of garbage collection. Gone are the days of using malloc() and free() and recording where you allocated memory and making sure you free() it. Java has GC as well, but Java never really caught on as an application language.
Another biased statement; has C# caught on as an application language? Why not point out that C# is pretty close to a clone of the Java language, and that
I don't mind a review of Mono. I was interested in reading it, and would like to know more about it. But, when the author so casually dismisses the concerns with MS and Mono, or dismisses the legitimacy of Java, I question his objectivity.
It's perfectly possible to run many PHP-based products (like Textpattern) on Windows/IIS with some work. The key is almost always MySQL, and that runs fine on Windows as well. In fact it kicks the bejeesus out of MSDE for some scenarios.
This is gobily-gook! How can the Ars Technica crew POSSIBLY provide me with insight (and a possible cure, please?) to mono! These guys have been a member of the biggest sausage party since 2000! (Besides the Bush/Cheney whitehouse). I don't trust a group of hackers to my mono research, no-sir-ee
Excuse me, I don't mean to impose, but I am the ocean
The only Python program on my machine is BitTorrent, and frankly it looks and runs like a piece of crap.
When you manage to out-fugly Java, that's quite a feat.
Comment removed based on user account deletion
Yep, linux coder here and moving to mono for new development.
So far, it is pretty damn cool and I am very happy with it. It is exciting starting fresh in a new language. I recommend it.
anime+manga together at last.. in real time.
The other thing it has going for it is Buzzword value and the fact that it replaces the mess which is Win32
One also has to ask how will DRM fit into the programming picture? With a looser definition of "content". Remember most of the commercial programming community still isn't comfortable with the free-wheeling "programming must be free" mantra of OSS, and still wish to retain control.
I think indemnification would put an end to all of the legal issues surrounding Mono. If Ximian/Novell would put their money where their mouth is and put their own neck on the line, that would show how confident they really are.
How about ?
I've already been doing this sort of cross-platform programming for years with wxWidgets/wxPython. I'm not waiting on Mac support - I'm already using it (and improving it!). What amazes me is that the authors act like Mono is breaking new ground by having a portable programming language that can do GUIs but is easier than Java. Hello? Apparently no one ever told them about Python/wxPython?
.NET experience comes from using Windows. And as the Ars Technica article shows, it's going to be a while before anyone can really write sophisticated cross-platform GUI apps using this toolkit. (And will it be GTK# on Mac? Does that mean X11 is needed there? Ugh.)
;-)
And not only can I use it today, I get better results than I would with GTK# or Java in terms of cross-platform interfaces. If you've ever seen the GIMP on Windows, you'd know that GTK apps don't quite look like professional Windows apps. Emulated interfaces will always look out of place, particularly as themes get more common.
I'd encourage anyone who is interested in cross-platform programming to download Python and wxPython, then run the wxPython demo on Windows, Linux or Mac OS X, and then explain to me exactly how it is that Mono is breaking new ground. (Note also that the wxPython 2.5.2 release on Mac will sport a number of nice improvements and is due out soon.)
The only new and unique thing that I see about Mono is that it uses and is compatible with APIs designed by Microsoft. As a compatibility layer, that has some value, but they will always be two steps behind Microsoft and MS will always ensure that the best
Anyways, time to go back to making my native, cross-platform apps.
Don't EVER underestimate the innovation of mozilla tabs.
Comment removed based on user account deletion
Is there any c# compiler that compiles down to regular i386 code, like gjc is capable of? The language looks very interesting, but I'm not interested in yet another virtual machine.
No weapon in the arsenals of the world is so formidable as the will and moral courage of free men.-Ronald Reagan
First off, realize that I'm not anti-Linux. I've used Linux both professionally and at home. UNIX, too. And I also know C++ and C#, among other languages.
.net, C#, and okay Java too, is that they're essentially playing catch-up to what's already out there. People who've only used C++, and the people who can't shake the "everything has to be optimized down to the last microsecond" mindset, tend to really like C# and .net. After all, now they finally have real modules, a clean string syntax, hidden memory management, and so on. Just that the article makes a big deal about the power of this line:
.net and C# appear to be coming from people who spent the nineties thinking that C++ was the pinnacle of software development. If you look at Perl and Python, though, they still have lots of wins, like no noticible compile times, no need to jam everything into an object framework, less bulky syntax, a lot less fussing about types, and generally more malleable ways of programming. From that point of view, C# doesn't offer much, unless again you stay up late worrying about shaving cycles out of your button handler callbacks.
.net and C# are what they came up with, a solution that's still far behind what was already available. A solution that feels like something that would have been stunning in 1990 or 1992, but now is mired in an earlier generation of software development. The weird part is that dragging this over to Linux, making it an across the board cross-platform solution, is looked at as a good thing. The effort would be better spent elsewhere, like coming up with a lighter weight GUI toolkit for Python that breaks from Tk and behemoths like WxWindows.
What has always struck me about
bool matches = Regex.IsMatch( input, regex );
is telling. After all, you could do this--with a cleaner syntax, mind you--in Perl fifteen years ago. Don't like Perl? Well, Python then. Or even old clunky TCL. And so to me, the furor over
Perl and Python have always been better supported under Linux than Windows, and I'd even call them the Linux way of approaching software development. Leverage the best tools available so you can achieve more in less time. Microsoft has been playing catch-up here, and
Frankly - because Python IDEs suck.
Not after Microsoft pulls a couple of patent infringement lawsuits and make the Mono developers look like fools.
"If you don't like it don't fscking use it."
Please keep the above in mind, next time you read an article about Microsoft's Marketshare, and how Linux will not take off unless it imitates MS, or you can't get a Laptop without Windows.
For one, .NET has the Microsoft marketing machine behind it, allowing Mono to piggy-back off of that. Technical merits aside, this gets .NET/Mono more developers, which helps.
Maybe this has an impact?
Also, Sun continues to strangle the life out of Java with its grip of death on all aspects of the language + vm. Sun is holding Java back.
Look at how C# + Mono has exploded in popularity in comparison to Java in the same timeframe.
It will be a sad say indeed when developers are tied to a specific language for a specific platform just because that is what someone has mandated from on high.
Er, PHB's have always done this since the dawn of computing. Before Java and before C#. Hell, they did this before microsoft even existed. Nothing has changed.
The article mentioned that the C# makes things simple that would be complicated in C/C++ (the example was RegEX). This is kind of a screwy way of looking at things, and not much of a selling point for C# in my book. Something like RegEX is provided to C# through a library (or framework if you prefer), and isn't part of the actual language. If you want such a simple interface to a RegEX, it would be easy to get a similar thing for C or C++.
Overall I thought the article was pretty devoid of any meaningful reason for why we should use mono. It doesn't sound better than Java (not worse either), and it isn't a replacement for C/C++.
While an interesting (if very simple) article, it never adresses the elephant in the room - why not Java?
.NET lies in the ONE line of code:
With Java you can do everything in the example, with ease. From the article:
The great power of Mono and
bool matches = Regex.IsMatch( input, regex );
Wow! Well, in Java it looks like this:
boolean b = Pattern.matches(regex, input);
Is the great power of Mono then that they have screwed up the name of the matching method to FunnySound?
Or what about GTK support in Java - you could use Java-Gnome. Or you could use AWT. Or you could use Swing. Or you could use SWT if you prefer native performance.
And using all this, you don't have to wait for OS X support - it's here now! Chances are you don't have to wait for support on whatever OS you are using in fact, as the JVM is now pretty much everywhere.
So why ignore the elephant? Why does this article not go into the reasons why you would want to consider a platform years behind an exisitng one with similar capabilities, better cross-platform support, and way more tools. Instead it just pretends that corss-platform wasn't even possible before MONO.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Of course... all IDEs suck.
"After all, you could do this--with a cleaner syntax, mind you--in Perl fifteen years ago. Don't like Perl? Well, Python then. Or even old clunky TCL. And so to me, the furor over .net and C# appear to be coming from people who spent the nineties thinking that C++ was the pinnacle of software development"
It's not so much "pinnacle", as simply "don't know any better". How many times have we read something here about Lisp, or Schems, or Smalltalk can do this or that while others are playing catchup? Face it, a lot of programmers don't have the breth of experience, either hardware or software to avoid the "marketspeak" that MS and others put out. "Oh Java has this, and C# has that! Wow!". Remember the VAX story, and the comparisons with the x86 platform? Or Mainframes for that matter. Reinventing wheels?
I have looked at Python a number of times, but the blocking/flow/structure by whitespace just squicks me too much.
There are better filesystems than ext3:
XFS, JFS, ReiserFS.
Don't just complain --- write something.
"For one, .NET has the Microsoft marketing machine behind it, allowing Mono to piggy-back off of that. Technical merits aside, this gets .NET/Mono more developers, which helps."
You'd think that the "Mythical Man, Month" would have taught us that quantity isn't always better than quality. Now why would more developers who's code is used in CS to illustrate what NOT to do, is a good thing for Linux? Do any of you even have any pride in your craft, or is just any old thing good enough for you?
I mean, take Python! (my favorite high level cross-platform programming languate)
.NET/Mono.
.NET as cross platform yet. Mono is a huge step in the right direction but there are several large pieces of .NET that are not ported to Linux or OSX yet. Winforms, to name one and RDBMS access is another. I'm not sure how RDBMS works under Mono but I imagine it's different from Win32.NET. Can someone prove me wrong here? Please?
No, Python is a SCRIPTING languate [sic]. It is already being used in places where it makes sense to embed a scripting language. Website programming, app automation and some Linux distros use Python to build a lot of their tools. For the latter, I don't think Python is a good choice but that's another thread entirely.
Java is a programming language. The differences between it and Python (as seen here) are largely semantic/structural. I would also add that the Java SDK supplies developers with FAR more common libraries than Python does which tends to cut development time. Semantically, Java is a pure-OO language. Python is not.
Furthermore, a lot of the verboseness and non-compactness of Java provides a lot of flexability. Opening a file in Python is a one liner. In Java you need 2 or more objects and 3+ lines of code. But you have much greater control over how the descripter is read.
What I don't understand is that when people are talking about "cross platform" programming, it almost always is about Java or
Maybe because nobody has a mainstream cross platform app that is written in a scripting language? Where as Java already has lots of exposure in that area thanks to Applets and other applications.
I don't think you can think of
"What's so special about Java or .NET that makes them the talk of the day..."
Marketing.
I think the success of Java vs .NET will depend on how it is distributed and the "user experience" of installing and using .NET vs Java applications. Sun doesn't have the same level of control over the desktop experience that Microsoft has for desktop applications so that may be a deciding factor for most users.
On the server, Java is already very popular and installation/launching headaches are tolerated more because admins are willing to put in a little more effort than most users.
Other issues such as relative performance and the "look and feel" will also play a big role with users.
In the general theoretical sense, there isn't much difference between Java and .NET. The success of each will depend on the implementation.
Your password has expired, please login to change it.
I cannot execute the example file.
:
./v27e2.exe ./v27e2.exe: cannot execute binary file
I did
$ chmod 777 v27e2.exe
$
bash:
What am I doing wrong? What am I missing?
Mono isn't all about cross-platform development, it's about giving you a more modern general purpose programming language than C/C++ and providing lots of useful bindings for it. Some of those bindings happen to be cross-platform, others don't. You really just get a choice.
As languages, C# and Python are simply different. Both have their uses, and neither is better. C#, for example, lets you do pointer manipulation and its implementations are efficient enough even for writing low-level loops. Also, people find C#'s static type checking useful for long-lived, multi-programmer projects. If all your needs are met by Python, consider yourself lucky; other people's needs are not that simple.
In terms of libraries, you can have Python/Gtk+, Python/wxWindows, C#/Gtk+, and C#/wxWindows, and all four exist (C#/wxWindows isn't all that far along yet, but people are working on it). So, your choice of toolkit and your choice of language are orthogonal.
Python and Java are both languages and run-time thingies.
.NET.
Not necessarily. People have targetted other languages for the Java runtime, including Python (Jython) and Scheme (Kawa). Basically, as long as you can spit out Java bytecode it doesn't matter language what you compiled to get it. Same basic idea with
Python lacks enterprise backing.
Python is a SCRIPTING languate [sic]
Define 'scripting language'. Without a sound definition (and probably also with a definition), I don't agree with this statement.
Even though I also don't agree with the other points you're making about Java, it was not my intention to talk about the language differences between Python and Java, but the "cross-platform" aspects of them.
Indeed it seems likely that because Java gets much more marketing exposure, it's Java that's talked about most. But to me, it often looks like a knee-jerk reaction: "cross-platform bla bla" - "Ah, you mean Java"...
I hear what you say. It's just that Sun doesn't advertise this fact for some reason, and we don't tend to hear much about it.
Stick Men
You'd rather have a big mega corp behind it? Strange, people always seem to get angry on the subject of Microsoft that's controlling .NET, or Sun that's controlling Java.
What about MS total control of the standard? What good will the standard be if the company that owns 95% of the desktop starts shipping a .Net that deviates from the standard?
I should think the answer to that would be obvious: In any industry, if a company with 95% market share decides they're going to do something a certain way, whatever they've decided? That's the standard now.
A standards committee can go a different direction if they like, but it's akin to that guy in Hitchhiker's Guide to the Galaxy (I think, it's been a while since I read it) who decides that only he is sane and he needs to wall the rest of the universe into an asylum.
At the risk of turning this political, I think we can agree that heterosexuality is pretty much the "standard" human mating behavior, and the last time I saw numbers on it, even that didn't have a 95% "market share." Technology shouldn't be much different. (cue jokes.) Whether you like Microsoft or hate them, the way they do things, even when they're retarded, becomes the standard.
Microsoft's upcoming .NET rev has support for generics. Will MONO have this support soon?
I've found that generics, carefully applied, can save huge amounts of development time. It'd be great to see MONO support this soon.
(Oh, and for those wondering: Microsoft's rev gets generics right. This ain't the "we can't quite handle value types" variety of generics that plagues JDK1.5.)
Because of the great power of mono! Behold:
I mean, in Python, it'd be like:
matches = re.match(regex, input)
That doesn't look like great power to me.
(all joking aside, I found the article interesting, and if it weren't for the (potential) legal issues, I would probably be playing with C#)
It's not so much "pinnacle", as simply "don't know any better". How many times have we read something here about Lisp, or Schems, or Smalltalk can do this or that while others are playing catchup? Face it, a lot of programmers don't have the breth of experience, either hardware or software to avoid the "marketspeak" that MS and others put out.
Yes, but sadly you don't either if you think that those differences don't matter or are just based on Microsoft marketing. C#'s support for value classes and unsafe modules, and C#'s template semantics make it a different language from Java--enough different to make a real difference to many people.
If you don't believe me, look up what the JavaGrande forum recommended as additions to Java half a dozen years ago: C# implements their recommendations, Java still doesn't. And the JavaGrande members weren't gullible Microsoft customers.
The people you are talking about are the kook/student-fringe that hangs out on /. etc. This is also the same delusional crowd that thinks Ruby or Lisp is just about to take over the world.
Most developers understand the value of industry backing.
That's not my point. My point is, that unless technology X is backed by huge corp Y, then corp Z will be less eager to adopt it. Given standard PHB theories, and so on. .NET and Java are backed by huge corporations. That's a good thing, to many people (I'm not taking sides). Python is used by some big people, but, AFAIK, is NOT backed by something like IBM. And backed in this context, really means made by, or aggressively marketed/pushed.
Well, you may consider those self-evident truths, but there are many people who don't. For example, there are subtle but very important differences between the C# and Java languages (even with JDK 1.5). There are also many people who don't want cross-platform support.
.Net is like a shanty town with facades of real tools all around, where you go inside and find it's not quite finished... eventually some of those houses will be finished but right now there are plenty of other towns with real buildings, and original architecture.
So what would you say these differences are? There are (even in 1.4) many more similarities than differences. And as I said the tool and platform support (like Ant) is much better with Java.
And for a second we can even forget Java, and just think about all of the other tools (like TCL/TK or Python or many others) that have more advanced GTK support than MONO does just yet.
Any way you look at it, it makes little sense to go with MONO if you are considering tools to build a project.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Java provides for checked exceptions, but also unchecked - I found long ago that I prefer to use unchecked exceptions in my own code and checked exceptions at the boundaries of API's.
That I think is the best way - it gives the user some idea of what errors may occur, while freeing your code to throw exceptions at any level that get cought by a higher level handler that can deal with them and pass them on in a nice manner.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
The JVM is a runtime for Java. Yes you can target other languages at the JVM, but not very well (no pointers, runtime type checks, runtime array index checking, even if you don't want them). The CLR is a much better target for other languages to compile to since its more flexible.
You can find a product here to convey IL (.Net bytecode) into bytecode for the JVM.
You can also find a Powerpoint on this here. Note that they even talk about supporting ASP calls via a servlet library they have built!
"There is more worth loving than we have strength to love." - Brian Jay Stanley
The term "scripting" language is almost meaningless now. So...what do you mean?
Both Java and Python are byte-compiled and run in a VM. The only difference is the separate compilation step for Java and this difference is only due to the nature of their respective type systems.
No, Python is a SCRIPTING languate [sic].
No, it's a programming language. It's just productive enough for scripting. "Scripting language" doesn't really mean anything.
I would also add that the Java SDK supplies developers with FAR more common libraries than Python does which tends to cut development time.
Python libraries generally have better (simpler) design and are easier to use. And there are lots of them, both in the standard library and available separately.
Semantically, Java is a pure-OO language. Python is not.
It's exactly the other way around. Python is pure OO language, java is not. Does 'int' ring a bell for you? Python provides functions, but they are objects, just like ints, strings and, say, sockets.
Not that being pure OO language is the end-all and be-all. It just makes the language semantically cleaner while trading off some performance.
Opening a file in Python is a one liner. In Java you need 2 or more objects and 3+ lines of code. But you have much greater control over how the descripter is read.
You can have all the control you need, all the way down to file descriptor level. People just don't seem to need the control. Nothing prevents you from writing wrapper objects with different buffering policies.
Maybe because nobody has a mainstream cross platform app that is written in a scripting language?
Bittorrent? And quit with the "scripting language" term, it's ignorant or intellectually dishonest, take your pick.
Save your wrists today - switch to Dvorak
"The only thing that Mono/.NET has going for it, as far as I can see, is that it is designed to be targetted from multiple languages."
So is parrot. But what is the point anyway? Are you going to have a project where each member of the team is going to program in a different language? Are you going to have an open source project which accepts patches in 10 different languages?
I never did understand why this was a desirable thing. It sounds like a nightmare to me.
evil is as evil does
Different projects may like to use different languages but to target the same VM.
Stick Men
Not the libraries.
Go ahead, read through that whole thing and tell me where Win.Forms and ASP.Net are.
This is the challenge/danger of Mono. They are reverse engineer implementing equivalents of these packages using OSS pieces. This is currently working but they'll always be playing catch-up and there's got to be at least one or two buried patent mines waiting to bite them in the arse.
--- I wish I could hear the soundtrack to my life. That way I'd know when to duck.
No, Python is a SCRIPTING...
;)
Could you tell me what, in your mind, is the difference between a "programming" language and a "scripting" language? The lines blur too much for me to really say. Maybe you meant that Python can be embedded in an application and used to script it; it's probably harder to do the same with Java. And I can certainly write a variety of full-fledged applications (web or desktop) with Python, just as I can with Java.
I would also add that the Java SDK supplies developers with FAR more common libraries than Python does which tends to cut development time.
Are you trolling, or have you just never looked at the Python Standard Library? I programmed in Java for 3 1/2 years before touching Python, and I can't think of anything in the Java Class library that is not in the Python Standard Library. Could you give an example?
Semantically, Java is a pure-OO language. Python is not.
Please elaborate on what a "pure-OO" language is. I would argue that since everything in Python is an object (there are no primitives), it's probably closer to "pure-OO" than Java is, in that respect. Of course, it has sprinklings of functional programming as well, so maybe that's what you meant by not being "pure-OO"
Furthermore, a lot of the verboseness and non-compactness of Java provides a lot of flexability.
This one seems to be purely opinion, so I'll leave it alone
Opening a file in Python is a one liner. In Java you need 2 or more objects and 3+ lines of code. But you have much greater control over how the descripter is read.
Again, be specific. What kind of control do you need over reading the descripter[sic]?
Not trying to troll here, myself. Just pointing out that it's silly to make blanket statements such as these without backing them up with facts. And I'm no Python appologist/Java basher; while Python is my prefered environment, I know it has some limitations. Just making sure the facts are out there.
While I agree with nearly all your comment, I disagree with this one:
> I can't think of anything in the Java Class library that is not in the Python Standard Library.
Well Swing and AWT belongs to the Java "standard" class, IMHO both are worthless:
-AWT is ugly
-Swing was (is still?) buggy as hell: I tried programming in Java a long time ago and Sun took *years* to correct serious bugs.
But still Python standard library doesn't have the equivalent of Swing as far as I know.. wxWindows doesn't belong to Python standard library.
.NET supports delegates, which are effective "safe" function pointers. The .NET Framework libaries use these as the mechanism for event-driven programming models as opposed to Java which requires listeners interfaces. Although its debateable, I personally find this produces much more elegant code, although there are others who disagree with me - the point is, listener interfaces can be implemented in .NET too. In Java, you don't have a choice.
.Net is missing Dynamic Proxies, for which there is a similar .Net solution here.
A form of Java delegates is possible.
In a simialr fashion,
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I thought I had mono once.
Turns out that I was just tired from reading slashdot 22 hours a day.
mattdev@server$ touch
cannot touch `/dev/genitals': Permission denied
So instead of targetting the Windows platform, or the Linux platform, or the Java platform, I can now target the Mono platform, which has *GASP* a regular expression library.
Excuse me if I'm not a little underwhelmed by this. We're supposed to get excited about Mono because of the libraries? As if a good C or C++ coder couldn't write a regular expression parser in less than a week?
But no, I'm converting to Mono because (pick one or more):
I really don't see the big deal here, folks. The fact that the binaries are portable without recompile isn't going to make up for the fact that C++ is a mature, very powerful, fast, portable language.
Okay, if you've got counterexamples of the points above, I'd like to hear them. But save it if you're going to flame me for broiling your sacred cow. I'd rather see a few good reasons to switch from C++ than a flame war, and right now, Mono isn't making a compelling case. To me, it seems like its Yet Another Algebraic Language With Libraries.
The society for a thought-free internet welcomes you.
What will happen if I ignore your dire warning?
You had me at "dicks fuck assholes".
In short, Python can do pretty much anything Java or Mono is likely able to do. In addition, it's faster and easier to code in than most "programming" languages, largely due to dynamic variable typing.
For developer friendliness Mono and Java are a step up from C/C++, but languages like Python (and probably Ruby, though I haven't used it) have potential to be even more.
The ultimate plays for Madden 2006
That's true, but you can use jython to write swing apps using python, and then squirt it out as a .class file, with the end user totally unaware that jython was used in the process.
.Net runtime, but a program written in Python can easily be compiled into platform specific binaries using distutils.
I think Python is a better language than either c# or Java, which to me, try to be too much like C++.
Python is byte compiled, so it really is more like C#/Java than say php, but then again there's now PHP compilers, and python itself can be compiled to a bin with distutils.
I do a lot of app programming in python and then I can run the script on osx, windows, linux, etc..., but if I want to distribute a dumbell version for windows, distutils allows me to squirt out windows binaries without having to have python available on the end user's machine.
This is better than Mono in my opinion, because an app written in C# still needs a
Java compiles to bytecode, Python compiles to bytecode. If being a "scripting language" means that you're not *forced* to compile to bytecode to run a program, then aren't scripting languages simply a superior form of "programming languages"?
Verbosity in Java doesn't translate to flexibility. It may occasionally translate to more control, but that's rare. Most of the time, it's just due to the inflexibility of the language. Conversely, just because Python provides an easy way of dealing with files doesn't mean that it lacks flexibility. What kind of low-level things can you do with Java that you can't do with fileno and fcntl in python?
Commercial applications use Python and Java. Both are extensively used on servers (like Google uses Python for example). Java may have more desktop GUI use, but Python is used as a scripting engine in many applications, including games.
As for Java being pure-OO and Python not being pure OO? Mwhahahahahaha.
Although the syntax may be somewhat ugly, even integers in Python are objects. Try that in Java. Java has Integer objects and 'int' types. That's not even slightly OO, let alone "pure" OO.
Having said all that, I don't even like Python. I happen to be a big fan of Ruby, and am not at all used to defending Python. I think Python's syntax is ugly. I think significant whitespace for indentation of loops and conditionals is a huge mistake, making the code really inflexible when it comes to copying and pasting. I think it's requirement to pass around self when defining methods within a class is simply stupid. And the few remnants of non-ooness bug me, like len(str) instead of str.len() On the other hand, there's even more I dislike about Java. Java is way too verbose, and incredibly inflexible in a lot of areas. By making things like 'int' types rather than classes, it defeats a lot of the purposes of object orientation. At the same time, it makes things more difficult for programmers by lacking a simple printf/sprintf function. Of languages with a C-like syntax, I guess Java is the best option in most cases, but it's lack of true OOness, and its static typing really annoy me. Misinformed people who think that there is something inherently superior about languages which you have to compile to use just make it worse.
Value classes, unsafe modules, pointer arithmetic, call-by-reference, templates (implemented differently from Java), multidimensional arrays, operator overloading, to name some.
.Net (or vice-versa), like delegates (for which there is an approach in Java) or Dynamic Proxies (for which there is also a .Net approach). A number of the items are just syntactic sugar which does not overly affect the architecture of a program. And frankly I would not list having operator overloading as a strength.
Yes, those are some differences. But even taken altogether, they are not so great. Just about anything you can do in Java you can do in
And Madeleine Albright also has many more similarities with Claudia Schiffer than differences; which one would you rather have as your date? Differences can matter, even between things that are, over all, pretty similar.
More like Madeleine Albright vs. Margret Thatcher. In the end it goes into a VM that does just about the same stuff.
I think that's making lemonade from lemons. Java needed Ant because Java's compilation model was so odd that traditional UNIX tools didn't work. C# actually works very well with traditional UNIX tools because its compilation model is much closer to C/C++.
Funny that one of the first projects that started up was NAnt...
I would be curious to hear exactly what features of C# make it more amenible to using make than Java. As far as I know the same issues would still exist, as the platforms are virtually identical in features. I can also use Make with Java, it just turns out that it does not work nearly as well.
A year ago, some important tools were missing for Mono, but today, everything I need is there; Java may have more quantity, but how many tools do you need?
Well, on top of the myriad IDE's (which I don't even need anyway as I just use Emacs for almost everything) what about profilers (like OptmizeIt) or memory tools? and how many debuggers do you have for really tricky multi-threaded issues? You don't need them all the time, but they can really make the difference.
I guess if you are writing a toy app then what is there now would suffice. But if you are writing anything real I would be hesitant to throw away the advantage of a wide range of analysis tools. And it only gets better in JDK 1.5 with a LOT of really nice monitoring features built into the VM.
It may make little sense to you. To me, Mono is already more useful than Java (and I have developed in Java for half a dozen years). Java never managed to replace C++ for my work because it just had too many limitations. C#, on the other hand, looks like it is going to eliminate C++ from my work once and for all.
There's the key. For you C# is a better C++, and with that I would absolutley agree. For me, C# is not a better Java because of limitations, lack of established tools and platforms it works on.
Java I find to have a much heathier and large community as well, which is important.
My personal replacement for C++ is Objective C.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Or even easier:
Anyhow, I can't wait until Parrot and Mono get far enough that your choice of language is decoupled from your choice of platform / runtime.
i am an expert in Java and a dabbler in Python. i love python for its clean syntax and fully-OO model (everything is an object). also for the elegance with which it can process strings or files.
but i found it lacking in GUI support. Tcl/tk is _not_ the state of the art in GUI building. Far from it, actually.
I was considering writing a client app fully in Python. But then i found that i needed tabbed panes, tables, tree views, as well as the ability to draw graphs in all varieties.
AFAIK Python as none of that. Java has (great!) tables, tabbed panes and tree views built-in, as well as multiple open source frameworks for graphing (i used JFreeChart).
i also found it irritating that i didn't have the strict java package/class name/file name structure. but i assume it can be done in python, too and it's just not enforced.
Oh, and Eclipse. There is nothing like it for Python. I guess there are python plugins, but they don't come with the wide range of tools that are available for Java (refactoring, etc). Those are huge, huge time-savers, too.
I am perfectly willing to give beautiful Python another chance if somebody can provide Python-equivalents for all of the above.
Again. Why? If you like python you use the python interpreter (VM). If you like java you use the JVM.
I just don't get why somebody would want to do such a silly thing.
evil is as evil does
Just don't click said button if your installation is over two weeks old.
I remember when legal used to mean lawful, now it means some kind of loophole. - Leo Kessler
1.) .Net was and imho still is - to a large extent - a joke. What MS did was rename the .obj files from all their developement stuff to .net and start a big marketing boohey. Those laughing the most about .Net weren't the OSS people, it was the veteran MS developers, noticing all the vaporware about it. MS added a nice and neat VM, which in parts is so close to the Windows lowlevel stuff that it's hardly a VM and they 'invented' C#, pronounced C-Hash or Cash (=$$$) for short, a nice PL that rids some downsides of Java and C in one stroke. Well big fat hairy deal. The OSS community invents neat and inovative PLs every other week. Nothing new here, move on.
.Net disapears to were it came from and Mono becomes the one-size-fits-all technology for future OSS products. Who knows? I wouldn't be suprised. Just as I wouldn't be suprised if the Mono project at one time decides for themselves that they can do things better than MS (which they evidently can) and screw .Net compatability alltogether. After all, .Net was and still is mostly just a marketing gag anyway.
2) A group of OSS people saw some nice things to the whole 'plattform' and started programming it themselves. More power to them. I would've considered their time more worthwhile spend on a proper Font system for X or a layer that leverages Motif, QT and GTK into one big engine as to rid the Toolkit bloat of OSS, but it was their decision.
3) Mono is 'finished' into a solid 1.0. Great. People say it sports some cool stuff. That's nice. Thanks for the great work. I'm going to look at it sometime. NOT because it is a redoo of MS stuff. I for one don't give a doo-doo about Mickeysofts software products anymore since... well a very long time.
But I do like new tech-frontier OSS software so I'll probably support it. Looking at the way things are going just now it could very well be that
We suffer more in our imagination than in reality. - Seneca
The reason for making the first letter of the method names upper case is because the programmer chose to do that. If you don't want to, you don't have to.
.NET binaries back and forth between Linux and Windows, will you still be complaining about "mangled conventions?" Go ahead and stick with your C language if you want.
I uppercase the first letters of my methods, lowercase the first letters of my properties, etc. Gasp--I organize my shit.
This sort of goofy knee-jerk reaction illustrates just how closed-minded and out of touch some of you guys are. When all Linux desktops are based on Mono in five years and we're trading
Yeah, and Java really took off now, didn't it?
.NET already. And the next version of Windows is replacing Win32 with .NET, so it's only a matter of time before it's everywhere.
.NET is taking off, and taking off a lot more successfully than Java. I've never even seen a Java application on Windows before. I run across .NET binaries all the time, and companies like Adobe are already talking to Microsoft and examining .NET solutions for their products.
Meanwhile, compare to the massive level of support out there for
Nobody's imposing conventions any more than C imposes conventions or GTK imposes conventions.
I'm sorry, but
If you're honestly comparing .NET/C# to wxWidgets, it's clear you've never even cracked open a book or read a single webpage about .NET and the CLR.
He's trying to be funny about the diasese called mono for those who didn't get it.
...(and a possible cure, please?)
Clue #1:
Clue #2: This is gobily-gook! (gobbledygook) http://en.wikipedia.org/wiki/Gobbledygook
Ref for Mono:
http://www.wlu.ca/~wwwhs/mono.shtml
Gtk# is a ridiculous idea and only exists because some elite coder quickly hacked it up before Mono could get serious enough to implement Windows.Forms.
Windows.Forms really needs to be *the* standard implementation. I can't imagine many people taking Gtk# applications that seriously on Windows...
And as for the runtime itself... Why write a VM for a garbage collected language and not do proper garbage collection??!
It appears that Novell may have helped Mono pretty up the signs on the outside, but I am much more interested in something that is engineered well from the inside....
Moving to a language that manages your memory for you gets rid of this security issue with no extra effort on your part. That class of bug simply doesn't exist.
Now that isn't an argument for using Mono, it is just an argument against using C or C++ when you don't have a good reason to. Now let me answer your list from the point of view of a Perl programmer (which I am).
As for the rest of your points, the first 2 address kinds of work that I don't have to do. If I needed to do those jobs, then I'd choose an appropriate language. But they are irrelevant for building a website. The point about cross-platform is irrelevant since building cross-platform web applications is easy. And in terms of ease of programming, Perl is sufficiently different in terms of productivity to justify a switch from C or C++ to Perl (if your problem set makes it feasible).
Obviously, two major reasons are that (1) you get to reuse all of the Mono and some .NET libraries out of the box without having to create bindings for your particular language. And (2) is because when you write something in Python then you have this huge framework/runtime that you have to worry about the end-user having.
.NET libraries/runtime will be ubiquitous on windows platforms eventually and most linux distros will package up Mono.
the
The point of Mono seems to be to have a cross platform framework. If MS changes the spec, then Mono is out on its own. It seems a bit naive to think that Yet Another Framework with a small user base would stand by itself.
Alternately, MS could just claim the whole thing under its patents and then just sit on it to keep lock -in.
...because it's not officially "java" at this point, probably because Sun won't bless them with certification.
Hava Jython and Kawa gotten "certified" from Sun?
An even better reason to use python is that you can target these various platforms. Currently you can just write python and it will work in cpython and jython. Fairly soon it will work on the CLR http://ironpython.com/ and at a pretty good speed also and it will likely get faster with time. From what I can see I can write my apps in python and will be able to deploy them on almost any kind of platform that is around in many ways.
.NET CLR could be useful and I don't have to change languages to use them or their libraries.
Overall I see no reason to use java,c# etc but the java runtime and the
Computer modeling for biotech drug manufacturing is HARD!
The python standard library has tkinter. Currently it looks ugly but that is being worked on however it is easy to write for and it runs quickly and I have had almost no bugs working with it at various times.
Although based on looking at tkinter and some of the other toolkits it really doesn't look that bad it just does not look as good as the more modern things like qt and gtk both of which have good python bindings also.
Computer modeling for biotech drug manufacturing is HARD!
ECMA does not prevent patents on standards, nor charging for those patents.
How about performance?
It will be a sad say indeed when developers are tied to a specific language for a specific platform just because that is what someone has mandated from on high.
.NET. Your managers will fall in love with the promises Microsoft whispered in their ears, and demand you use .NET under Windows.
Get a clue, because that is what will happen with
Don't blame me, I didn't vote for either of them!
because when you write something in Python then you have this huge framework/runtime that you have to worry about the end-user having.
.NET?
And how is this different from
Don't blame me, I didn't vote for either of them!
The eric3 Python IDE http://www.die-offenbachs.de/detlev/eric3.html
It uses QT so it's only free on Linux.
It's the reason I don't want to switch from Python, nothing else has as good an IDE.
White is the hyperlink color. Clicking the big white link named after the article takes me to the same page.
The phrase we've got other stuff lined up inside would imply the link goes to the other stuff. The url for it seems like it'd show an index of all their linux content. But the word 'inside' actually shows the article.
Guys, I hate to say this, but Mono offers absolutely nothing new. It's essentially a clone of .NET, which is essentially a clone of Java, which is fuller featured, more mature, and more system independant than Mono/.NET will be in a long time. I've heard C# is nicer than Java. Ok, that's great.
.NET? Why even bother? According to the Mono FAQ, stuff written in Mono won't even necessarily run on .NET. They claim it's not even intended to. Fine, but look how many people are already confused about this. Developers are going to think (mistakenly) that they can write Java-style write once run anywhere code with Mono and they will be sorely, sorely mistaken. Then they (and their managers) will get upset, and Mono will be assumed to be broken, because it doesn't do what the PHBs thought it was supposed to do.
But why is no one talking about Python and Perl?
Python and Perl are capable of doing everything that these languages can do, and they essentially do it better. And with the introduction of Perl 6 and the Parrot VM, Perl 6 and Python will both run on the same framework, leveraging the two most successful free languages created.
See, Parrot, Python, and Perl are 100% free software innovation. They aren't a reimplementation of some crap Microsoft put on the table. Why are we always trying to play catch-up? Why do we ignore the good stuff we have going for us?
Why use
And this will be bad PR for Open Source. First, it looks like we're ripping off MS's ideas, because, well, we are. Then, it looks like we can't even get it to work. Then, people rightfully wonder why when we have two systems that are essentially very similar, ie, Java and C#, we decide to back MS technology instead of more mature, more widely available Sun technology.
I say fuck 'em both. If you want a statically typed language, write one to run on Parrot (it's already been done, from what I understand). Why go with some proprietary BS?
Oh, did I mention Parrot is FAST?
.NET is not about C# vs. Java. You can code in C++ and compile to .NET's IL (byte code) in many different languages. You can also write .NET applications in these languages as well:
APL, AsmL, BASIC, Cw (C-omega), COBOL, Eiffel, F#, Forth, Fortran, Java (yes seriously), ML, Mercury, Mondrian, Nemerle, P#, Oberon, Pascal, Perl, Python, RPG, Ruby, Scheme, S#, VB.NET, etc... So please, quit the C# vs. Java or Perl is so much better arguments. Because, pick your language, and there is probably a compiler out there that can spit out IL.
"Over the coming weeks, Ars Technica will be taking a look at Mono, including a basic introduction to Mono,...
At first read, I thought you meant you'd found a girl who would kiss geeks and nerds!
Oh well.
Are you going to have a project where each member of the team is going to program in a different language? Are you going to have an open source project which accepts patches in 10 different languages?
.net library and not having to worry about what language it was written in. The alternatives are to either write the library for every language (SVG rendering for VB, C, C++, Python, Javascript, etc), or to write your libraries in one language and try to maintain wrappers for each other language (GTK# ??).
.net approach is a good one. This is why (IMO) JNI sucks. I shouldn't have to write C code to access extra keys on my keyboard. It just adds more complication to my Java program to have to maintain C code along with it. In .net, all languages have access to roughly the same features (although there are some language specific feature differences they aren't API based). If C# has access to the keyboard, then everything else in .net will too. So .net isn't encouraging you to use multiple languages... it's encouraging you to use the language of your choice.
Maybe you will, but not likely. What's more likely is VB programmers using a
Personally I think the
For GUIs did you look at wxPython? PyQt? PyGTK? I've used wxPython which is very complete and native on Windows and Mac (think it uses GTK on Linux which is a shame but there ya go). I have touched PyQt briefly a few times and it seems nice and high quality too.
As for IDEs, eric3 is good. Very good. You talk about time savers - eric3 will kick your ass!! It is written using PyQt though so not sure whether it runs on Windows. Personally I still use a text editor tho.
In addition to being naive, I agree that there seems to be a little bit of MSFT adulation to blame from what I've read by Miquel. It seems he is entirely unaware of other competitive solutions such as, most obviously, Java.
MSFT uses it's monopoly to brilliant advantage against various adversaries. Had not Linus written Linux, I believe MSFT would own the server market in addition to desktop, having wiped out each overpriced, proprietary Unix one-by-one. Why those folks don't spend their valuable time working against MSFT instead of in their favor is beyond me.
It's sort of like Ralph Nader running for office and wondering why Republicans are supporting him. Suckers! They know the more successful Nader is the more votes taken away from the Dems!
Finally, here's what Sosnoski thinks, he's a rather sharp programmer living "in the Shadow of Redmond" so I think he knows what he's talking about, and he too points out that, while the Mono team is nowhere close to anything competitive to .NET, *even* if they do eventually get close, they will be talking to the lawyers.
My thoughts are, from past history, they won't even need to bother with lawyers. MSFT will just use it's old tricks they used against Borland and all the others, i.e. poorly documented or unpublished APIs, secret hooks, etc.
What's up with Miguels gay-ass monkey fixation? Does
he have a monkey fetish?
And I don't really like regexps being built into a language's syntax, but that's just a matter of opinion. (it doesn't make me nauseous, I just prefer simple syntax)
Parrot does seem really cool to me too, I can't wait to see where it goes in the future. :)
Have you noticed how 'sensitive' Python developers are?? They remind me of the Mac and Amiga zealots. I don't know how people can get so worked up over a silly little scripting language like that.
"Maybe you will, but not likely. What's more likely is VB programmers using a .net library and not having to worry about what language it was written in."
You mean like using activeX controls in VB while not caring about what language they were written in. Or maybe you mean using DLLs from VB while not caring about which language they were written in.
evil is as evil does
Because the .NET VM puts certain restrictions on the language. For example it prohibits multiple inheritance. In the end all .NET languages have to look like C#, if they have additional features then they have to abandon those features.
.NET in any language other then C#.
It makes no sense to develop for
evil is as evil does
Uh, you missed my point. Mono or .NET both have a large runtime that the user needs to install. If people don't want to download Python in order to run Python scripts, or even download a JRE to run Java executables, what makes you think they'll want to download .NET to run a C# program?
Of course, Microsoft is going to "provide" this on all Windows platforms, but that still doesn't help Macintosh, Linux, Solaris, BSD, etc.
Don't blame me, I didn't vote for either of them!
MacOSX, Freebsd, and linux distributions come with python just like all windows will come with .NET. I don't know or care about solaris. Java is SOL because nobody wants to carry it by default, maybe if they open sourced the thing it would be different.
evil is as evil does
Please explain to me why should i choose Mono for cross platform development instead of Java ? Ok, you may say, another alternative is always good, the freedom to choose bla bla.. but when i compare the most important factors for me, i can't find any reason to use Mono. First of all, Java has many years of cross platform usage, not only the language and platform is cross platform, great development tools like netbeans and eclipse are also cross platform. Believe me, this is important. If you are making a living by writing software, you know that "it is possible to do it" and "it's done easily" are not the same things. Yes, somehow someone can come up with a development environment for mono, but why should i bother to switch to that environment and lose time to learn it, when i have eclipse and netbeans ? Also, swing may be a pain in the a*s to use, but when used, does it job pretty well, and enables cross platform gui development also. I have to do gui work a lot, and java provides that too, in a consistent enough way (there are minor issues in swing, but nothing that'll create a big problem)
.NET uses COM+ for application server related jobs. And com+ is , ummm, well COM in an application server !! What will mono guys do, to give me application server functionality ? Do i need to mention i have free and pretty well options in Java ? (Again also cross platform)
.NET ? Has anyone bothered to take a look at .NET framework 2.0 beta ? Avalon, Indigo ? These are huge leaps forward for .NET, and please convince me that MONO team has the resources to keep up with MS team.
There are tons of documentation and already written open source code in Java.
Ok, now that I've mentioned the user interface development, and development tools issues, let's come to the enterprise development part.
And about the future of Java, i have no doubt that it will be strong in future. Any other big player than MS is supporting it. IBM, SUN, ORACLE. Eclipse and netbeans are constantly under development with MUCH larger developer and user bases. And why should i choose MONO ? with it's compatibility issues with
IF you are talking about a new toy to play around, experiment in your spare time, MONO is ok. But i really, can't imagine myself trying to use it for production of software that i'll be paid for. It may become an alternative after some time, but i don't believe it will come close to Java in terms of scope of available tools and development environments.
I've got plenty already thanks.
I know what stupid PHBs will do. I've worked for them in the past. The point I was trying to make is that Microsoft has done at least one thing right with .NET, and that is offer several official, or at least, semi-official languages for it, unlike Sun who refuses to acknowledge that anything other than Java (language) will run on the Java Runtime Environment.
Stick Men
It means that when I'm working in C# and I want a component to do Y, I can download one written in any .NET language, not just one written in C#.
My Journal
You don't know the first thing about it, do you? Go read.
NET langages compile to plaform-independant bytecode. Shure it's ripping off Java, but it shows good taste in plagarism.
My Karma: ran over your Dogma
StrawberryFrog
What's so special about Java or .NET that makes them the talk of the day, while other much more interesting languages seem to be ignored in this matter?
.NET and Java don't need special commands (map, etc.) to optimize for loops away.
As a Java and Python developer I have at least one reason: executing speed. Python is very dynamic language. It makes it sloooow... e.g. Python lacks primitives. This might be a good idea from a programming theory viewpoint, but in practice the speed limit of HW always hits the application at some point unless you are doing "just" scripts.
Also, Python gives great freedom to a developer. This leads easily to unmaintainable code. Of course good developers can avoid this, but rarely *all* developers have that good skills.
1 - Mono is designed to be a second player (to play catch-up with MS is a 20 years old game).
2 - Any effort put in mono is an effort taken from java (do you like to favour MS?, me no.).
3 - Instead of playing MS games why not to build an OSS cross platform environment (or force Sun to fully open java)?
4 - The three previous items contains the 'MS' letters, that's the problem, that's why I don't like mono.
What's in a sig?
Well, to answer you claims:
1. Cobol has been around far longer than Python or Java, but that does not make it better for today's SW development tasks.
2. Java runs on ALL modern server and desktop platforms and on most modern mobile phones. That's hard to beat.
3. If we start counting "features" that make code shorter or development quicker, then Perl is the definite champion. But does this help redability and mantainability? What about learning curve?
4. Huh?? That's a requirement for any SW platform, not a competitive advantage!
1. How is Python performance?
;'s - plus that the whitespacing is important for syntaxing - It just doesnt seem intutive to an old c/c++/java/c#/php developer.
2. Syntax - the learning curve from c++ to Python in MUCH steaper than going to java/c#. I must admit I have no great experience with Python, but when I wanted to give it a try, I was appaled by its lack of {} and
There might be valid reasons for the "weird" syntax - but if it makes the language harder to learn for alot of people, it will doom(for a lack of better word) the language.
Not trying to start a flame war - but that is why I dont use python.
That means that the same malfunction or a resulting one may serioulsy hinder your ability to execute any code at all which makes it somehow difficult to implement a decent handling.
while (!asleep()) sheep++
What is that formatting control character? It appears to be the equivalent of %s in C. Does it provide a compile-time check that the number of arguments is sufficient? If not, then it's regressed from C++ (where std::cout Excess parameters are ignored, in C++ at least.
Posters recognized by their sig,
That's called Plone.
You didn't even read the text you quoted. It refers specificly to .net libraries. Of course you still have to write extra code to access COM. .Net DLLs can be accessed by any .Net language easily.
Yes MONO has profilers, but most ofthem are pretty primitive - not much beyond the output from -Xhprof stuff in Java, and soon to be eclipsed by 1.5.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
So, maybe those differences don't matter to you, but they matter to people trying to write high-performance code: Java just doesn't cut it, while C# does....
.Net were not currently slower than Java. But I guess no matter how slow a platform is, as long as it has "high-performance" support it must be better? I see...
What good do profilers do me if Java doesn't support high performance computing in the first place? What good is a memory profiler if Java doesn't give me the tools to control the layout of data structures?
That might mean something to me if
And what "tools to control layout of data structures" are you talking about? Now you are just insane. I would love to hear what that even MEANS, much less how there are not ten or twelve superior implementations for Java.
Here's a free clue for the day - most of your performance losses are going to come from algorithmic issues, not platform ones. Those are what you use profilers to detect and fix. I was able to get a very responsive Swing app going on a 486/66 (remember those?) with only 32MB of memory just by profiling the app and seeing what needed overriding in Swing for performance. No matter how much "high performance" support your platform has, if you code it wrong the performance is going to suck. And no programmer is immune from using a collection wrong once ina while or having complex system interactions give rise to big performance hits.
While I'm sure your mortgage calculator or whatever other toy app your are writing in C# is performing just fine, out here in the real world we like to write responsive apps and not just let code that adds 50% to compute time sit there.
To claim that C# is so superior for High Performance computing, when it does not yet run on computers that are meant for same, just goes to show how far out of whack your vision of reality really is.
And you know, things have changed just a little since 1998. If I were you I'd stop using MSN as your search engine and us something that can provide a little more relevant results - like this.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I said C# was slower than Java, but thought people might like a few numbers to back that up. Take a look Here.
Now it's true that in these benchmarks Java wins some, and C# wins some. But for some of the most common cases, Java is far superior. FOr example - Hashmaps. People use hashtables all over the place in code, this is probably the most common form of collection next to a list. The C# version is about wice as slow dealing with a lot of hashmaps.
Furthermore, C# also seems to be very slow using lists. And to top it off Java was again about rwice as fast doing matrix operations!!! How does THAT make C# superior for high performance computing? What good is operator overloading for you if all your code runs twice as slow?
And these tests were all on the Microsoft VM, who is famous for writing REALLY good compilers. How would MONO fare? I'm betting not as well.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
In Java you can assume that any method may throw an undeclared unchecked exception - you can try to catch it if you like.
The only "problem" in Java might be an overuse of standard exceptions in some of the API's - IO in particular has a lot of exceptions you have to deal with. On the other hand it's good to know the variety you can catch to deal with seperate situations.
For a good use of unchecked exceptions in Java, consider the Collections API - it makes heavy use of unchecked exceptions so you don't ever have to write exception code for working with collections, but can still handle odd cases gracefully if you like.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I will say I've used JNI and it's not too bad - but I absolutley agree that .Net makes getting to native code easier as you've said. I'm not sure if Java has improvements under way on that front or not...
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Going from C++ (or C) to Java offered some real differences. It offered standard GC, great standard libraries that came with the platform (instead of paying the mandatory RogueWave tax for decent C++ collections) and real gains in productivity over C++ or C.
.Net. It's the largest attempt at cross-migration in the history of languages.
.Net.
Now with C#, the situation is much more murky. C3 over C++? Sure. But C++ over Jvaa, there are just not enough distinguishing differences to make it worth shifting over the whole platform. Furthermote a lot of effort has been put forth just to move sideways - porting things that already exist in Java to
I would have WELCOMED a Microsoft language with real improvemnts over the status quo. Perhaps a functional language, or something with deep Aspect roots. But since C# is just a shallow clone of Java, instead ew all have to suffer through years of language wars instead of advancing the state of computer languges themselves.
My whole thing is I HATE duplciation of effort, and I see C# as the largest single waste of programming manpower in the history of computing. That is why I loathe C# and
I am not so much dead set against Microsoft, I use Microsoft products on my Mac and they are just fine. It's when Microsoft takes up the flag for utter domination at the expense of the industry that I get unhappy and point out what they are doing.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I managed to type so fast that I really mangled a whole paragraph beyond understanding. Here it is again:
.Net. It's the largest attempt at cross-migration in the history of languages.
Now with C#, the situation is much more murky. C# over C++? Sure. But C# over Jvaa, there are just not enough distinguishing differences to make it worth shifting over to a similar platform. Furthermote a lot of effort has been put forth just to move sideways - porting things that already exist in Java to
"There is more worth loving than we have strength to love." - Brian Jay Stanley
It is a nice article with a good intro to Mono. However, I do not see any compelling
advantage to using Mono yet. For example, I can replicate the GTK#
example in Python through the following code snippet:
------
#!/usr/bin/env python
from wxPython.wx import *
import re
class MyWindow(wxFrame):
def __init__(self):
wxFrame.__init__(self, None, -1, "Linux.ars")
main_boxsizer = wxBoxSizer(wxVERTICAL)
istring_value_id, regex_value_id, result_value_id = (wxNewId(),
wxNewId(), wxNewId())
istring_sizer, regex_sizer, result_sizer = (wxBoxSizer(wxHORIZONTAL),
wxBoxSizer(wxHORIZONTAL), wxBoxSizer(wxHORIZONTAL))
# create the labels and text fields
self.istring_value = wxTextCtrl(self, istring_value_id, "")
istring_sizer.Add(wxStaticText( self, -1, "Input String: ", size=(150,20), style=wxALIGN_RIGHT ))
istring_sizer.Add(self.istring_value, 1, wxALL|wxEXPAND)
regex_sizer.Add(wxStaticText( self, -1, "Regular Expression: ", size=(150,20), style=wxALIGN_RIGHT ))
self.regex_value = wxTextCtrl(self, regex_value_id, "")
regex_sizer.Add(self.regex_value, 1, wxALL|wxEXPAND)
result_sizer.Add(wxStaticText(self, -1, "Result: ", size=(150,20), style=wxALIGN_RIGHT ))
self.result_value = wxTextCtrl(self, result_value_id, "")
result_sizer.Add(self.result_value, 1, wxALL|wxEXPAND)
main_boxsizer.Add(istring_sizer, 1, wxALL|wxEXPAND)
main_boxsizer.Add(regex_sizer, 1, wxALL|wxEXPAND)
main_boxsizer.Add(result_sizer, 1, wxALL|wxEXPAND)
EVT_TEXT(self, istring_value_id, self.do_update)
EVT_TEXT(self, regex_value_id, self.do_update)
self.SetSizer(main_boxsizer)
self.SetAutoLayout(1)
main_boxsizer.Fit(self)
def do_update(self, event):
try:
if re.match(self.regex_value.GetLineText(0), self.istring_value.GetLineText(0)):
self.result_value.SetValue("Matches")
  ; else:
self.result_value.SetValue("Does Not Match")
except:
self.result_value.SetValue("Invalid Regular Expression")
#-------
class MyWindow_app(wxApp):
def OnInit(self):
mywin = MyWindow()
mywin.CentreOnScreen(wxBOTH)
mywin.Show(true)
return true
#------
app = MyWindow_app(0)
app.MainLoop()
--------------- ----
It seems the Python code is significantly more compact and as easy to read,
if not easier. And it is cross platform too! I am sure there is a lot more to Mono
than what was in the article. So any pointers on potential benefits of Mono over
Python would be a useful discussion.
Pranab Banerjee
Logan, Utah
You missed the point entirely.
.NET. You could have already called COM objects written in one language from another language.
.NET. It's just a ripoff of java. The only reason MS wrote it is because they wanted to spite SUN by building their own version of java and JVM.
There was never any need for
There is still no need for
What a collasal waste of money and time.
evil is as evil does
FS: You've just described Apple's new Spotlight feature. It'll be copied by both Microsoft and the FOSS community given time.
"Delete all files older than 2 weeks"
heh...genius.
"The number of Unix installations has grown to ten, with more expected." (Unix Programmer's Manual, 2nd ed.; june 1972)
There are HPC variants that use the Java VM. I see you ignored that.
Who cares if possibly in the distant future it could be better, when you can use Java now?
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Well, if the factor is just 2, then the case is settled: C# already wins. Why? Because it's cheaper to write correct code that works but runs a little more slowly than to spend several times as much time trying to write code to fit into the Java straightjacket and then still having to spend extra time chasing down bugs resulting from the unintuitive way of expressing stuff.
Note also that C# makes it trivial to use truly high performance native libraries or even to write inner loops in C/C++ or Fortran myself, something that is hard in Java. Once you leave the Java straightjacket of poor language design, WORA, and JNI, things become a lot easier.
Now you are just waffling. Have you considered that in fact Java might be a factor of 100x or more faster according to your own argument, because chances are there are already high performance or completed frameworks availaible for Java whereas you have none for C#? It's always fatser to use something existing, and with Java you have a huge variety of stuff - some of it even built in, the new NIO packages are really fast and the reason Java spanks C# in IO performance (incidentially also of use in HPC).
Furthermore JNI is not THAT hard. I've wrapped a number of native API's, and it does not take that long to do. If you just write a thing wrapper around a C API JNI is really easy to use, which is most of what you'd do to interface with a DLL - few people write code that spans both worlds to a great degree.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
So because you can communicate between two languages using COM already, there is no reason to have .net? That's a hell of a leap. You assume that the only reason .net was created was to provide a common runtime for multiple languages. That was just a nice side effect. The real goal was to move Windows into a managed environment. They would have used Java bytecode as the foundation for that environment had Sun let them extend it to be platform specific. Luckily they didn't, and a entirely new platform was created.
Nothing really I just find mozilla tabs to be quite an innovation, not to mention a timesaver.
What's wrong with it is that it takes more than twice as much memory as the value class, plus extra pointer dereferences for member access, plus heap memory allocation for many operations. What is wrong with it is, in short, that it is horrendously inefficient.
What members? I was talking about a class with public fields!! And how does it take "twice as much memory" to store exactly the same values. It has a slight amount of overhead for being a class, that is it.
There is no inefficency. Value classes are essentially semantic sugar and gain you nothign at all in the end.
C# is a mature language; after all, C# is basically just Java with a few problems fixed. C# implementations are less mature than Java implementations, but not by much, and they are catching up fast.
Yes, it's nice to use a language almost identical to another except that it's two years behind. Java has hundreds of companies working on improving implmentations, Microsoft has - Microsoft, and MONO. They are improving sure, but Java is also a moving target and is improving at a faster rate. If you are going 60 miles an hour ina car, how long will it take to catcah a guy ahead going 120?
You are obviously not even a little bit of a manager if you let the presence of operator overloading become a problem in your projects. If you don't want it, don't need it, or can't handle it, just forbid it in your coding conventions.
I would. I'm just saying that that's the kind of people who promote C# as superior. Like yourself.
Yes, you can contribute unlimited amounts of your time and money to Sun for free, who then end up owning your work. Great kind of "openness".
No, the community owns the results - for instance if I contribute to a JCR the results could also end up in GCJ, or in Jikes, or wherever. That's what it means to have a truly open process instead of a puppet standards body.
Under ECMA rules, yes. But, more importantly, ECMA is just a standard: I can implement it or change the language it defines in whatever way I like. I can't do that with Java because Java is proprietary and can be implemented only under license from Sun.
How? Where are proposed changes to C# that I as a public member can comment on?
You can indeed do the same thing with Java, the spec is right there. How do you think GCJ can be written? You are just displaying a vast load of igorance here and showing yourself as a true microsoft puppet believing what they tell you. Dumber than a bag of hammers since I already pointed out what you said is false, but you continue to parrot the party like.
Yes, languages like Java, where Sun holds numerous patents on key implementation features and where free implementations have serious patent issues. Fortunately, C# doesn't.
Look moron, I told you that ANY PART OF THE JAVA SPEC HAS FREE AND UNENCUMBERED USE OF ALL PATENTS INVOLVED. That means ANYONE can make use of the technologies, and Sun or other patent holders have explicitly given up all rights to those patents.
Compare with C# where Microsoft holds all the cards, and can use them any time they like.
Since you just continue to ignore this point I have to conclude you are an MS troll and/or an imbicile. I just can't make it any clearer, Java has zero patent issues by definition. Go read the JCP charter docs and then choke on your heaing helping of humble pie.
That's about it for me, you are a waste of time since you obviosuly can't learn anything. and have ignored every point I have made about ACTUAL performance in Java being superior vs theoretical performance boons you will never see. Perhaps by the time you gratuate from community college you will have seen the light - more likley you'll be stuck in a series of dead-end jobs as a McCoder fixing up ASP apps.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Has never occurred to anyone that MS could want Mono to succeed in making the whole
1) let Mono become a
2) Use patents, Passport, or the trusted computing stuff, or whatever other legal excuse to make Mono on linux unattractive for business users (this is the ??? part)
3) Mono users have the official
---- MISSING MISCELLANEOUS DATA SEGMENT --- [sigdash] trolololol
Here's the text SLashdot dropped:
...
Do you see how in something coded by someone with sense three is no stack abuse from new objects? Take a look at your code modified to use this:
Complex data[] = new Complex[1000*1000];
for(int i=0;idata.length;i++) data[i] = new Complex(rand(),rand());
Complex total = new Complex(0.0F,0.0F);
for(int i=0;idata.length;i++)
total = total.add(data[i]);
Honestly, I can't believe you actually posted that code.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Great, now try porting a complex Airy function to Java using those kinds of definitions. Welcome to writing numerical code in what amounts to assembly language.
You don't get it, and seemingly never will.
The great thing about Java (I think I've mentioned this before) is I don't have to port that code - it's already been done, and by people smarter than me and certainly a lot smarter than you!
CERN Java Libraries
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Taking a look at the colt libraries again, I note this on the same page you found regarding updates:
.Net is going to beat native assemby (but I'm sure you'll try to explain anyhow).
.Net lend themselves to slightly easier HPC implmentations, but since all you really have is Java slightly dressed up it's still got a long way to go comapred to real HPC languages like C/C++ or Fortran 90. So you are going to have to wait about two years for performance in your VM to catch up to Java - when Java is also undergoing changes at the same time, including work on a Java dialect explicity built for HPC and not just tacked on like in C#.
.Net neevr make any sense for nay project. Not even converting VB code, which is a tangle all by itself!
Version 1.0.1 is here - and just broke the 200Mflop barrier. Due too further library tuning, benchmarks now show the 100% pure Java matrix-matrix and matrix-vector multiply running only about 2.5 times slower than the algorithms from the Intel® Math Kernel Library. The latter is essentially beautifully hand crafted assembler code taking full advantage of the PentiumIII specific architecture and instruction set. More matrix performance results from 1.0.1, running on IBMJDK1.3, RedHat 6.1, 2 x PentiumIII@600 MHz.
Now that was from 2001. The 2002 update doubled the performance, which means if it was only 2.5 time slower than hand-coded assembly before it's now only about 50% slower - than hand-coded assembly! I'm not sure how you think
Yes some of the constructs in
At ever y stage you have shown yourself to have little common sense, only bling adherance to C#. What kind of idiot ties themselves to just one platform like that? I'm an advocate of Java but I know when not to use it - and while sometimes Java makes the most sense for any project, the way things are now C# and
If you want a platform inferior in every way, and playing catchup to other languages for eternity, then by all means stay the course you are on. While you are struggling to write libraires that get within 100% of the performance of existing Java libraries I'll actually be coding programs that do work.
The sad thing is in a few years you'll probably realzie your folly and only then will you appreciate what I've been trying to tell you. Hopefully this lopsided battle has at least shown other people the light and they will not suffer the same fate you seem determined to suffer.
Good luck - you'll need it!
"There is more worth loving than we have strength to love." - Brian Jay Stanley