More Mono proof of concept extensions to C#.
As part of the list of things I would like to see in C# is support for tuples in the language. They would show up in a few places, for example, to return multiple values from a function and assign the results to multiple values at once.
In recent versions of the framework there is a new datatype called Tuple, it is used to hold N values, the Tuple for N=2 looks like this:
public class Tuple<T1, T2> { public Tuple (T1 v1, T2 v2); T1 Item1 { get; set; } T2 Item2 {get; set; } }
The tuple
patch extends the C# language to allow multiple variables
to be assigned from any Tuple The above would assign the four values to user, password,
host, port and path from the call to ParseUri. ParseUri
would be declared like this:
In addition to handling Tuples, I would like to extend this
to support collections and IEnumerables as well, for example:
The above would store my_array [0] in section, and my_array
[1] in header.
If the last element of a tuple is a collection, it could
store the rest of the values from the collection or enumerable
in the last element:
The above would store the first item in the QueryString
into query, the second into page, and the rest into the
other_options array.
Tuple creation syntax:I would like to add nicer
support for creating Tuples as return values, it could just
mirror the assignment syntax.
Handling well-known types: In addition to Tuple,
ICollections and IEnumerables, perhaps the compiler should
know about older versions of Tuple like DictionaryEntry.
Using statements: Today the using statement is
limited to a single resource, with multi-valued return types,
it could handle multiple resources at once, like this:
(user, password, host, port, path) = ParseUri (url);
Tuple<string, string, string, int, string> ParseUri (string url);
Future Work and Ideas
(section, header) = my_array;
(query, page, other_options) = Request.QueryString;
ParseUri ()
{
...
return (user, password, host, port, path);
}
using (var (image, audio, badge) = iphoneApp.GetNotifications ()){
// use IDisposable image
// use IDisposable audio
// use trivial int badge
}
Posted on 23 Dec 2009
As I mentioned a few days ago, there is a new covenant form Microsoft for Moonlight, it has been posted.
Posted on 22 Dec 2009
Cena Linuxera/Monera hoy (Diciembre 22) en el bar/restaurante del Covadonga a las 7pm. Para todo p�blico (incluso talibanes).
Direcci�n: Puebla 121 cerca de el Metro Insurgentes.
Posted on 22 Dec 2009
We have discussed in the past adding support to C# to support string interpolation. I have cooked a patch that allows C# developers to embed expressions inside strings, like this:
var a = 'Hello {name} how are you?';
Single quotes are used for strings that will have expressions interpolated between the braces. The above sample is equivalent to:
var a = String.Format ("Hello {0} how are you?", name);
Currently the patch supports arbitrary expressions in the braces, it is not limited to referencing variables:
var a = 'There are {list.Count} elements';
This notation can be abused, this shows a LINQ expression embedded in the string:
var a = 'The {(from x in args where x.StartsWith ("a") select x).FirstOrDefault ()} arguments';
I am not familiar with what are the best practices for this sort of thing in Python, Ruby and other languages. Curious to find out.
Update: after the discussion on the comments the syntax was changed to use $" instead of the single quote to denote a string that will be interpolated. Now you will write:
var a = $"There are {list.Count} elements"; var greeting = $"Hello {name} how are you?";
The updated patch is here.
Posted on 20 Dec 2009
Today we are making a few of announcements:
Update: Sean Michael Kerner covers the announcement and talks to Brian Goldfarb from Microsoft.
Update 2: New covenant from Microsoft has been posted.
Moonlight 2 is a superset of Silverlight 2. It contains everything that is part of Silverlight 2 but already ships with various features from Silverlight 3:
We are moving quickly to complete our 3 support. Microsoft is not only providing us with test suites for Moonlight but also assisting us in making sure that flagship Silvelright applications work with Moonlight.
When it comes to prioritization of Silverlight 3 features, we are going to focus on getting the major applications that users want to use first. Sunday Night Football, the Winter Olympics and Bing's Photosynth support.
Smooth streaming works really well. Visit the site and test the immediate seek, and play with the bandwidth limiter to see how Silverlight/Moonlight can adapt the video quality based ont he bandwidth available:
Moonlight 2 is the result of love and passion to bring the Silverlight runtime to Linux.
Moonlight 2 engine consists of 142,000 lines of C/C++ code and 320,000 lines of C# code (125,000 lines of code came from Microsoft's open source Silverlight Controls).
Moonlight is built on top of Mono 2.6 runtime, Cairo and Gtk+ and today supports Firefox on Linux. We are hard at work to support Google Chrome on Linux as well.
We worked with Microsoft to make sure that Moonlight was available to everyone on Linux and BSD.
Culturally, we started on two opposite ends of the software licensing spectrum. The covenant that was issued for Moonlight 1 and 2 covered every user that used Moonlight, but only as long as the user obtained Moonlight from Novell. This is a model similar to how Flash is distributed: there is a well-known location where you get your plugin.
The open source world does not work that way though. In the open source world, the idea is to release source code and have distributions play the role of editors and curators and distribute their own versions of the software.
Microsoft's intention was to expand the reach of Silverlight, but the original covenant was not a good cultural fit. We worked with the team at Microsoft (Brian Goldfarb and Bob Muglia's teams) to make sure that the covenant would cover the other Linux distributions.
The new patent covenant ensures that other third party distributions can distribute Moonlight without their users fearing of getting sued over patent infringement by Microsoft.
There is one important difference between the version of Moonlight that will be available from Novell and the version that you will get from your distribution: the version obtained from Novell will have access to licensed media codecs.
Third party distributions of Moonlight will be able to play unencumbered media using Vorbis, Theora and Ogg inside Moonlight (and Silverlight), but for playing back other formats, they will have a few options:
As readers of my blog know, the Silverlight 4 feature set is something that is very interesting to me.
If our experience with the positive feedback that we have gotten from MonoDevelop is of any indication Silverlight 4 will enable a whole new class of cross-platform .NET application development to take place. Like nothing we have seen before.
We are thrilled to be working with Microsoft to make sure that we can improve, fix and fine tune Moonlight to meet those requirements and to do so in a purely open source fashion.
Update: Team Silverlight blogs.
Posted on 17 Dec 2009
A little hidden feature from our release of MonoDevelop 2.2 and Mono 2.6 earlier this week was MonoDevelop's support for debugging Moonlight applications:
Moonlight debugging is a feature that came together very recently, but we delayed Mono and MonoDevelop's release to make sure that we shipped with it.
To debug, merely open your Moonlight/Silverlight project, set some breakpoints, and run your program (F5). Your app will be debugged.
I did a quick screencast and annotated it:
Posted on 17 Dec 2009
About nine months ago we released MonoDevelop 2.0 and Mono 2.4. Today we are releasing the much anticipated upgrades to both. Mono 2.6 and MonoDevelop 2.2.
For those in a hurry, binaries and source are available from:
And if you want a quick mnemonic to remember this release, just think debugger! and cross platform.
The Mono team and contributors worked on this release like we have never worked before. Thanks to everyone that reported bugs, filed feature requests, contributed code and helped newcomers with Mono.
Mono 2.6 highlights:
MonoDevelop 2.2 highlights (screenshots here and here):
The team is on #mono, #monodev and #monodevelop on irc.gnome.org fielding any questions you might have.
Update: the diffstat results for Mono 2.4 to 2.6 on a 2 million line patch:
7208 files changed, 1392400 insertions(+), 440016 deletions(-)
About a million lines of new code in Mono.
For MonoDevelop the patch is 750,000 lines and:
2427 files changed, 464284 insertions(+), 120124 deletions(-)
Roughly 300k lines of new code.
Posted on 15 Dec 2009
I felt like an archaeologist trying to formulate a theory of what had happened there. I loved the feeling of trying to put together the story from a partial puzzle.
The patent infringement lawsuit against Apple was a list of accusations and patent lists that Nokia claims that Apple infringes with their iPhone. But behind the background information provided in the legal document and the list of ways in which Nokia felt Apple had wronged them, it was difficult to put together a narrative. Scanning the discussion forums for clues did not lead to anything significant beyond the superficial analysis.
As a software developer, and in particular a Linux software developer, I have mixed feelings about this lawsuit. Apple has not been exactly a model citizen when it comes to interoperability between Apple and Linux products while Nokia has embraced Linux, embraced open source development and contributed to the universal pool of software. But I also found myself enjoying using my iPhone and building software for the iPhone.
I wanted to give both companies the benefit of the doubt. What had happened between these two companies that had forced Nokia to sue Apple?
There were various possibilities.
The lack of immediate response from Apple suggested that they were caught unprepared, but that was just a small chance. Probably the companies had been on negotiations and these negotiations broke off when they could not reach an agreement. The iPhone had taken the world by surprise, nobody had seen it coming and nobody had envisioned that Apple would not merely do an incrementally better phone, but it would be many times better than anything available at the time.
When Apple launched the iPhone, Steve Jobs wanted everyone to know that iPhone's innovations were patented and that Apple planned to prevent others from copying those ideas.
Apple's response to Nokia is a very educational document. It reads as a crash course on patent litigation when it lays out Apple's strategy for their defense. It is also a crash course on the patent system and how corporation work with international bodies to develop technology. But most importantly for me, it fills some the gaps of what happened behind the scenes.
We do not know yet which company approached the other first about patent infringement. It could have been someone on Nokia's board that decided to extract some revenue from their patents to compensate for their business losses or it could have been initiated by Apple's team notifying Nokia that their new phones used some idea from their phones.
What does emerge from Apple's reply is that Nokia tried to use the patents that they had pledged to license under reasonable terms to get themselves rights to Apple's juicier iPhone innovations. Nokia's pledged patents might be formidable patents and key to the implementation of certain cellular and WiFi communications, but by being pledged under F/RAND terms to various industry consortia they lost a significant amount of value. But what they lost in value, they made up in volume. This is in stark contrast with Apple's un-pledged, pristine, fully proprietary patents that Nokia and everyone but China are trying to get rights to.
Posted on 12 Dec 2009
Marek has just announced that Mono's C# compiler 4.0 is complete.
To try it out, get the modules mono and mcs from our Anonymous Subversion Repository and build Mono like this:
$ mkdir $HOME/mono4 $ ./autogen.sh --prefix=$HOME/mono4 --with-profile4=yes $ make && make install
Posted on 09 Dec 2009
This was fast! Wallace B. McClure has written the first e-book on getting started with Mono on the iPhone with MonoTouch.
This is a short e-book, 42-pages in size, but it is also very cheap, it is only 6.99 USD and will help you get started in no time with MonoTouch.
Here is the table of contents:
Table of Contents
iPhone Requirements 2
Development Strategies 3
Web Development with ASP.NET 3
MonoDevelop and MonoTouch 4
Visual Studio .NET ➪MonoDevelop 4
Classes in MonoTouch 4
What Is MonoTouch? 4
Namespaces and Classes 5
Introduction to Development on the Mac with MonoDevelop 6
Interface Builder 8
Outlets 10
Actions 14
Deploying to an iPhone 15
Mapping 17
MKMapView 17
The Application 18
Annotating the Map 20
Debugging 21
Interacting with Other Applications 22
UIPicker 22
NSUrl 24
UIAlertView 26
UITableView 26
DataSource 27
Binding Data to a UITableView 29
Customizing UITableView 30
Accelerometer 33
Settings 34
Things to Watch Out For 37
Resources Used 38
Posted on 03 Dec 2009