Dynamic Language Runtime

by Miguel de Icaza

The presentation by Jim Hugunin and John Lam on the Dynamic Language Runtime (DLR) was a great introduction for the general public on what they are trying to do.

They showed their Ruby compiler consuming JavaScript and Visual Basic code from a single program: In the above example, Ruby has been extended to allow importing modules, for instance

	JS = require '3DText.js'

Imports the code that does 3D transformations (written in Javascript) into the constant JS. To access functions in that javascript module, you just prefix the call with JS, like show on the screenshot (JS.playAnimation for example).

The Dynamic Language Runtime augments the Common Language Runtime and is made up of a few chunks:

  • A shared type system for dynamic languages.
  • A shared AST that can be used by language developers to create new dynamic languages.
  • Helper/utility routines for compiler developers.
  • A common hosting interface, to embed the general purpose scripting language interface into your program, and allowing developers to extend applications with one or more dynamic languages.
  • Console support, they even have a simple console interface for doing interactive programming.

Today Jim has a post describing in more detail the shared type system:

They demonstrated the DLR Console, a sample application written in IronPython that allows developers to interactively write and test their code for Silverlight.

You can watch the presentation here.

Variables and functions declared in one language are automatically visible to the other languages, and by clicking on the language at the bottom of the screen programmers can switch between languages on the same session.

My photo did not come out very clear, but in this shot you can see vb, javascript and ruby. The popit routine written in VB, the event wired up in Javascript, and another event wired up in Ruby: An interesting feature of the DLR is that they added a mapping system for function names, so that code does not feel alien in other programming languages.

So the event MouseLeftButtonDown from the CLR is exposed to NRuby as mouse_left_button_down in Ruby, here you can see auto-complete when running under the Ruby context: Those properties in .NET are capitalized.

Various technical details appear on this interview by Darryl Taft:

Hugunin: In many ways, all the DLR does is it takes these things that we did custom for IronPython and it makes them work for a broad spectrum of languages. So instead of having a Python type system we now have a dynamic type system. So any language that has dynamic operations can share them

The DLR and Mono

As usual, Hugunin's team keeps exposing bugs in our compiler. For example, we did not notice when C# 2.0 came out that the operator declaration grammar now allowed for attributes on operator parameters:

attributesopt operator-modifiers operator-declarator operator-body

That one is fixed on SVN, but am not sure its worth backporting to the 1.2.4 branch. Another issue seems to be a case of not implementing fully method group conversions as the code seems to be comparing a delegate variable against a method and we barf on that one. A simple fix for now is to merely do a manual conversion in the source "new DelegateType (Method)".

I did not research this one yet, but plan on doing that today.

The final issue seems to be an issue with the operator priorities, our compiler does not like expressions like this:

type t = var as TypeName ?? dingus;

A temporary fix for now is to put parenthesis around "var as TypeName". It should be an easy fix

With those fixes you can get the DLR building on Mono, I have not tried the rest of IronPython as am just freshly unpacked from Vegas.


Deepak Jain pointed out by email that the Javascript support in the DLR is their new engine, and not a research prototype.

This new Javascript implementation is following the steps of IronPython: to be true to the original language without .NET extensions. So this is different than JScript.NET that added a bunch of extensions to be a CLR citizen.

Their new ECMAscript implementation is more of a DLR citizen and true in spirit of it.

Ruby, Python and the DLR are released under the MsPl, and it would be great if they also did this for Javascript.

Posted on 03 May 2007

Mike Krueger Joins the Mono Team

by Miguel de Icaza

Mike Krueger, the creator of the Sharp Develop IDE, has joined Novell.

Mike will be working with Ankit, Lluis and Jeff to improve the MonoDevelop IDE, and to try to share more code between SharpDevelop and MonoDevelop.

Posted on 03 May 2007

Right-sizing the API

by Miguel de Icaza

Jason Zander's blog entry on the Silverlight announcement contains a very important information nugget:

2. The APIs we are releasing are "right sized". That means we looked for the most powerful subset we could find while keeping the size small.

