text: Mono's WinForms 2.0 Implementation Completed 164
  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."
  This will be a big help (Score:4, Interesting)
  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.
  Re: (Score:2)
  Re:This will be a big help (Score:4, Insightful)
  Re: (Score:2)
  Re:This will be a big help (Score:4, Interesting)
  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.
  Re: (Score:2)
  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 gi
  Re: (Score:2)
  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.
  Re: (Score:2)
  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
  Re: (Score:2)
  Re: (Score:2)
  Re: (Score:2)
  It. Just. Works.
  Re:This will be a big help (Score:4, Funny)
  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.
  Re: (Score:2)
  Re: (Score:3, Funny)
  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
  Re: (Score:2)
  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 f
  Re: (Score:2)
  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.)
  But can I actually use it for anything? (Score:5, Insightful)
  By that standard linux isn't safe to use either (Score:2)
  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.
  And how do you think Alito will feel about Linux? (Score:2)
  The final judgement by the Roberts & Co. is not likely to be one you're gonna like.
  Re: (Score:2)
  Re: (Score:2)
  Worse, call the layers.
  The police are to busy raiding trailer parks, writing traffic tickets, busting drug users, and harassing kids.
  Re:But can I actually use it for anything? (Score:5, Funny)
  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...
  Re: (Score:2)
  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.
  Re: (Score:2)
  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 [tiobe.com].
  Re: (Score:2)
  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
  This is especially noticed when you compare the searches "c# programming" on google which gives 640,000 hits while
  Re: (Score:2)
  "This announcement has been long awaited ... (Score:5, Funny)
  All five of them.
  Re: (Score:2)
  Re: (Score:2, Informative)
  Sorry.
  Re: (Score:2)
  Re: (Score:2)
  Fixed that for you.
  Re:"This announcement has been long awaited ... (Score:5, Funny)
  Mono is good stuff (Score:2)
  % export MONO_IOMAP=all
  % mono my_program.exe
  You might be surprised how well it works.
  Re: (Score:2)
  Re: (Score:2)
  Still three left.
  Re: (Score:2)
  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.
  Re: (Score:2)
  Very nice (Score:5, Funny)
  I know what you mean -- ELF just doesn't hold a candle to Perl.
  Re: (Score:2, Informative)
  The fact that python can run under
  SWF GUI builder? (Score:3, Interesting)
  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
  Re: (Score:2)
  But why the Win32 style in WinForms? (Score:3, Interesting)
  From the blog:
  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.
  Re:But why the Win32 style in WinForms? (Score:4, Interesting)
  This work on WinForms is intended to provide a way to run
  Re: (Score:2)
  Re: (Score:3, Funny)
  Re: (Score:2)
  Re: (Score:2)
  I understand that Winforms 2 is catching up with Gtk and every other toolkit though: it does widget layout for you now! (wow!) (sarcasm).
  Re: (Score:2)
  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
  Re:But why the Win32 style in WinForms? (Score:4, Insightful)
  If you don't want to be compatible with Win32, use GTK#.
  Re: (Score:2)
  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
  Re: (Score:2)
  Timing is everything (Score:2)
  Six months after Microsoft's CTO declares WinForms dead [blogspot.com], Mono supports it. That's timing, baby!
  Re: (Score:2)
  Just five more years (Score:2)
  Re: (Score:2, Insightful)
  Re: (Score:2, Interesting)
  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 Window
  Re: (Score:2)
  Re: (Score:2)
  Re: (Score:2)
  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.
  Re: (Score:2)
  I've been developing in C#/.NET for the past four years and I really like
  - For many design scenario's, developing in
  Re: (Score:2)
  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
  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
  Re: (Score:2)
  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 so
  Re:too little, too late? (Score:4, Insightful)
  Re:too little, too late? (Score:5, Informative)
  Please stop conflating Mono and
  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.
  Re: (Score:3, Interesting)
  Re:too little, too late? (Score:4, Insightful)
  Personally I'd rather work directly in Python/Ruby on GTK/Qt than go through an extra layer that is
  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#.
  Re: (Score:2, 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).
  .Net,
  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
  Re: (Score:2)
  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.
  .NET version sees Python getting compiled to IL (bytecode), which is read by the Mono runtime.
  The
  It looks like you get the exact same thing, honestly. All it comes down to is which platform is best for actual compilation.
  Re:too little, too late? (Score:5, Informative)
  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.
  Re: (Score:2)
  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).
  Re: (Score:2)
  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 re
  Re: (Score:2)
  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".
  Re: (Score:3, Interesting)
  "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.
  Re: (Score:2)
  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 i
  Re: (Score:2)
  "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.
  Re: (Score:2)
  I like. Yoink!
  Re: (Score:2)
  Re: (Score:2)
  Re: (Score:2)
  Re: (Score:2)
  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 ti
  Re:too little, too late? (Score:5, 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 [debian.org] 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.
  Re: (Score:3, Interesting)
  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
  Re: (Score:2)
  Re: (Score:2)
  I have nothing like you describe when working with C++ under Visual Studio.
  Re: (Score:2, Informative)
  Re: (Score:2)
  Re: (Score:3, Informative)
  Re:Would be awesome... (Score:5, Informative)
  -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.
  var monkeys = from animal in myAnimalsCollection
  where animal.Type == monkey
  select new {animal.ID, animal.Name, animal.BirthDay};
  foreach(var monkey in monkeys)
  Re:Would be awesome... (Score:5, Informative)
  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.
  Re: (Score:2)
  The LINQ syntax does that. It's not just a fancy way of iterating over an in-memory collection.
  Re:Would be awesome... (Score:5, Informative)
  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.
  Re: (Score:2)
  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 fil
  Re: (Score:2)
  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.
  Re: (Score:3, Insightful)
  Re: (Score:2)
  So pointing to Python when you want to develop in a static language doesn't make for a good argument.
  Re: (Score:2)
  Re:Would be awesome... (Score:5, Informative)
  All the usernames on a Unix system:
  Dates from an SQL table:
  Search Google for "list comprehensions" and print the text of every "<a href" tag on the page:
  Basically, anything Python can loop across works inside a list comprehension. It's a basic construct of the language.
  Re: (Score:2)
  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:
  Re: (Score:2)
  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
  Re: (Score:2)