Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×
Software Linux

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 discussion has been archived. No new comments can be posted.

Mono's WinForms 2.0 Implementation Completed

Comments Filter:
  • by nguy ( 1207026 ) on Wednesday May 14, 2008 @12:40AM (#23399220)
    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.

  • by malevolentjelly ( 1057140 ) on Wednesday May 14, 2008 @01:09AM (#23399356) Journal
    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.
  • Re:Very nice (Score:2, Informative)

    by jamesh ( 87723 ) on Wednesday May 14, 2008 @01:11AM (#23399360)
    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 :)
  • by batkiwi ( 137781 ) on Wednesday May 14, 2008 @01:27AM (#23399422)
    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
  • by setagllib ( 753300 ) on Wednesday May 14, 2008 @01:58AM (#23399550)
    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.
  • by Anonymous Coward on Wednesday May 14, 2008 @03:45AM (#23400006)
    Python containers can read from whatever source they are designed as they are iterated. LINQ seems to be syntactical sugar not unlike list comprehensions.
  • by Anonymous Coward on Wednesday May 14, 2008 @03:45AM (#23400010)
    Ctrl-A, Ctrl-K, Ctrl-F
  • by makapuf ( 412290 ) on Wednesday May 14, 2008 @05:02AM (#23400308)
    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.

  • by Anonymous Coward on Wednesday May 14, 2008 @07:19AM (#23400828)
    Any language that requires me to pay attention to white-space as much as Python should be dragged into the streets and beaten.

    Sorry.

  • by setagllib ( 753300 ) on Wednesday May 14, 2008 @08:26AM (#23401206)
    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.
  • by Just Some Guy ( 3352 ) <kirk+slashdot@strauser.com> on Wednesday May 14, 2008 @10:05AM (#23402338) Homepage Journal

    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.

Thus spake the master programmer: "After three days without programming, life becomes meaningless." -- Geoffrey James, "The Tao of Programming"

Working...