This I think is what makes Silverlight so interesting to me. Compared to WPF which is a complete framework for desktop applications, they are doing an effort to keep the APIs to a minimum.

Default Widgets: Silverlight comes with no pre-defined widgets, and although at first this seems like a weakness, during one of the presentations today it was clear that one-size-fits-all was not going to give everyone what they wanted.

I believe it was during Mike Harsh presentation, where he created a nice looking custom button out of simple primitives.

Posted on 01 May 2007

Mix 07, Silverlight, Dynamic Languages Runtime and OpenSource

by Miguel de Icaza

A very impressive set of demos at Mix 07, the 72 hour conversation that Microsoft is having in las Vegas.

The focus was mostly around Silverlight, Microsoft's new web plugin to author rich application and tools used to design this content.

The whole Expression suite was adorable, and Blend is fantastic.

The demos were pretty amazing, Scott built a nice animation for an airline reservation system on stage:

Silverlight and WPF

Today Microsoft announced two Silverlight editions: one that went into beta (Silverlight 1.0) and is a relatively simple technology.

Silverlight 1.0 uses a retained graphics system (a canvas) that exposes the internal structure to the browser DOM. It has no scripting capabilities built into it, all the scripting support is actually done by the Javascript interpreter in the browser and all changes are done by talking to a Javascript object exposed by the hosted Silverlight surface.

The scene definition is done using the XAML markup using a subset of the WPF primitives available in the full-blown WPF. Then the big announcement came:

The second edition was Silverlight 1.1, and this one is a different beast altogether. 1.1 extends the model by embedding a complete Common Language Runtime. Here is the slide that Scott used for this part of the presentation:

Scott did a demo of a chess program that had logic built with JavaScript and C#, notice the nodes per second computation:

The outcome of the famous battle between dog vs vampire:

There are a handful of changes to the runtime. Here are some notes on what I found out about it today. It might not be complete nor accurate:

  • A new security system: Unlike the CAS there is no stalk walking but instead there are trusted and untrusted assemblies. This is part of a new sandboxing model.
  • Trusted assemblies have a way of flagging entry points as being untrusted. which requires that the caller be a trusted assembly.

    This means that calling things like FileStream File.Open (string filename) from an untrusted assembly is not permitted.

    Instead developers would call something like FileStream File.OpenDialog(...) (which is hosted in a trusted assembly) and this would in turn call File.Open(string) and this would return a FileStream that the user selected with a dialog box.

  • The API has been trimmed down: some classes were removed that did not make much sense for the core.
  • A Minimalist WPF implementation: this is now available as a new assembly. This implementation at this point does not seem to have support for high-level controls like Buttons or Sliders, those have to be authored in a per-application basis.

    There is talk about which pieces belong in the minimal WPF and which pieces do not.

    In my opinion, keeping the controls out was a good idea as the controls in the real WPF are a bit too big.

  • Dynamic Language Runtime: the dynamic language runtime is an integral part of the Silverlight distribution.

Dynamic Language Runtime

The Dynamic Language Runtime was announced today. Jim Hugunin's blog has the details and rumor is that in the next couple of days/weeks he will be posting on his blogs the technical details behind the design of the DLR.

Binaries of the DLR were released today as part of Silverlight 1.1, and the source code was included with IronPython 2.0 (also released today).

The release for the DLR is done under the terms of the Microsoft Permissive License (MsPL) which is by all means an open source license. This means that we can use and distribute the DLR as part of Mono without having to build it from scratch. A brilliant move by Microsoft.

During the keynote they announced support for four dynamic languages built on top of the DLR: Python, JavaScript (ECMAScript 3.0), Visual Basic and Ruby.

The rumor on the halls is that IronPython and Ruby will be released under the MsPL license, while ECMAscript and Visual Basic will continue to be proprietary. From Jim's announcement:

