Slashdot Log In
Mono's WinForms 2.0 Implementation Completed
Posted by
kdawson
on Tuesday May 13, @11:21PM
from the do-not-confuse-with-wind-farms dept.
from the do-not-confuse-with-wind-farms dept.
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."
Related Stories
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
Full
Abbreviated
Hidden
Loading... please wait.

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.
Reply to This
Re:This will be a big help (Score:4, Insightful)
Reply to This
Parent
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.
Reply to This
Parent
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.
Reply to This
Parent
But can I actually use it for anything? (Score:5, Insightful)
Reply to This
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...
Reply to This
Parent
"This announcement has been long awaited ... (Score:5, Funny)
All five of them.
Reply to This
Re:"This announcement has been long awaited ... (Score:5, Funny)
Reply to This
Parent
Very nice (Score:5, Funny)
I know what you mean -- ELF just doesn't hold a candle to Perl.
Reply to This
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
Reply to This
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.
Reply to This
Re:But why the Win32 style in WinForms? (Score:4, Interesting)
This work on WinForms is intended to provide a way to run
Reply to This
Parent
Re:But why the Win32 style in WinForms? (Score:4, Insightful)
If you don't want to be compatible with Win32, use GTK#.
Reply to This
Parent
Re:too little, too late? (Score:4, Insightful)
Reply to This
Parent
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.
Reply to This
Parent
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#.
Reply to This
Parent
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.
Reply to This
Parent
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.
Reply to This
Parent
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
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)
Reply to This
Parent
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.
Reply to This
Parent
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.
Reply to This
Parent
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.
Reply to This
Parent