Slashdot Mirror


Mono's WinForms 2.0 Implementation Completed

adrian.henke writes "After four years of development, 115K lines of source code, and 6,434 commits, Jonathan Pobst announces that Mono's WinForms 2.0 implementation is now complete. This announcement has been long awaited by any .NET WinForms developer who has ever tried to get an applications to work on Linux using Mono."

164 comments

  1. This will be a big help by Pikoro · · Score: 4, Interesting

    Currently working on a C# implementation of a web based in house CRM system.

    Going to be nice to finally be able to support our Linux desktops as well.

    We'll see how porting goes and if it's really worth the trouble.

    --
    "Freedom in the USA is not the ability to do what you want. It is the ability to stop others from doing what THEY want"
    1. Re:This will be a big help by pembo13 · · Score: 1

      So the requirements of your business problem required cross-platform support, yet you chose a tool which is decidedly not cross-platform? Why?

      --
      "Thanks for all the money you paid to us. We've used it to buy off ISO among other things" -Microsoft
    2. Re:This will be a big help by Anonymous Coward · · Score: 4, Insightful

      Where did he say that cross-platform support was required? There's a big difference between something that's required and something that's nice.

    3. Re:This will be a big help by Anonymous Coward · · Score: 0

      Not required, but nice to be able to offer it.

      Does a hot dog stand need some picnic tables to operate? No, but they're nice if you can add them.

    4. Re:This will be a big help by Haeleth · · Score: 1

      So you don't think it's a bit odd for any organisation that has Linux desktops as well as Windows desktops to deliberately choose a potentially-Windows-only system for developing corporate tools? Particularly one that's practically indistinguishable from Java, which runs perfectly on both Windows and Linux by design.

    5. Re:This will be a big help by ushering05401 · · Score: 3, Interesting

      "Particularly one that's practically indistinguishable from Java, which runs perfectly on both Windows and Linux by design."

      Except that Java doesn't run perfectly on Windows and Linux. Many people see C# as a language that set out to be a better Java than Java, and many people feel that on the Windows platform it succeeds. Combine that with the existing Windows install base and you have a pretty compelling reason to develop in C# over Java.

      Ten years down the line, however, I could see C# facing extinction if it does not become truly cross platform.

    6. Re:This will be a big help by LWATCDR · · Score: 1

      Have you ever used Java?
      I do all the time. Try out Eclipse.org, Netbeans, or Jedit sometime.
      They work really well on both Linux and Windows.
      I find Java to be a good development system. It even works just fine on the desktop if you write good Java code.
      The real problem that java had was applet abuse. Applets are really a great solution to a lot of problems. The problem was when people start to use them for things like Hover buttons and other useless stuff that now is often written in flash.. The junk also gives flash a bad name.
      C#? To be honest I have not tried it. It may be good but the current versions of Java are really very nice to work with.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    7. Re:This will be a big help by WED+Fan · · Score: 3, Funny

      Particularly one that's practically indistinguishable from Java

      Knock knock.

      Who's there?

      ...long pause...

      Java.

      The only reason, ONLY reason, to use Java is because you are psychotic and have a deep, long standing hate for your users and wish to inflict some of the most insidious pain and torment upon them.

      --
      Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly and applying the wrong fix.
    8. Re:This will be a big help by mweather · · Score: 1

      I thought that was the reason to use Mono.

    9. Re:This will be a big help by Anonymous Coward · · Score: 0

      Why wouldn't it be required? You think it's smart to strap yourself to a platform you can't control or influence?

    10. Re:This will be a big help by smbarbour · · Score: 1

      The biggest gripe I have about Java is that when no more applications are using the JVM, it doesn't go away. It just sits there wasting resources with no option to terminate it other than by force.

      I have taken classes on programming in Java, but since I had no real-world use for it, I have subsequently forgotten it, just as I have all but forgotten C/C++. The business world wants results now. They don't pay you to build each wheel from raw lumber when it's faster and cheaper to buy them pre-made.

    11. Re:This will be a big help by Tumbarumba · · Score: 1

      The only reason, ONLY reason, to use Java is because you are psychotic and have a deep, long standing hate for your users and wish to inflict some of the most insidious pain and torment upon them.

      I think that the statement needs to be qualified someone: I think it's perfectly valid for anyone developing desktop GUIs written in Java hates their users. The startup latency is painful, and long running GUIs will sometimes be hit with long GC pauses. I admit that it's much better now than in previous years, but it's still a dog.

      Java on the server side, however, is a great fit. In this case the user doesn't wait for the JVM to start up, and the Hotspot compiler can get things running very fast.

      --
      My business: Farstrider Studios.
    12. Re:This will be a big help by LWATCDR · · Score: 1

      That is one of the strengths of Java, there are so many libraries that getting a good application out the door is pretty dang fast. I think C# is much the same.
      As for the JVM. It should be swapped out to VM if it is not being used and the ram is needed. So it hanging around isn't that big of a deal on a modern OS. Goodness only knows how much of .NET hangs around when it isn't in use.

      --
      See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
    13. Re:This will be a big help by gstoddart · · Score: 2, Funny

      The only reason, ONLY reason, to use Java is because you are psychotic and have a deep, long standing hate for your users and wish to inflict some of the most insidious pain and torment upon them.

      Well, I do hate my users and wish to inflict pain on them, but I don't want to use Java.

      Is there a way I can inflict pain and torment in a platform agnostic way? ;-)

      Cheers
      --
      Lost at C:>. Found at C.
    14. Re:This will be a big help by abigor · · Score: 1

      Er...hopefully you realise that the great, vast majority of server-side and webapp business programming is in Java, and has been for ages. Java is the new Cobol.

    15. Re:This will be a big help by oliderid · · Score: 1

      My company uses mono c# for a relatively big in house project too.

      Here how the selection has been made.
      "I like c#." stated the boss.
      "Why not java?" A Microsoft language on a Linux server?"
      "I don't care that you hate Microsoft. Lets focus on the language's merit. These elegant get and set will save us hundreds of redundant methods. See how simple delegate and Event handling are. Environment? I don't like Eclispe. I like MonoDevelop...Ok it is a bit buggy (not anymore), but this IDE took all the best features of visual studio. It is free too and It won't require me to order new RAM or new PCs."

      The only problem we had until now was some messy classes dealing with multipart email encodings. Solution? A simple perl script to handle it until the mono team fixes the issue (I didn't check this yet...The hack works anyway).

      So we use c# for one year. The project is almost done, it works like a charm.

      ps: I'm the boss.
    16. Re:This will be a big help by smbarbour · · Score: 1

      I just noticed something that no one else mentioned... If it's a web-based system, how will the WinForms functionality help?

      WinForms is just for desktop apps, not web apps. (ASP.NET pages rendering HTML that is W3C compliant rather than "works great in IE" is another issue entirely.)

    17. Re:This will be a big help by Annymouse+Cowherd · · Score: 1

      Unfortunately, no, it seems that most commercial web sites are written in ASP.

    18. Re:This will be a big help by radish · · Score: 1

      Ermm...what?? Java (generally) works on a single app per JVM model, in fact I have many servers running multiple JVMs (the merits of that is another discussion!). The JVM most certainly does go away when the app does, primarily because the JVM _is_ the app. If you're talking about applets then the browser is responsible for running the lifecycle of the shared JVM in that case, talk to them.

      --

      ---- Den ene knappen er powerknapp, den andre er Bender voice knapp "Bite My Shiny Metal Ass"

    19. Re:This will be a big help by radish · · Score: 1

      What is it about Slashdot and the "Java isn't cross platform" FUD?. I've been a Java developer for around 8 years now. In all that time, developing server side and client side apps I can count on one finger the number of times I've had an app behave significantly differently between platforms. Java really does a fantastic job of running on pretty much any hardware you throw it at - typically I develop/unit test locally on XP and deploy serverside stuff out to Solaris & Linux for QA/prod.

      It. Just. Works.

      As for C#, as a language it's amazingly similar to Java, with a few nice additions (Delegates, Events, Properties) and some abominations that should have been shot at birth (structs). The big issues I have with it are:

      * Deployment model is a pain compared to "stick it all in a jar"
      * Memory management is extremely opaque. Whilst many/most people can get away with default GC settings, when you get large scale having the fine control Java gives you in very valuable.
      * Not cross platform (really, mono doesn't count). This is a biggy as it means I'm not doing anything server side with it.
      * Closed source libraries (makes debugging a hassle).
      * The standard class libraries _suck_ compared to Java.
      * VS just isn't as good as any of the major Java IDEs
      * There isn't anywhere near the community/ecosystem developed yet for C# - it'll come (probably) but right now I miss being able to find nice pre-written libraries for pretty much anything I can think of.

      But I do appreciate having access to a sensible, modern dev environment which is native to the desktop OS in use around here, it makes building nice desktop apps a lot easier. As much as I love Java, Swing never really cut it for anything complex. Maybe one day I'll learn SWT ;)

      --

      ---- Den ene knappen er powerknapp, den andre er Bender voice knapp "Bite My Shiny Metal Ass"

    20. Re:This will be a big help by Julian352 · · Score: 1

      I'm not sure you've been using C# enough. Let me address a couple points:

      * Deployment model is similar to basic executables - for each assembly you create a .dll/.exe and deploy it. That doesn't seem that much different from sticking everything into a single .jar (.zip)
      * There have been many books\blogs\papers written about how the GC works. There are in general 3 GC options in .Net, with a proper one being picked depending on the application type. (The server GC is a single GC per CPU, with more Gen0, but less Gen2 collections) You can control the GC behavior from within the application somewhat, but it is not as tweakable.
      * The libraries might be closed source, but there are two easy ways of getting the source.
        The first option is the .Net Reflector which lets you see implementation of any non-obfuscated .Net assembly
        The second option is the full source released for majority of the libraries.

      I am not sure I've seen such large deficiencies in .Net libraries. Can you point some major ones? The rest of the points don't seem to be as applicable now than they used to be a few years back.

    21. Re:This will be a big help by Ilgaz · · Score: 1

      The best platform currently Java runs (as client) is Windows and Linux. OS X is kinda stuck on version 5. As a full-Apple setup person, I can never dare to say Java is bad performer on Windows.

      Near a billion devices run Java, Google (Youtube), Yahoo hires J2ME developers to make unimaginable things just 2 years ago. Java P2P apps make top ten list on downloads, an industry giant like SonyEricsson plans to end J2ME interface problem by using Flash Lite 3 sparing millions of dollars (They own Symbian UIQ now).

      Java has devices in hand. A company like Apple switched to Intel because they saw future on portables (which proves to be right every day), mid aged people buy devices like Sony Ps3 just as a media center for their HDTV.

      I wouldn't put all my stakes to Windows and MS with a management like this.

  2. But can I actually use it for anything? by beoba · · Score: 5, Insightful

    ..and still nothing on whether WinForms is legally safe to use.

    --
    I am not a number - I am a free man!
    1. Re:But can I actually use it for anything? by Anonymous Coward · · Score: 0

      What's Microsoft going to do, call the police?

    2. Re:But can I actually use it for anything? by edalytical · · Score: 1

      Worse, call the layers.

      The police are to busy raiding trailer parks, writing traffic tickets, busting drug users, and harassing kids.

      --
      Win a signed Stephen Carpenter ESP Guitar from the Deftones: http://def-tag.com/?r=0008781
    3. Re:But can I actually use it for anything? by Vectronic · · Score: 4, Funny

      "Worse, call the layers"

      Which layer? does Mono have a self-destruct layer?

      using System.Microsoft.Infringement;

      public static void Main(string[] args)
      {
            If (Patents.Count > 0)
            {
                  ForEach(Match match in Patents
                  {
                        Console.WriteLine(match.patentname + ": " + match.patentcode);
                  }
            }
      }

      Error Buffer Overflow

      Yeah, yeah... you meant "lawyers" I know... and I dont code in C# so it might not do anything anyways...but... "call the layers" made me laugh...

    4. Re:But can I actually use it for anything? by YttriumOxide · · Score: 1

      I know you said you don't code C#, but really that's no excuse for missing a close bracket at the end of the ForEach statement (which, just FYI, should be "foreach" in C#, this isn't VB.net!)

      Anyway, I laughed, and if I'd had mod points, you'd have got a "Funny" from me.

      --
      My book about LSD and Self-Discovery
      Also on facebook as: DroppingAcidDaleBewan
    5. Re:But can I actually use it for anything? by tomhudson · · Score: 1

      Gawd, such a waste of white space. Let the holy brace wars begin ...

      BTW, for all those elsewhere in the comments who are raving about C$ .... oops, C#, C# isn't going much anywhere in comparison to either java or c or c++, or even vb.

    6. Re:But can I actually use it for anything? by Anonymous Coward · · Score: 0

      So, Microsoft fans aren't the only ones to employ FUD.

    7. Re:But can I actually use it for anything? by Wildclaw · · Score: 1

      "Lies damn lies and statistics"

      I like statistics and number, but unless you understand what you are basing everyhing on, they are useless and misrepresenting.

      THe TIOBE index is estimating use based on hits on search engines, and specifically a very specific query " programming". It is no wonder that C# gets left behind considering that one big selling point of .NET is the language agnostic part.

      This is especially noticed when you compare the searches "c# programming" on google which gives 640,000 hits while ".net programming" instead gives "1,790,000" hits. So you basically have 3 times as many hits that discuss .Net programming in general compared to c# specifically. And most of those sites probably use C# as the language of discussion, or use both VB.NET and C#.

      This isn't very strange, as there is far less to discuss about a specific programming language compared to the libraries and environment that it use. And C# uses .NET libraries, not C# libraries.

    8. Re:But can I actually use it for anything? by Vexorian · · Score: 1

      Err, of course it isn't legally safe to use it. Microsoft hasn't ever released it to ECMA, it is not protected by OSP or whatever non-sense.

      --

      Copyright infringement is "piracy" in the same way DRM is "consumer rape"
  3. Would be awesome... by jwkfs · · Score: 1

    If only Microsoft weren't up to 3.5 already. I just kid. Admittedly I haven't looked in depth at any of the versions of .NET > 2.0, but they didn't really seem to have any super awesome new features that I really wanted.

    1. Re:Would be awesome... by batkiwi · · Score: 5, Informative

      Info for you: .NET 3.0 is 4 additional dlls, otherwise it IS .NET 2.0. Same runtime/etc. It adds:

      -WCF: GREAT new tech. You write a module, and then expose it remotely via config. So if you want to change from Remoting to Compliant Web Services you simply change a config setting. Or you can expose simple services via REST. It abstracts "transport" from "functionality".
      -Cardspace: dud. Single sign on/identity mgmt which is being replaced by openID it seems. Cool idea though.
      -WPF: Cool new xml based description language to fully abstract process from gui much in the way ASP.NET does. It also lets UI designers "skin" apps seperately from the app code itself. VERY nice tech, especially the bindings.
      -WF: Nice tech, not quite mature but neat to use. It allows for program logic to be described in an xml format (XAML) and shown in a gui designer. I really like workflow tech NOT because it lets business users program (it DOESN'T) but because it gives you an artifact that users can understand AND CONFIRM. .NET 3.5 is enhancements and bugfixes of 3.0 PLUS LINQ. LINQ is either the best thing ever, or the worst thing ever, depending on who you ask. I think "both." LINQ allows you to apply "sql-esque" syntax to any IEnumerable provider. So if you have an in memory collection of animals you can do:

      var monkeys = from animal in myAnimalsCollection
                                    where animal.Type == monkey
                                    select new {animal.ID, animal.Name, animal.BirthDay};

      foreach(var monkey in monkeys) .... do stuff

    2. Re:Would be awesome... by setagllib · · Score: 4, Informative

      LINQ is nice, except it's decades too late. Of the languages in common use today, Python and Ruby have much better alternatives to linq built in (and have had them for many years), and even new languages like Scala support similar functionality.

      Your example in Python with a list comprehension, broken down into multiple lines for clarity:

      monkeys = [
          (animal.id, animal.name, animal.birthDay)
          for animal in myAnimalsCollection
          if animal.type is monkey
      ]

      And a comprehension of multiple lists is similar:

      pairs = [
          (a, b)
          for a in range(10)
          for b in range(10)
          if b == a * 2
      ]

      You have been able to do that for many years in Python, and yet Microsoft fanatics act like it's something new and innovative.

      --
      Sam ty sig.
    3. Re:Would be awesome... by mikeburke · · Score: 1
      Does the python version read from a database or an XML document?

      The LINQ syntax does that. It's not just a fancy way of iterating over an in-memory collection.

    4. Re:Would be awesome... by Anonymous Coward · · Score: 1, Informative

      Python containers can read from whatever source they are designed as they are iterated. LINQ seems to be syntactical sugar not unlike list comprehensions.

    5. Re:Would be awesome... by Anonymous Coward · · Score: 1, Interesting

      You have been able to do that for many years in Python, and yet Microsoft fanatics act like it's something new and innovative.
      And Python copied the idea from Haskell, yet Python fanatics act like it was something new and innovative. I bet Haskell took the idea from somewhere else too...
    6. Re:Would be awesome... by adrian.henke · · Score: 1

      > Python and Ruby have much better alternatives to linq built in (and have had them for many years) It's not about the shiny syntax, its about having an additional layer to grab data from datasources like SQL or XML. You can use the same LINQ syntax to deal with data from all kind of data sources, that's what it is all about.

    7. Re:Would be awesome... by makapuf · · Score: 4, Informative

      The python version reads from an iterable, so it can be a request from a DB or an XML file sending its result one by one. In the case of the Db, the filtering will however be done by python and not in the DB.

      However, there are alternative ORM python syntax to DB mappings, such as django syntax

      AnimalCollection.filter(type='monkey')[:10].order_by('age')
      (talking about simple orms, not full sqlalchemy table declaraions)

      Being able to customize filtering of container classes for iterators definition would be cool anyway.

    8. Re:Would be awesome... by Cyberax · · Score: 1

      LINQ is different - it's STATICALLY checked while Ruby's or Python's versions are dynamic.

      LINQ also introduces type inference, anonymous types and extension methods to C#. While none of this is new, I have not yet seen another _popular_ language supporting it.

    9. Re:Would be awesome... by setagllib · · Score: 1

      Like I said, I'm only talking about *popular* languages and I didn't claim it was innovative in Python. Python does it and does it well, and unlike Haskell, Python enjoys wide real-world use.

      --
      Sam ty sig.
    10. Re:Would be awesome... by setagllib · · Score: 2, Insightful

      When you already have a dynamic language, type inference, anonymous types and extension methods are implicit. I'm not arguing every language should be dynamic, but the additions to C# are just solving problems specific to static languages. That's fine - static languages are still much faster than dynamic ones. Just saying, as far as languages go, C# is the one playing catchup, and with about a 20 year gap for many features.

      --
      Sam ty sig.
    11. Re:Would be awesome... by Anonymous Coward · · Score: 0

      Wow, you should write documentation for Microsoft. Great roundup of those technologies!

    12. Re:Would be awesome... by plague3106 · · Score: 1

      You should check out Linq. Also, I'm loving Wpf for creating UIs. Controls that I had to either spend hours coding myself or lots of money purchasing I can now easily create on my own.

      Honestly, there are a lot of things in C# i would love to see in Java; real generics, explicit interface implemenation, etc.

    13. Re:Would be awesome... by plague3106 · · Score: 1

      I don't think I'd call Ruby in "common use." Or Python for that matter; still lots more Java, C# or PHP it seems. Also, Linq is "built-in," so I'm not really sure why you are trying to imply it's not. Granted it's a bunch of compiler magic (aka syntatic sugar), but it's proving to be EXTEREMLY useful.

      I think "MS fanatics" are excited about it because it's now in the tools they use. I don't know of that many python / ruby developers that target the MS platform exclusively..

    14. Re:Would be awesome... by godefroi · · Score: 1

      More accurately,

      2.0 is the base framework.
      3.0 is 2.0 plus some new libraries.
      3.5 is 3.0 plus some new libraries and a new compiler.

      You can use all the new neato stuff from ".NET 3.5" or "C# 3.0" like extension methods, lambdas, type inference, etc on the 2.0 framework if you compile with the 3.5 compiler.

      --
      Karma: Poor (Mostly affected by lame karma-joke sigs)
    15. Re:Would be awesome... by Just+Some+Guy · · Score: 4, Informative

      You can use the same LINQ syntax to deal with data from all kind of data sources, that's what it is all about.

      All the usernames on a Unix system:

      print [line.split(':')[0] for line in file('/etc/passwd')]

      Dates from an SQL table:

      sth.execute('select invdte from invoice where invid=%(invid)s', {'invid': 1000090340})
      print [row[0] for row in sth]

      Search Google for "list comprehensions" and print the text of every "<a href" tag on the page:

      import urllib2
      import BeautifulSoup

      agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'
      url = 'http://www.google.com/search?q=list+comprehensions'
      google = urllib2.Request(url, headers={'User-Agent': agent})
      soup = BeautifulSoup.BeautifulSoup(urllib2.urlopen(google).read())
      print [link.contents for link in soup.findAll('a')]

      Basically, anything Python can loop across works inside a list comprehension. It's a basic construct of the language.

      --
      Dewey, what part of this looks like authorities should be involved?
    16. Re:Would be awesome... by Anonymous Coward · · Score: 0

      The big difference between LINQ and the code that you showed is that the programmer writes the same LINQ expression regardless of the provider (in-memory objects, XML documents, SQL databases) and the LINQ providers optimize the query.

      For example, writing:

      from animal in MySource () where animal.type == monkey orderby animal.age select new animal;

      If MySource is a database, it will actually send the proper SQL query to the server, and only return the matching records, instead of iterating over them. That will send to the server the equivalent of "SELECT ... FROM DB WHERE @TYPE == 'monkey' ORDER BY @AGE".

      If MySource on the other hand returns an array of structures, then it must iterate over all the values.

    17. Re:Would be awesome... by Anonymous Coward · · Score: 0

      Don't get me wrong -- Python's list comprehensions are a great feature -- but they are just a small fraction of what LINQ has to offer. For example:

      1. Python only implements the SELECT, FROM, and WHERE features of SQL. If you want an ORDER BY or GROUP BY, you have to do that manually. So if you want to sort the list, you have to assign it to a variable and call the sort function, passing in a comparison function. Since lambdas can only be a single line in Python, any complicated sort has to have a separate function associated with it.

      2. Python evaluates the comprehensions in-line. Even if you never actually use an element of the list, it still gets executed. LINQ expressions are only evaluated when you attempt to look at the results.

      3. Python has to evaluate the query itself. LINQ can send the query to the database and just get back a cursor with the results, making it useful as an ORM. If the myAnimalsCollection in the above example was a DB table with billions of rows (one for each animal in the world), Python would have to transfer the entire contents of the table through memory in order to figure out which ones are monkeys, then create an in-memory list of all the monkeys. LINQ would just send the query to the DB which would use an index to figure out which ones are monkeys, and then only transfer the ones into memory as they are being used.

      As much as I enjoy using Python's list comprehensions (I program mainly in Python), I often find myself yearning for LINQ query comprehension capabilities. It's hard to imagine how you think Ruby or Python alternatives are better, let alone "much better" as you say.

      dom

    18. Re:Would be awesome... by Sentry21 · · Score: 1

      The python version can read from any iterable, which includes collections (lists, tuples, dicts), but also includes things like strings (iterate over letters), files (iterate over lines), and so on.

      It can also read from generators, which are objects that retrieve data as its requested; for example, it would be trivial to write a generator that would pull data out of a database, one record (or set of records) at a time. Each time you try to iterate over a generator, it 'creates' data (e.g. from reading a file, doing calculations, accessing a database or web service, etc.). It behaves like a list, but it's really a linearly iterable interface to some data source or other.

      For that matter, you could have the generator do client-side caching, so that when you first initialize it, it fetches 100 rows and caches them; each time you try to iterate over the generator, it grabs another row from the cache; when there are only 10 rows left, it fetches another 100 in the background. That way you get more responsiveness in your application and less back-and-forth.

      So, for a straightforward answer, yes - Python's version can read from pretty much any data source ever, and if it can't by default it's trivial to write a wrapper (maybe a few lines?) to do it for you. That said, Python's syntax requires doing this all on the client-side â" it doesn't pass your filter over to the SQL database, if that's what you're using. That would be something you'd do when you initialize your generator.

    19. Re:Would be awesome... by Raenex · · Score: 1

      The point is if you value static type checking, no popular language has the features of C#. Java will probably get them in version 7 because of all the recent competition, which is a good thing (or maybe a new language like Scala will take over for Java).

      So pointing to Python when you want to develop in a static language doesn't make for a good argument.

    20. Re:Would be awesome... by setagllib · · Score: 1

      That's true, Python list comprehensions do not support ordering. However, since Python is partly a functional language anyway, it doesn't matter:

      a = sorted([comprehension of b])

      Or specifying your own comparator:

      a = sorted([comprehension of b], cmp = comparator or lambda)

      It's even cleaner in Ruby which has nicer closures, but there it's OO instead of functional.

      You already know that, but I don't suppose every Slashdot reader does.

      And while you have a point that Python list comprehensions in particular do not support being translated to SQL, Ruby's OO version certainly do. The .filter, .map, etc. can all generate code behind the scenes, which is only run when the result is requested as an iretable. ORMs do this, though I haven't used any Ruby ORMs personally.

      --
      Sam ty sig.
    21. Re:Would be awesome... by MosX · · Score: 1

      I wouldn't call CardSpace a dud. At first it seems similar to OpenID, but from Wikipedia:

      "Because CardSpace and the Identity Metasystem upon which it is based are token-format-agnostic, CardSpace does not compete directly with other Internet identity architectures like OpenID and SAML."

      So it can be used with systems like OpenID.

    22. Re:Would be awesome... by batkiwi · · Score: 1
      I'm a python fan, and what you're referring to equates directly to "LINQ to Objects."

      However, notice how every piece of code you have is prefaced by 2-5 lines of "other code." SQL/HTTPRequests/whatever. LINQ has the concept of a "provider" which you can implement yourself. The default ones are LINQ to Objects and LINQ to SQL. MANY others exist though, including a LINQ to Google.

      SO while in python you do:

      agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'
      url = 'http://www.google.com/search?q=list+comprehensions'
      google = urllib2.Request(url, headers={'User-Agent': agent})
      soup = BeautifulSoup.BeautifulSoup(urllib2.urlopen(google).read())
      print [link.contents for link in soup.findAll('a')]
      in LINQ you do:

      var results = from searchResult in MyGoogleProvider.Searches
                    where searchResult.searchTerm == 'list comprehensions'
                    select searchResult;
       
      foreach(var result in results)
      {
      .....
      }
      In python you said

      sth.execute('select invdte from invoice where invid=%(invid)s', {'invid': 1000090340})
      print [row[0] for row in sth]
      You've been able to do the equivilant of that in .NET as well since .net2. Instead, with linq, you do:

      int passedInInvoiceID = 1000090340;
      var invoiceDates = from invoice in InvoiceDB.Invoices
                    where invoice.invid == passInInvoiceID
                    select invoice.Date;
       
      foreach(DateTime invoiceDate in invoiceDates)
      ....
      Notice how, as long as the provider has been written, the program code is EXACTLY the same?

      If you wrote an XML provider the code to get invoice dates from an XML file on the filesystem would look EXACTLY the same. Neat eh?

      The beauty (and danger) of LINQ is that ANYONE can write a provider which parses the lamda expression tree generated by the "from... select" syntactical sugar. There is a FLICKR one already, as well as live.com/google/yahoo/etc. The danger is that it is VERY VERY HARD to write a "proper" LINQ data source, and if you get it wrong it can be hidden.

      As far as I know in python you have the equivilan of IQueryable, but not IEnumerable (eg you can filter an existing or lazy created collection, but you cannot extract the expressions used for the filter and run them on the raw data source).

      To sum up, I'm REALLY on the fence with LINQ. MS has done a great job with LINQ to SQL and LINQ to Objects. The guy who wrote LINQ to XML did a good job. The person who did LINQ to FLICKR did a shit job, as last I checked (maybe a month ago) it didn't even support "ORs"... or 90% of the actual LINQ syntax. LINQ to Google is "neat" as an experiment but functionally worthless. I think MS didn't provide enough framework or guidance around creating your own provider which is ALWAYS how they do things (put out a good reference implementation but refuse to document it!!!!)
    23. Re:Would be awesome... by Just+Some+Guy · · Score: 1

      Thanks for the explanation. The ones I'd read before today weren't very exciting, like saying "in this language, you can subtract two numbers!" when they're really talking about distance calculations in GIS functions.

      I wonder what it'd take to add new non-RDBMS backends to something like SQLAlchemy?

      --
      Dewey, what part of this looks like authorities should be involved?
    24. Re:Would be awesome... by Cyberax · · Score: 1

      Nope.

      Static and dynamic approach to LINQ-like interfaces are completely different. It's easy to have a dynamic databinding - you just need to inspect records at runtime. You can literally write it in couple hundreds lines of code.

      It's much harder to do it statically. I know only one other language which supports LINQ-like databinding, and this language is Haskell :)

      Also, I prefer static languages not because they are faster, but because they are statically checked.

  4. "This announcement has been long awaited ... by Helmholtz · · Score: 4, Funny

    ...by any .NET WinForms developer who has ever tried to get an applications to work on Linux using Mono."

    All five of them.

    --
    RFC2119
    1. Re:"This announcement has been long awaited ... by pembo13 · · Score: 1

      Some people realllyyyyy like .NET. I use .NET all the time, but I can't say I like it half as much as Python.

      --
      "Thanks for all the money you paid to us. We've used it to buy off ISO among other things" -Microsoft
    2. Re:"This announcement has been long awaited ... by imess · · Score: 1

      Where's the other 4?

    3. Re:"This announcement has been long awaited ... by thegrassyknowl · · Score: 4, Funny

      Five? I think you should stop rounding up to a whole hand!

      --
      I drink to make other people interesting!
    4. Re:"This announcement has been long awaited ... by neonux · · Score: 1

      Have you tried Boo ? http://boo.codehaus.org/

      Boo is an object oriented statically-typed programming language for .NET/Mono with a Python inspired syntax and a special focus on language and compiler extensibility.

      It has the best of both worlds ;)

      --
      @neonux
    5. Re:"This announcement has been long awaited ... by Anonymous Coward · · Score: 2, Informative
      Any language that requires me to pay attention to white-space as much as Python should be dragged into the streets and beaten.

      Sorry.

    6. Re:"This announcement has been long awaited ... by Alex+Belits · · Score: 1

      One of them is, I guess, Miguel himself.

      Still three left.

      --
      Contrary to the popular belief, there indeed is no God.
    7. Re:"This announcement has been long awaited ... by mweather · · Score: 1

      If you have problems with whitespace in python, you're doing something wrong. My 6 year old nephew picked it up right away. Granted he's not writing anything complex.

    8. Re:"This announcement has been long awaited ... by BytePusher · · Score: 1

      I am one of them.

    9. Re:"This announcement has been long awaited ... by smbarbour · · Score: 1

      Go ahead and put me on that list. I've been looking for a way to program for Linux without using a masochistic language for a while now.

      Why should I need to use a language where I have control of everything if I don't need to do anything out of the ordinary? It's non-conducive to productivity to have more control than necessary, and bugs in parts of the code that I don't need control over lead to security vulnerabilities.

    10. Re:"This announcement has been long awaited ... by Just+Some+Guy · · Score: 1

      Any editor that requires me to pay attention to white-space as much as Notepad should be dragged into the streets and beaten.

      Fixed that for you.

      --
      Dewey, what part of this looks like authorities should be involved?
    11. Re:"This announcement has been long awaited ... by Alex+Belits · · Score: 1

      Two left.

      --
      Contrary to the popular belief, there indeed is no God.
    12. Re:"This announcement has been long awaited ... by Anonymous Coward · · Score: 0

      Boo is a hodgepodge. Any language that requires me to use a special character to denote regex literals if they happen to have a space in them has issues with the parser that stem from a complete lack of understanding how to implement them.

      There's so many other problems like this in Boo I don't know where to begin. Aside from syntax warts like the above, the language is nice, but internally it's as much a hodgepodge as PHP. It makes Groovy look rigorous.

    13. Re:"This announcement has been long awaited ... by MarkKB · · Score: 1

      Wait, there's four others?

  5. Re:too little, too late? by Metasquares · · Score: 1, Insightful

    What platforms? .NET is very clunky, but it still seems very popular.

  6. Re:too little, too late? by DigitlDud · · Score: 3, Insightful

    I'm also very interested to hear what these platforms are.

  7. Very nice by nuzak · · Score: 4, Funny

    > I use .NET all the time, but I can't say I like it half as much as Python.

    I know what you mean -- ELF just doesn't hold a candle to Perl.

    --
    Done with slashdot, done with nerds, getting a life.
    1. Re:Very nice by jamesh · · Score: 1, Informative

      I can kind of see the point you were trying to make, but .NET doesn't just refer to the bytecode interpreter - it also refers to the runtime libraries etc, which is I think the point that the GP was trying to make.

      The fact that python can run under .NET confuses the issue a bit too... but I think most of us can get our heads around it :)

  8. Re:too little, too late? by flydpnkrtn · · Score: 0, Offtopic

    Methinks we've been trolled folks.

  9. Re:too little, too late? by nguy · · Score: 5, Informative

    It is interesting that now that Mono is getting to a more complete (and possibly usable state), most developers have moved beyond the .NET hype and onto more elegant development platforms...

    Please stop conflating Mono and .NET. Mono supports .NET, but that's not its primary API.

    In fact, the primary API is the same API lots of open source software uses: Gnome, Gtk+, and many standard open source libraries. All Gnome apps using Mono use the Gtk+ APIs.

    I wish there were better alternatives, but C# + Gtk# + MonoDevelop is probably the most elegant development platform right now. Nothing else really comes close. Python is a more elegant language but doesn't have a comparable IDE. Objective-C and Cocoa are messily intertwined with C and C APIs. And Java is a bloated pig.

  10. Re:too little, too late? by revlayle · · Score: 2, Interesting

    Maybe the mono devs can get an implementation of IronPython going? Then you can have Python + a damn good IDE (i was surprised how well Mono Develop is myself)

  11. Re:too little, too late? by malevolentjelly · · Score: 3, Informative

    Say what you will about Mono, I think Microsoft's implementation of .NET is actually a pretty strong contender. If you need to solve a problem in Windows really fast, it can be pretty insanely convenient. I think Powershell in Windows Server basically uses a .NET machine for its shell interface. If you ever need Windows machines and Unix machines to talk to eachother, a Mono compatible implementation could be even more convenient than having Python talk to .NET, which isn't too hard to begin with.

  12. Re:too little, too late? by samkass · · Score: 1

    "And Java is a bloated pig."

    At the risk of feeding the trolls, in what way is C# + Gtk# + MonoDevelop less of a bloated pig than Java? Java is actually a very fast, extremely productive platform to develop on with a top-shelf toolchain (in fact several).

    --
    E pluribus unum
  13. Re:too little, too late? by vux984 · · Score: 0

    Python is a more elegant language but doesn't have a comparable IDE.

    I somewhat disagree.

    The use of indentation alone to convey semantics is an extremely annoying flaw. It makes python code particularly susceptible to mangling. I like that I can write C# code (or code in most languages), copy and paste it, or make significant edits, and then simply tell the IDE to reformat it.

    I also like that C# checks typing at compile time. I fail to see a worthwhile advantage to how Python does it. The more simple bugs you can fix during compilation the better. I concede that Python makes certain types of action easier, since you can basically have 'anonymous interfaces', but in practice it leads to more errors, and really only saves a little bit of coding effort, in my opinion.

    Meanwhile C#3 extension methods, lamda expressions, and linq syntax in particular are truly a pleasure to work with.

    I'm not going so far as to say c# is more elegant than python, and c# has its flaws too... and I'd put them both in the running for most elegant language... but python's semantic indentation drives me nuts. There's nothing that fundamental to C# that annoys me the same way to the same extent.

  14. Re:too little, too late? by setagllib · · Score: 3, Insightful

    IronPython already works fine on Mono, but it doesn't have IDE support. PyDev in Eclipse is pretty nice for pure Python and Jython.

    Personally I'd rather work directly in Python/Ruby on GTK/Qt than go through an extra layer that is .NET. Maybe Anjuta could stop sucking and support Python, or Eclipse could have Glade integration.

    And while Mono's not horrible, but it's not nearly as fast as the Sun JVM, so if I want fast bytecode I'd rather use Java than C#.

    --
    Sam ty sig.
  15. Re:too little, too late? by Anonymous Coward · · Score: 0

    Python's an interpreted dynamic language, C# is a compiled static language. Trying to use one like the other is a recipe for a headache.

    The two don't really compete so much as solve completely different problems. Personally, I love Python for writing all those throwaway programs I need to scratch various itches. Dynamic typing means you're not worrying about defining 500 lines of boilerplate classes before you even get down to coding logic.

    Meanwhile, I use a static, compiled language whenever I want strong type guarantees. This is generally any largish, non-trivial project that needs some form of rigorous structure. (These are fewer and farther between than one might think, though.)

    Of all the scripting languages, I think I like Python the most. But I still develop in plenty of other languages; it's just a nice option to have. One of the best things about Python is how well it integrates into C, and by extension, any language that supports C interfaces (aka, all of them worth mentioning).

  16. Re:too little, too late? by sumdumass · · Score: 1

    I don't know about the definition of bloated, bit it is a pig on resources and slow as hell on my older computers. Perhaps that is the inference he was attempting to make.

    Now, X seems to slow some things down a little but I haven't really seen the comparative mono applications act in the same ways as java seems to. However, it should also be noted that I can't really compare apples to apples here because I don't have applications doing the same things in similar ways written in the different languages to really compare. I do know that something like the Angry IP Scanner which recently went Java is slower compared to previous windows versions. But that isn't exactly mono though.

  17. Re:too little, too late? by siDDis · · Score: 1

    Java is very fast and I think these numbers speaks for them self http://www.bytonic.de/html/benchmarks.html

  18. By that standard linux isn't safe to use either by leftie · · Score: 1

    SCO still has a few law schools worth of lawyers on retainer, and a new group of big bucks sugar daddies to fund a few more rounds of lawsuits.

    These extremists are not going to surrender. They see open source/free software as a form of communism. These are not the sort of people who call off an already declared war. They are going to keep on filing new lawsuits until they manage to land their lawsuit in the courtroom of a judge who is just as warped and extreme as they are.

    1. Re:By that standard linux isn't safe to use either by Corwn+of+Amber · · Score: 1

      Or until they run out of courtrooms. There are only so many circuits to sue and file appeals in, and once it's before the Supreme Court, the judgement is pretty final meseems.

      --
      Making laws based on opinions that stem up from false informations leads to witch hunts.
  19. Re:too little, too late? by Saffaya · · Score: 1

    I can write C# code (or code in most languages), copy and paste it, or make significant edits, and then simply tell the IDE to reformat it. Which IDE do you use ?
    I have nothing like you describe when working with C++ under Visual Studio.
  20. SWF GUI builder? by IBBoard · · Score: 2, Interesting

    Does this mean we can finally get a SWF GUI builder in MonoDevelop on Linux?

    I've got a couple of apps I wrote while I was using Windows and now I use Fedora Linux. The back-end library code and my newer apps that use GTK# are fine to edit in MonoDevelop, but I've got a VirtualBox install with WinXP and Visual Studio in it for now so that I can update the System.Windows.Forms layouts when I need to.

    Hopefully the "API complete" also means they'll fix some of the odd rendering I've seen at times :)

    1. Re:SWF GUI builder? by wasbridge · · Score: 1

      I have a Flash like IDE for linux Open Dialect google it or http://dialect.openmodeling.net/ (use the google cache if its down). Its C# using GTK# and Flex for a backend. The linux version that I have up is old so you may wanna build from in Mono

    2. Re:SWF GUI builder? by IBBoard · · Score: 1

      I meant System.Windows.Forms, not Shockwave Flash ;)

  21. But why the Win32 style in WinForms? by master_p · · Score: 3, Interesting

    From the blog:

    You can use handles in Winforms, they just do not map to an actual HWND on non-Win32 systems, but you can definitely use them, and you can even override WndProc methods on derived classes from Control and process a pile of WM_ messages that Mono's Winforms actually builds on.

    Why WndProc, HWND and WM_ messages are still there? I understand Microsoft built a software monopoly by mixing Window System management and a GUI toolkit together (and transferring it to .NET ensures that monopoly), but isn't .NET supposed to be one of the most advanced toolkits out there? Having to rely on WndProc, HWND and WM_ messages seems a very bad design for me (I've been developing MFC apps for a decade now and I know of the numerous problems that might come up), and unfortunately Mono WinForms copied that in order to be compatible with .NET.

    Initially I thought 'wow, a contender to Qt/Java for building cross-platform apps', but after reading the blog and being an supporter of anything but Win32 (the ugliest API ever written), I will think twice before using Mono or .NET for cross platform development.

    1. Re:But why the Win32 style in WinForms? by Anonymous Coward · · Score: 0

      I would rather say the largest/most complete API ever written.

    2. Re:But why the Win32 style in WinForms? by jonwil · · Score: 3, Interesting

      Use GTK# if you want a cross-platform UI toolkit based on .NET.

      This work on WinForms is intended to provide a way to run .NET applications written for Windows on top of Mono. And for doing that, it has to be compatible with the Microsoft implementation of WinForms.

    3. Re:But why the Win32 style in WinForms? by Haeleth · · Score: 3, Insightful

      unfortunately Mono WinForms copied that in order to be compatible with .NET.
      Um, yes, Windows compatibility was kind of the entire point of supporting Winforms, you know?

      If you don't want to be compatible with Win32, use GTK#.
    4. Re:But why the Win32 style in WinForms? by master_p · · Score: 1

      But if I want my app to be cross platform, why not right it in GTK# from the beginning?

    5. Re:But why the Win32 style in WinForms? by drinkypoo · · Score: 2, Funny

      Because GTK# is not a language? And because it's not tipped over?

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
    6. Re:But why the Win32 style in WinForms? by master_p · · Score: 1

      Sorry, I meant 'write'. But the question is still valid. If I am going to write a cross platform app, why choose a toolkit with so many platform-specific -isms, like win32-isms (WM_ messages, HWND, WndProc etc) and not choose one that makes more sense, like GTK#?

    7. Re:But why the Win32 style in WinForms? by argent · · Score: 1

      I understand Microsoft built a software monopoly by mixing Window System management and a GUI toolkit together (and transferring it to .NET ensures that monopoly), but isn't .NET supposed to be one of the most advanced toolkits out there?

      I think you answered your own question.

      I don't know about "one of the most advanced toolkits out there", but it's an environment developed for a company that's been so reluctant to consider doing anything that might hurt their moneymaker that they've crippled project after project to keep them locked in to Windows. Ask people who had Windows CE clamshells and tablets in 2000 about Pocket PC, if you want to find some people who share your pain.

      So, anyway, maybe you can help me understand something. A lot of people have ragged on me because I've been saying that Mono is the camel's nose under the tent, the first step in supplanting the UNIX API with Microsoft-derived ones. Oh no, they insist, that stuff only shows up in Winforms, MONO applications on UNIX are UNIX applications, the MONO API on UNIX is a real UNIX API, and Mono GUI applications on UNIX are going to use Gtk and other UNIX-based toolkits (setting aside the fact that Trolltech has been isolating and marginalizing the UNIX API for some time).

      OK, now Mono's got Winforms in it. But, that's not what my question's about.

      Here's what I want to know: you know the Windows environment, would you describe MONO, without Winforms, as more like Windows or like UNIX?

    8. Re:But why the Win32 style in WinForms? by nuzak · · Score: 1

      Winforms is the old and busted tech that has all sorts of compatibility kludges to be backward compatible. The new sexiness is WPF, which unfortunately isn't even on Mono's roadmap (Silverlight is just a subset of it).

      --
      Done with slashdot, done with nerds, getting a life.
    9. Re:But why the Win32 style in WinForms? by Jamie+Lokier · · Score: 1

      You can, and I recommend it. An app I was involved with switched from WinForms to Gtk# on Windows because Winforms just isn't that good. It was a great improvement.

      I understand that Winforms 2 is catching up with Gtk and every other toolkit though: it does widget layout for you now! (wow!) (sarcasm).

    10. Re:But why the Win32 style in WinForms? by plague3106 · · Score: 1

      I've been doing WinForms .Net development for a while now, and haven't had to use Hwnds, WndProc, or WM_messages. So I guess the answer is that you normally don't need them in .Net either, but they're there if you do.

    11. Re:But why the Win32 style in WinForms? by ChatHuant · · Score: 1

      If I am going to write a cross platform app, why choose a toolkit with so many platform-specific -isms, like win32-isms (WM_ messages, HWND, WndProc etc) and not choose one that makes more sense, like GTK#?

      Because the "cross-platform" requirement often doesn't exist, at least not during the design of V1.0 of an application. The application is intended to work on a certain platform. A design requirement for "cross-platform compatibility" will have a major impact on resources and budget (think for example of all the extra effort required for testing and stabilizing the app on multiple platforms). Yes, there are toolkits or frameworks that promise cross-platform compatibility, but the truth is that for serious apps you'll have to either sacrifice performance on your real target platform, or tweak the code individually for all platforms. Big effort, if you're talking about a big application. There must be a strong justification for the extra expense, and in many cases it doesn't make sense.

      Sometimes, after a number of years/versions, requirements change, and you need to migrate the app to something else. That's where something like Mono helps. And note, this two-step process may well be the correct way to go for a company, especially for a start-up. The money and resources for the porting work will come from a different year's budget; if your app was successful, your company may now have enough cash to handle it.

    12. Re:But why the Win32 style in WinForms? by MobyDisk · · Score: 1

      Why WndProc, HWND and WM_ messages are still there? understand Microsoft built a software monopoly... Having to rely on WndProc, HWND and WM_ messages seems a very bad design... This has nothing to do with Microsoft being a monopoly. You don't have to "rely on" any of those things. WinForms, GTK, GTK#, pyGTK, etc. are all the same way. In every windowing system, there is always a way to get to the low-level handle for the object. It's a "just in case" measure so that if there is some functionality that wasn't 100% wrapped by the API, or for compatibility with a 3rd-party library so that the developer isn't stuck. It isn't a disadvantage. In both WinForms and GTK#, it is extremely rare to need access to the HWND.
    13. Re:But why the Win32 style in WinForms? by frank_adrian314159 · · Score: 1
      ... isn't .NET supposed to be one of the most advanced toolkits out there? why the Win32 style in WinForms?

      A. Because the .Net Framework was rushed out and, as such, needed a way of doing particular low-level things, the easiest way to provide same was to place a thin wrapper over existing Win32 APIs (and DAO/ADO/flavor of the month data APIs, etc., etc.).
      B. Because Microsoft did not want the expense to develop, test, and document a new set of windowing APIs.
      C. Because Microsoft decided that a customer base familiar with WM_xxx and HWNDs would be more comfortable retaining their old knowledge.
      D. Because Cowboy Neal said so.
      E. All of the above (except D).

      --
      That is all.
  22. Re:too little, too late? by Anonymous Coward · · Score: 0

    Glad you're happy.

    Personally I think that since indentation is pretty much required anyway, you may as well have the language take advantage of it for you.

    I just find Python so much more consise than C#, all the extra fluff in C# doesn't seem to help reduce bugs, as opposed to the extra verbosity in Python over Perl, which does reduce bugs.

    It's just a shame that IronPythonStudio is nowhere near as good an IDE as VS is for C#, and Python really does _need_ an IDE. Oh, and that Linq looks like an ugly add-on in Python whereas it's part of the language in C#.

    By far my favourite thing is that I can continue writing in my favourite language while happily calling code you've written in yours and everything works flawlessly. Thanks to Mono, I can also take code I've written on windows and run it on both MacOS and Linux. It's hard to get into religious wars when tools work together!

  23. Re:too little, too late? by Anonymous Coward · · Score: 2, Informative

    Ctrl-A, Ctrl-K, Ctrl-F

  24. Re:too little, too late? by Anonymous Coward · · Score: 0

    And Python/Qt on GTK+/Qt isn't "an extra layer" because?

  25. Re:too little, too late? by Anonymous Coward · · Score: 0

    ctrl-shift-f in eclipse to reformat
    ctrl-shift-o to fix all includes/imports

  26. Re:too little, too late? by ThaReetLad · · Score: 1

    VS2008 has this, as does the Visual Assist VS plugin for all previous VS versions

    --
    You can't win Darth. If you mod me down, I shall become more powerful than you could possibly imagine
  27. Mono is good stuff by Ed+Avis · · Score: 1

    Come on now, this is a pretty significant step. Lots of Slashdotters must be stuck developing Windows .NET applications and would love to find a way to deploy them on Linux. If you haven't tried it, Mono is pretty cool: copy your .NET executable to Linux and run

    % export MONO_IOMAP=all
    % mono my_program.exe

    You might be surprised how well it works.

    --
    -- Ed Avis ed@membled.com
  28. Re:too little, too late? by Corwn+of+Amber · · Score: 1

    Java is fast? Go try to run Azureus and weep.

    Oh, you do? And you think it is fast? Try utorrent on Windows or Transmission on OSX or KTorrent on Linux some time.

    --
    Making laws based on opinions that stem up from false informations leads to witch hunts.
  29. Re:too little, too late? by LarsWestergren · · Score: 1

    Java is fast? Go try to run Azureus and weep.

    The performance of a single benchmark is hardly indicative of a whole platform... you might as well say - "Linux is fast? Go try run Azureus and weep".

    --

    Being bitter is drinking poison and hoping someone else will die

  30. Re:too little, too late? by Anonymous Coward · · Score: 2, Interesting

    I'd be interested in knowing what .NET is clunky in comparison to. If you mention Apple's Objective C approach, you probably don't deserve to have an opinion here.

    WinForms as a library is a little old fashioned, but in combination with Visual Studio it's very slick and one of the most productive GUI environments around for building desktop applications. If you want to build fruity super-slick GUIs, you have WPF to do that (but the Visual Studio designer isn't as nice).

    There isn't a better platform on Windows for developing desktop or server applications than .NET around right now. Especially not since Visual Studio 2008 came out.

  31. Mono's WinForms 2.0 Implementation Completed by Anonymous Coward · · Score: 0

    s/Implementation/Infringement/

  32. mod parent up, please by Project2501a · · Score: 1

    thanks :)

    --
    ----
  33. Re:too little, too late? by Corwn+of+Amber · · Score: 3, Interesting

    Okay.

    "Java might be a great development platform, but the performance of java apps on the desktop is so pitiful they're painful to use."

    More?

    "Sever-side apps written in Java have great perfs, however, which is easily explained since they're meant to be run on a score of UltraSPARC hyperthreaded multicore CPUs that command a ton of RAM."

    Better that way, yes, you're right.

    --
    Making laws based on opinions that stem up from false informations leads to witch hunts.
  34. And how do you think Alito will feel about Linux? by leftie · · Score: 1

    Scalia? Roberts? Thomas?

    The final judgement by the Roberts & Co. is not likely to be one you're gonna like.

  35. Re:too little, too late? by neonux · · Score: 1

    Alternatively you can use Boo http://boo.codehaus.org/ , which has a MonoDevelop addin : http://monodevelop.com/Download

    Boo is an object oriented statically-typed programming language for .NET/Mono with a Python inspired syntax and a special focus on language and compiler extensibility.

    It actually has the feel of Python but has also all the features .NET can offer (contrary to IronPython)... and performance [Boo is on par with C# since it is statically-typed by default... you can use dynamic-typing where you really need it])

    --
    @neonux
  36. Re:too little, too late? by Anonymous Coward · · Score: 3, Interesting

    wish there were better alternatives, but C# + Gtk# + MonoDevelop is probably the most elegant development platform right now.

    You'll find that that's because C# was designed with an IDE in mind. Everything is statically typed (for intellisense) and the object oriented nature allows for easy code completion. Even look at the new LINQ (Allows you to query arrays/lists/etc. in memory)

    var result = from dataType in myCollection
                                                                where .....

    Notice how it the IDE will have enough information to offer you code completion the whole way though. Even though it'd be more intuitive to format it more like SQL.

    So in closing, Python can never even hope to have an IDE that matches C# or any language designed for the purpose.

  37. Re:too little, too late? by John+Betonschaar · · Score: 1

    The only thing slow about Java are the GUI libraries and the initial VM startup, for non-interactive stuff it is actually very fast. Anyone wanting to develop GUI applications using Java should use some kind of native GUI library through JNI.

  38. Re:too little, too late? by Anonymous Coward · · Score: 0

    I am SO hot for you now.

    PS: Yes, I'm a guy.

  39. WinForm by sproketboy · · Score: 1

    WinForms is so 2 years ago. It's MPF now. Here's a good article on the failings of .net.

    1. Re:WinForm by 0xdeadbeef · · Score: 1

      And by good, you mean several pages of vague, unsubstantiated fanboy whining, with only one paragraph about .NET that hints at, but does not name, the stupidity of InvokeRequired.

  40. Re:too little, too late? by Simon+Brooke · · Score: 4, Insightful

    Java is fast? Go try to run Azureus and weep.

    Oh, you do? And you think it is fast? Try utorrent on Windows or Transmission on OSX or KTorrent on Linux some time.

    People can write slow programs in any language. The question is, can moderately competent programmers write fast, efficient, maintainable programs in them? Pointing to one example is pointless. Back on topic, a quick check on Alioth will show you that overall, Java is faster than C#/Mono but uses more memory (although on some benchmarks the opposite is the case). It's also worth pointing out that although Java is not faster than C++ on any benchmark, it's substantially slower on only three. In general the performance of a program has much more to do with good design and good algorithms than it has to do with choice of language.

    --
    I'm old enough to remember when discussions on Slashdot were well informed.
  41. Re:too little, too late? by Alex+Belits · · Score: 1, Flamebait

    And Python/Qt on GTK+/Qt isn't "an extra layer" because? Because Mono is sitting between a language (Python) and widget set (GTK+) as an imitation of a Microsoft product designed to shield a language (sometimes Python but mostly C#) from a widget set and OS API (Win32).

    Except, of course, Win32 API is a disgusting piece of shit that should better be shielded from developers by something, and GTK+ is a widget set with a very straightforward design. Heck, Windows GTK+ port even runs on top of Win32. And so does Windows port of Qt, with absolutely no need for .Net, Mono or other additional layers.
    --
    Contrary to the popular belief, there indeed is no God.
  42. Re:too little, too late? by setagllib · · Score: 4, Informative

    It's a pretty thin layer compared to an entire extra base library + bytecode runtime + OS abstraction.

    PyGTK layers:

    Your code (python)
    PyGTK code (python)
    Python runtime (C)
    PyGTK->GTK binding (C)
    GTK+libc code (C)
    kernel (C)

    IronPython + Gtk# layers:

    Your code (python)
    IronPython code (python)
    IronPython runtime (CLI)
    Gtk# code (CLI)
    Mono base (CLI)
    Mono runtime (C)
    Gtk# -> GTK binding (C)
    GTK+libc code (C)
    kernel (C)

    That's a fun one to deploy, let me tell you.

    --
    Sam ty sig.
  43. Re:too little, too late? by Spy+der+Mann · · Score: 1

    Behold the power of marketing! This is the reason why Microsoft platforms are so popular. I still remember the days where .NET was marketed as the "next big thing" and courses and seminars were practically around every corner. But what is its real technical merit?

    This is one of the reasons why I hate Microsoft. If they invested at least 10% on development what they invest in marketing, this would be a much better place.

  44. Re:too little, too late? by Da+Fokka · · Score: 1

    The GP post named a reason why .NET is widely used: productivity. You do not respond to this argument but assert that anyone who like .NET must have been swayed by marketing. Admittedly, the GP post was sparse on argumentation but it was pretty informative compared to your rant.

    I've been developing in C#/.NET for the past four years and I really like .NET (and I do have some experience with Java). There are three arguments why I like .NET:
      - For many design scenario's, developing in .NET is incredibly productive.
      - In C#, it's possible to write code that's both conceptually nice and productive. I am aware that I'm begging for a flamewar here but in my opinion, Java's 'everything is an object' approach sounds clean at first but makes for some really clunky code.
      - Personally I prefer the look and feel of Visual Studio.

    I am aware that the last argument is entirely depending on taste and the second to last argument is at least partially a matter of taste. But the main reason why .NET is used quite widely is because of productivity.

  45. Timing is everything by jalefkowit · · Score: 1

    Six months after Microsoft's CTO declares WinForms dead, Mono supports it. That's timing, baby!

    1. Re:Timing is everything by drinkypoo · · Score: 1

      Actually, that's wonderful timing. It means that they provide support for legacy applications but don't actually (in this case) help Microsoft sell a current product. Did you think those WinForms programs were going to disappear now that WinForms was declared dead?

      --
      "You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
  46. Re:too little, too late? by Anonymous Coward · · Score: 0

    C# (under the .NET CLR, at least, I can't speak for Mono) is jit-compiled to machine language before execution. It's stored in the file as "bytecode" (IL), but it's not run that way.

  47. WinForms 3.0? by Anonymous Coward · · Score: 0

    I guess this means that Microsoft will come out with WinForms 3.0 now. Good luck playing catchup!

  48. Re:too little, too late? by DuckDodgers · · Score: 1

    Java loads a huge number of libraries at startup, and then as it translates its bytecode into machine code there is a lag. So the code startup is a very royal pain in the ass.

    But once your Java application or server is running, the performance of a decent Java app can be within 20% of C++, which is plenty quick and much faster than any scripting language equivalent. You don't need a commercial grade server.

    I'm not saying Java's the greatest language. But a lot of people seem to think the language is stuck in 1995.

  49. One word by Anonymous Coward · · Score: 0

    "MonoDevelop is probably the most elegant development platform right now"

    not even close... one word: EiffelStudio

  50. Re:too little, too late? by Corwn+of+Amber · · Score: 0
    Not only code startup... I meant to say that Java programs, even JIT compiled, even natively compiled, are teh suck for perfs.

    In the case of Azureus, it's just a case of hammer meets screw : an app that runs quasi continuously, gobbling up cycles and RAM like crazy, all because it's coded in Java so that the devs get to write it once and debug it everywhere. Or package it everywhere, with that process' own problems.

    It just should not have been programmed in Java, especially since it's supposed to run continuously (no one stops BitTorrent clients after downloading just one linux ISO. That's the story for the suits, remember? We're among ourselves here.).

    And it's not like a BT client sits idle all the time! HEAVY I/O there, from/to disk and network. So, inefficient code that gets indirected four times before any actual operation running all the time doing heavy I/O : well, that explains the need for

    a score of UltraSPARC hyperthreaded multicore CPUs that command a ton of RAM.


    Not that Java is bad, it's just Not For The Desktop. A fast, portable lib that abstracts everything platform-specific? Qt.

    Not even beginning to speak about how my hackintosh beachballs for MINUTES when loading webpages with applets...

    Java is for servers. Servlet. Repeat after me. Serv-let. A ton of RAM and two hundred "hyper"threads running in one hundred cores on fifty CPUs. THAT runs Java fast enough. On the desktop, forget it. Applets take hours to load, apps can be written once, but have to be debugged everywhere, several indirection layers to each and every instruction, ugly interfaces that NEVER EVER look right, and can't update over once a second (and thus feels sluggish with a load of 0,1)...

    Now, writing JSPs, on the other hand, that is sweet. Powerful and ... dunno, it just feels good.

    Oh, about the 20% : I believe you. 20% of perf of equivalent C++ code, that's a 80% perf loss, it's about right. It's okay, I would not want to write C++ Server Pages. And since they would need five times more code, they'd have about the same perfs on the same hardware.
    --
    Making laws based on opinions that stem up from false informations leads to witch hunts.
  51. Re:too little, too late? by AmaDaden · · Score: 1

    Very true. Because of this Java's current market is web sites. I'm not referring to applets but rather JSPs. It runs as a server so the start up time is a non-issue. Since it is being used to generate HTML and not really render anything in the native environment it does not touch the GUI libraries. Because of this is makes an excellent platform for web apps. Off the top of my head I know it's used by ebay and a few banks. It's also the back bone of the Google web toolkit so it's what runs gmail and several other google things. By design it can be written such that you can design a web site so that you can't tell it's running JSPs so it's hard to really tell who is using it.

  52. latency != perf by Corwn+of+Amber · · Score: 1

    Yeah, but a GUI app that has an FPS of one and below is UNUSABLE CRAP.
    That's the case of Azureus.
    That's not the case of, say, Paint.NET (Bad example, I know, it's just the most widely-used .NET program vs the most widely-used Java program).

    Benchmarks don't mean shit. .Net code does not take an age and an half to load 150 megs of libs and gobble up about as much RAM. It does not ruin my browsing with its "Java runtime loading, go plant some coffee trees and by the time you've harvested, dried, fermented, roasted, shipped, ground, and used them, I might have finished loading, unless it's near harvest season already; in which case, come back next year when your applet gives its ridiculous ripple effect on half the webpage so that it's illegible save for the 200 pixels above the smeared text".

    I win.

    --
    Making laws based on opinions that stem up from false informations leads to witch hunts.
  53. Re:too little, too late? by mweather · · Score: 1

    Tcl/Tk?

  54. Re:too little, too late? by Anonymous Coward · · Score: 0

    .NET got to learn from Java's mistakes, so the most egregious problems are not found there.

    A few things that help improve performance and memory use include:

    * Value types (instead of limitations on objects).
    * Generics supported in the VM (code sharing + code paths optimized for the type; On Java there are no generics in the VM).
    * Stack-allocated objects.
    * P/Invoke (avoiding the whole JNI)
    * No mandatory exception catching, less bloat.

    Value types and generics are probably responsible for a large chunk of memory savings. This means that small data structures do not need to be wrapped in "objects", they are represented in the same way that a C struct is represented.

  55. Re:too little, too late? by wootest · · Score: 1

    LINQ's order would be logical even if IDEs weren't even involved, since it leads you to define every variable before you use them, which is the default in every other place you use variables. If they had used SQL's order, this basic logical assumption would have been broken. (I'm not necessarily disagreeing with anything the parent said, I just felt this had to be pointed out.)

  56. Re:too little, too late? by aldousd666 · · Score: 1

    I have the same problem with python. Semantic indentation. It's a genuinely dumb idea in my opinion. Other than that, sometimes you need static type checking and compiled (not interpreted) code sometimes you don't. Indentation aside if you want higher performance between these two you'd go for a compiled tongue. If you want something quick to write, and are ok with it being a bit slower running (and have already figured out when to hit the tab key,) then perhaps python is your beast. I don't think that C# qualifies as 'elegant' though unless your comparing it to C++, by which most languages are elegant. :D

    People decrying the mono port of winforms aren't obviously in the target audience of developers. Those of us who are, (winforms developers for windows) are very happy that mono is making this leap. I'd think the Linux Zealots(tm) should be happy about this seeing as how there is one more way now in which the friction caused by moving from windows to linux has been greatly reduced. Unless of course, they just LOVE being in an exclusive club where the guy with the most technical skills invested in using his operating system on a daily basis wins.

    --
    Speak for yourself.
  57. Re:But can I actually use it for anything? No... by Anonymous Coward · · Score: 0

    You forgot a ')' :/

  58. Re:But can I actually use it for anything? No... by Rysc · · Score: 1

    He also said ForEach, which is a syntax error. "foreach" is correct for c#. Case matters.

    --
    I want my Cowboyneal
  59. Re:too little, too late? by benwaggoner · · Score: 1

    For real designer-style design of WPF/Silverlight apps, you want to be using the Expression Studio instead (particularly Design and Blend).

  60. Re:too little, too late? by ADRA · · Score: 1

    Swing / AWT in modern JVM's has been improving leaps and bounds over previous versions. One of the really really big hinderances of java's GUI responsiveness is that many developers don't thread tasks that take a fairly lengthy time to perform when executing on the event dispatch thread!!!!

    Just think about this:

    GUI event
            V
    Perform seconds Long DB query
            V
    Show results on screen

    Unless you break into a new thread to manage the DB update, thats SECONDS of time that the GUI will not redraw anything but native widgets that the OS manages.

    Bad programming can be linked to many Java GUI shortfalls, though it still isn't a desirable platform for 'high end' gaming, and only adequite for 3d simulation.

    --
    Bye!
  61. Just five more years by jgoemat · · Score: 1

    And we'll have WPF support...

  62. Re:too little, too late? by LingNoi · · Score: 1

    What a crap comment why did you even both?

    1) Do you really think I am going to take your word on if it's productive or not?

    2) So the only reason you think .NET is a better solution is because you like the text editor?

    Give me a break, come back with some better arguments and maybe I could take you seriously, right now you sound like a marketing drone. Saying "developing in .NET is incredibly productive" is not a reasonable argument.

  63. Re:too little, too late? by Anonymous Coward · · Score: 0

    And thus is the true intellectual and social maturity level of slashdot revealed.

    In the 21st century, the fact that you like technology does not automatically make you smart.

  64. Re:too little, too late? by nuzak · · Score: 1

    > so that the devs get to write it once and debug it everywhere

    "Write once Debug Anywhere". No, you're not repeating that like a mantra or anything. Can you name even one time this has held true for Java in your experience? For bonus points, show me how this does not apply to some other language.

    --
    Done with slashdot, done with nerds, getting a life.
  65. Re:too little, too late? by nuzak · · Score: 1

    > In the 21st century, the fact that you like technology does not automatically make you smart.

    I like. Yoink!

    --
    Done with slashdot, done with nerds, getting a life.
  66. Re:too little, too late? by Da+Fokka · · Score: 1
    What a crap comment why did you even both?

    1) Do you really think I am going to take your word on if it's productive or not?


    Okay, I'll bite.

    Of course productivity is a good argument. In fact, it is *the* most important argument. A platform is a tool, enabling a programmer to develop solutions to a specific problem. If anything it should be productive because that's it's main purpose.

    What you probably meant is that I did not support the productivity argument with examples, which is a valid point. Therefore some examples:

    * The Form designer works beautifully. I have developed GUI applications in Eclipse and Visual Studio is by far more productive.
    * Linq is a nice addition to .NET 3. Separating the query language from the data provider is a solid idea. The Linq implementation works very well.
    * I like C# as a language because it is possible to write clean code that also is productive.

    To be fair, there are some drawbacks as well.

    * .NET is not free, either as in beer or as in speech. That is not a problem for our customers but there are many scenarioÂs where .NETÂs closed nature is a serious drawback.
    * .NET is not truly multiplatform. Mono is useful in some situations but .NET is far from write once, run everywhere. Anyone claiming otherwise is lying.


    2) So the only reason you think .NET is a better solution is because you like the text editor?

    An IDE is more than a text editor. Software Development is a vast field of work with many different tasks. The idea that plain text files are the most optimal way to accomplish all these tasks is quite frankly ludicrous.

  67. Re:too little, too late? by Anonymous Coward · · Score: 0

    And Java is a bloated pig.
    Not really. The real problem is it doesn't support many of the nice features of C#, such as generics that weren't tacked on as an afterthought, or nice syntax for delegates, or accessor methods that make actual syntactic sense... I haven't really used a lot of C# so I can't name more examples, but I'm sure there are more... A lot of them seem to be things that you can do with Java still fairly easily, but on C# it's just better done.
  68. Re:too little, too late? by Anonymous Coward · · Score: 0

    Same thing for Mono on x86, but I think the complaint is that Mono doesn't generate as good code as MS's VM or the JVM. Generating native code that's functionally equivalent to bytecode is not that hard, but generating code that is efficient is much harder. Sun, IBM, and Microsoft have put lots of money into getting their respective VMs fast, and it wouldn't surprise me if Mono isn't as polished.

  69. Re:too little, too late? by Slime-dogg · · Score: 1

    Because Mono is sitting between a language (Python) and widget set (GTK+) as an imitation of a Microsoft product designed to shield a language (sometimes Python but mostly C#) from a widget set and OS API (Win32). Python gets compiled to bytecode, which is then read by an interpreter that sits between it and the widget set.

    The .NET version sees Python getting compiled to IL (bytecode), which is read by the Mono runtime.

    It looks like you get the exact same thing, honestly. All it comes down to is which platform is best for actual compilation.
    --
    You need to restart your computer. Hold down the Power button for several seconds or press the Restart button.
  70. Re:too little, too late? by rmdir+-r+* · · Score: 1

    The performance of a single benchmark is hardly indicative of a whole platform... you might as well say - "Linux is fast? Go try run Azureus and weep".
    You are right. But as far as I can tell, the GP is also correct, there are no pleasant, responsive desktop Java apps. And Azureus and Limewire are certainly the flagship Java desktop applications right now.
  71. Psychos at Mathworks (dweep!, dweep! dweep!) by Latent+Heat · · Score: 1
    I guess the folks at Mathworks with their Matlab product are user-torturing psychos, because the UI to Matlab is Java Swing. Not just the Command Window and M-file Editor, a Matlab Figure Window where you do your pretty plots is a JFrame as well.

    Ever notice the Matlab startup latency? It is the same such thing as the Java startup latency because that is what you are waiting on.

    Come to think of it, I saw a Java Coffee Cup on the Toolbar once when Maple was slow to load. More psychos! Dweep! Dwepp! Dweep!

  72. Re:too little, too late? by nguy · · Score: 1

    At the risk of feeding the trolls, in what way is C# + Gtk# + MonoDevelop less of a bloated pig than Java?

    Swing attempts to reimplement everything in Java; what it can't reimplement in Java, it reimplements in C. Gtk# is a thin binding of Gtk+ to C#.

    Java is actually a very fast,

    Actually, it is not. Java lacks some fundamentally important constructs (e.g., multidimensional arrays) that mean that a lot of code simply cannot be written efficiently in Java no matter how you try. If you haven't run into that, it's simply because your needs are modest.

    extremely productive platform to develop on.

    I can put together a high quality Linux desktop application in Monodevelop in minutes. In Java and Swing, it's impossible to put together a high quality desktop app at all.

    with a top-shelf toolchain (in fact several)

    If you think that crap like Eclipse or NetBeans is "top-shelf", you really haven't used a good IDE in your life.

  73. Re:too little, too late? by LarsWestergren · · Score: 1

    there are no pleasant, responsive desktop Java apps.

    Eclipse, Netbeans, IntelliJ... I've used loads.

    --

    Being bitter is drinking poison and hoping someone else will die

  74. Re:too little, too late? by samkass · · Score: 1

    Java is actually a very fast,

    Actually, it is not. Java lacks some fundamentally important constructs (e.g., multidimensional arrays) that mean that a lot of code simply cannot be written efficiently in Java no matter how you try. If you haven't run into that, it's simply because your needs are modest.


    Actually, I'd say if you have, it's because your needs are extremely specialized. Considering our app is a massively distributed live collaboration system deployed in Iraq that handles gigabytes of data, I don't think our needs are "modest".

    I can put together a high quality Linux desktop application in Monodevelop in minutes. In Java and Swing, it's impossible [for me] to put together a high quality desktop app at all.

    I corrected your statement for you, kthx. I have two suggestions for you, if you care: 1. If you insist on sticking with Swing as you seem so intent on doing, try NetBeans application platform. 2. If you're willing to try an alternative to Swing, try Eclipse Rich Client platform. If you really like things like twiddling bits with slightly magnetized rusty spoons, by all means continue to try to code directly to Swing.

    If you think that crap like Eclipse or NetBeans is "top-shelf", you really haven't used a good IDE in your life.

    My personal favorite is IntelliJ IDEA, which I find more productive than any other IDE I've ever used. These include everything from THINK Pascal in the 80's to Visual Studio. And while I'm not comfortable in Eclipse, I know a lot of people who are very productive in it. At least Java is not hobbled by having one dominant IDE vendor creating a one-size-fits-all environment.

    Finally, I'd like to point out that I asked why Java was more of a bloated pig than the C# platform, not why you find certain features better for your particular use case. It's fun to Java-bash on Slashdot, but I get the sense most folks who do it haven't actually done serious Java development in years.

    --
    E pluribus unum
  75. Re:too little, too late? by Ilgaz · · Score: 1

    I got Virtual PC 7 on Quad G5 2500 (lots of RAM) and it runs Windows XP Sp2 (now 3).

    Of course not expecting anything, I wondered the new Widgets on Java 6 and how easy it is if I ever need users to install Java 6 on Windows. (for applet).

    Some would call me mad for this, I actually installed Java 6 on Virtual PC 7 emulating a P3 500. It actually installed fine in matter of 3-5 minutes and I didn't even bother to remove its "Java update check" from startup. It doesn't take a gigantic space too.

    As MS and Nokia, my cell phone vendor did everything to force me, while I was not busy, I dared to install NET frameworks. I particularly remember version 3 (the current one?) taking 55 MINUTES to install and taking up gigantic space. I also had to install its updates since I can't dare to run Windows without any updates. Imagine a virtual PC getting virused and spamming etc. people. (It can actually happen).

    BTW, that fake PC with actual P3 500 with 512MB RAM can run a full feature program like Vuze client. Of course, not video playback etc. When I have 5 spare hours, I can try a non bloated thing like a .NET application. :)

    It is also unbeliavable that people dare to compare .NET to Java. I respect to the insane amount of work by the developer of Winforms port (not to Icaza,really) but come on, where is a Nokia .NET requiring Application for Linux? Isn't that the idea of a framework? Where is a single OS X Application which could be ported easily thanks to .NET/Mono?

  76. Re:too little, too late? by revlayle · · Score: 1

    IL gets JITted also (not sure if python bytecode goes thru a JIT or not), even in mono, IIRC