For the short term, our focus is on using a small number of languages to drive the first wave of DLR development where we can work closely and face-to-face with the developers in order to iron out the worst kinks in the DLR design. After this initial phase, we want to reach out to the broader language community. If you're building a language on top of .NET and are interested in supporting dynamic language features then we want your feedback on the DLR. However, I'd discourage you from trying to implement on top of the DLR today. I don't want you to get frustrated trying to work with these really early bits and then not be interested in working with us when we're better prepared to engage with the language community. We plan to kick off a broader engagement with language implementers at the upcoming lang.net conference in three months - at the end of July. This will be the best place to really engage with the DLR and let us know what we got wrong.

Mono and Silverlight

For a long time a common question to the Mono team was when we were planning on implementing WPF.

Most people want to hear a date like "tomorrow", "next month", "in a year". But the answer is more complex than just thinking "we can do this in N months".

We as a team have to evaluate the cost of implementing a technology and contrast it with the impact that such technology would have. With our finite development resources (in the Mono community and the companies contributing to it) we have to pick our battles.

And implementing WPF was never really high up on the priority list for a couple of reasons:

  • WPF requires a very big investment before things will start working.
  • Users of WPF is limited to those starting new applications and are willing to start those applications using WPF.
  • Only a minority of existing users (Windows.Forms) were willing to rewrite their software to move it to WPF. The rest basically will continue developing Windows.Forms and using the technologies they have been using for the time being.

So it is fair to say that we currently do not have plans to look at WPF.

But a Mono-based Silverlight is an entirely different story. Unlike WPF that requires people to rewrite their software to take advantage of it, Silverlight is aimed at the Web and it will become a nice complement, a way of spicing up existing web applications without rewriting what already works.

It makes tons of sense for us to start looking at an implementation of Silverlight on Linux with Mono. There is already a XAML loader, it is the perfect excuse to use Antigrain for high-speed graphics and that only leaves the pesky media issue to be solved.

In fact, am kind of happy that Microsoft did not do the port themselves as implementing this sounds incredibly fun and interesting.


The major upside of this show has been how open the Microsoft folks have been open to discuss technicalities of any sorts.

I had the chance of participating on an open source panel at the conference and PHP, Mozilla, SubSonic.NET and Mono were well represented and I did not fell any angry mood from anyone.

There is also a surprising amount of talk about using the MsPL license, again, all good news.

Finally, I also made tons of new friends, have had a great time with everyone I have met here. I also noticed that both Jon Udell and Dave Winer both look happier, they were always smiling,

IE 8?

Someone mentioned (and I forget whom it was) that talk about IE8 was strangely missing from the whole conversation. There were no announcements about new upcoming features in IE, no mention of whether IE8 will support what-wg nor any future plans.


So how did my predictions score?

  • "They will spend most of the time showing the new features in the recently released Orcas and probably the Silverlight media encoder." At least on the keynote there were little demos of Orcas, most of the demos were demos about Expression, but they did show the Silverlight media encoder. Am going to give myself half a point.
  • "There will be a fresh Silverlight update." score 1.
  • "Blend and Expression Design will probably ship as a final product, or a new beta will be released." They did. score 1.
  • "Dynamic Language Runtime: a set of class libraries with some sort of supporting infrastructure in the CLR to help dynamic language authors speed up their code.". score 1.
  • "Javascript: probably Microsoft will announce that they are upgrading the JScript compiler in .NET." Although they did announce that it would be writing a new JavaScript compiler, it is not clear if its a research prototype to test the DLR or the real thing, so am going to go with half a point.
  • "Silverlight will bundle a micro-clr." Silverlight bundled a full CLR. So zero points, although I was close.
  • "Silverlight for Linux. And if there is no announcement, we should try to get someone drunk enough to get them to do it." There was no announcement of Silverlight for Linux, but I was still kind of joking. But I did get drunk with senior Microsoft employees. One point.

So 5 point out of 7, not bad.

Update: Deepak Jain points out that the new Javascript implementation is not a research prototype, but their new Javascript implementation. The real thing.

Which gives me full point, so 5.5 out of 7, I think I fared better than most analysts and pundits. I should become an analyst at RedMonk in my next life.

Posted on 01 May 2007

Two Great Democratic Candidates.

by Miguel de Icaza

Mike Gravel, ex-Alaska senator is running for the presidency. Here are some brilliant clips of his participation at the first democratic debate:

Last night Dennis Kucinich was interviewed by Bill Maher on Real Time. The whole show was fantastic.

See Bill Maher opening monologue and his interview here or if you want to see only the interview click here.

Posted on 28 Apr 2007

Mix 07

by Miguel de Icaza

I will be at Microsoft's Mix 07 conference next week, am getting to Las Vegas around 5pm, if you are interested in talking about gnome, open source, mono and wildly speculate over the announcements of the week, drop me an email to my gmail account (miguel.de.icaza).

I will be on a panel on opensource on Monday at 1:30pm

Update: Dave Winer setup a signup page for those attending Mix 07.

Posted on 28 Apr 2007

MonoTorrent Curses 0.1 released

by Miguel de Icaza

Due to popular demand (all two of you), I have made a tarball of the Curses GUI interface for MonoTorrent as well as Monotorrent.

Download both:

Update: Some folks are reporting that the internet tubes are clogged. Wait a little bit for the transfers to start, am using the Coral Cache for distribution (another de Icaza Industries innovation).

You need to have Mono and ncurses (will work on any modern Unix with ncurses).

You must first configure, make, make install the monotorrent-0.2.tar.gz tarball and then repeat the same for monotorrent-curses-0.1.

Once you are done, you can start up this gem of software engineering by typing monotorrent in your console.

Posted on 25 Apr 2007

Dynamic Language Runtime: Let the Speculation Begin

by Miguel de Icaza

For the last couple of weeks news started tricklying over IM and email that Microsoft was going to announce some Dynamic Language Runtime at Mix 07.

There have been some hints on the blogs, some friends of friends of MVPs, some friends of MVPs and some journalists. The MVPs have been leaking like there is no tomorrow.

Am not very good at predicting, but here are a few guesses for next week's Mix 07 announcements, in my confidence order:

  • They will spend most of the time showing the new features in the recently released Orcas and probably the Silverlight media encoder.
  • There will be a fresh Silverlight update.
  • Blend and Expression Design will probably ship as a final product, or a new beta will be released.
  • Dynamic Language Runtime: a set of class libraries with some sort of supporting infrastructure in the CLR to help dynamic language authors speed up their code.
  • Javascript: probably Microsoft will announce that they are upgrading the JScript compiler in .NET.
  • Silverlight will bundle a micro-clr.
  • Silverlight for Linux.
    And if there is no announcement, we should try to get someone drunk enough to get them to do it.

The conference looks like it will be incredibly fun and I am looking forward to meet a lot of people. Lots of talks that I do not want to miss.

Posted on 25 Apr 2007

Race to Linux Interviews

by Miguel de Icaza

These are the interviews for the various winners from the Race to Linux contest that we did in collaboration with Mainsoft and IBM.

The exercise included porting existing ASP.NET-based applications to Linux. All the ports were completed in a matter of hours, in some cases the download of the VMware image took longer than the port itself.

Here are the interviews:

Posted on 23 Apr 2007

Mono 1.2.3 to 1.2.4 Progress

by Miguel de Icaza

Jonathan Pobst just emailed me the comparison from Mono 1.2.3 to Mono 1.2.4 from the Mono Migration Analysis tool:

Mono 1.2.3Mono 1.2.4Change
Missing Methods19,10518,425680
Methods throwing
Methods flagged as "TODO"3,7343,69143

So 1,013 fresh new implementations since our last release.

Update: Jonathan pointed out that the numbers for APIs included internal classes (his tool has been fixed) and for internal assemblies or assemblies that we will not be supporting (VB6 support for example).

So the grand total for missing methods is 10,315 methods and not 18,425. I would fix the table, but I do not have all the updated numbers other than the grand total for Missing Methods.

From those 10,315, my senses it that we can live happily with up half of them not being implemented (fringe methods that are never used, do not show up in Moma reports or other relics).

Posted on 23 Apr 2007

« Newer entries | Older entries »