<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Guest Bloggers</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/28/0</link>
 <description>Default category for guest blogger posts that don&#039;t belong to a more specific category.</description>
 <language>en</language>
<item>
 <title>Programming Language Beauty: Look Closure</title>
 <link>http://lambda-the-ultimate.org/node/2932</link>
 <description>&lt;p &gt;
&lt;a href=&quot;http://www.hope.cs.rice.edu/twiki/bin/view/GPCE08/ConferenceProgram&quot;&gt;In&lt;/a&gt;
&lt;a href=&quot;http://jaoo.com.au/brisbane-2008/speaker/Erik+Meijer&quot;&gt;the &lt;/a&gt;
&lt;a href=&quot;http://jaoo.dk/speaker/Erik+Meijer&quot;&gt;past&lt;/a&gt;
&lt;a href=&quot;http://jaoo.com.au/sydney-2008/speaker/Erik+Meijer&quot;&gt;year&lt;/a&gt; I have been passionately fighting what
&lt;a href=&quot;http://research.microsoft.com/~simonpj/&quot;&gt;Simon Peyton Jones&lt;/a&gt; calls &amp;quot;&lt;a href=&quot;http://research.microsoft.com/~simonpj/papers/haskell-tutorial/index.htm&quot;&gt;the 
effects monster&lt;/a&gt;&amp;quot;, although often it feels like I am
&lt;a href=&quot;http://en.wikipedia.org/wiki/Don_Quixote&quot;&gt;fighting windmils&lt;/a&gt; 
instead. No useful programs can be written without effects, but effects turn bad 
when they are observable from within the program itself. Instead we should 
strive for encapsulating effects such that they become
&lt;a href=&quot;http://homepages.inf.ed.ac.uk/wadler/topics/monads.html&quot;&gt;harmless first 
class pure values&lt;/a&gt;, but more on that in the future. In &lt;a href=&quot;http://research.microsoft.com/~emeijer/Blog/LookClosure.html&quot;&gt;this first installment&lt;/a&gt;
in a longer series on the perils of side-effects, we will look at one of the most 
beautiful examples of observable effects, namely closures and variable capture 
in imperative languages.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Mon, 11 Aug 2008 15:20:26 +0000</pubDate>
</item>
<item>
 <title>Democratizing the Cloud using Microsoft Live Labs Volta</title>
 <link>http://lambda-the-ultimate.org/node/2563</link>
 <description>&lt;p &gt; 
Nearly two years ago I  posted &lt;a href=&quot;http://lambda-the-ultimate.org/node/1253&quot;&gt; Beyond LINQ: A Manifesto For Distributed Data-Intensive Programming&lt;/a&gt; on this  forum. Now, within a period of a few weeks, both &lt;a href=&quot;http://msdn2.microsoft.com/en-us/vstudio/default.aspx&quot;&gt; LINQ&lt;/a&gt; as well as a &lt;a href=&quot;http://research.microsoft.com/~emeijer/Papers/DemocratizingTheCloudOOPSLA2007.pdf&quot;&gt; rather different realization&lt;/a&gt; of my original post-LINQ plans are shipping. I  am particularly proud to announce that a community preview of &lt;a href=&quot;http://www.jot.fm/issues/issue_2007_11/column3/index.html&quot;&gt; Volta&lt;/a&gt; is available for immediate download from &lt;a href=&quot;http://labs.live.com/volta/&quot;&gt; http://labs.live.com/volta/&lt;/a&gt;. 
&lt;p &gt; 
Volta is a collection of tools that enable programmers to  develop asynchronous and distributed (including but not limited to AJAX)  applications by successive refactoring of normal, sequential, programs written  in standard .NET languages (this CTP requires Visual Studio 2008) and deploy the  resulting applications on a wide variety of target platforms (this CTP supports  Internet Explorer and FireFox). Or as I sometimes say when I am trying to sound  like a marketing person â€œ&lt;a href=&quot;http://channel9.msdn.com/tags/Volta&quot;&gt; Volta stretches the .NET platform to cover the Cloud&lt;/a&gt;.â€ Volta allows programmers to  concentrate on the essential complexity involved in building AJAX application  and have our tools take care of the gory details and accidental complexity. 
&lt;p &gt; 
When using Volta, programmers can specify their intent of  running certain classes on the server by decorating the class declaration using  a &lt;code &gt;[RunAtOrigin()]&lt;/code&gt; attribute. The Volta post-compiler then weaves in (you never  heard me say that I thought AOP was a bad idea did you :-) all the necessary  boilerplate code to partition the original program to run across multiple tiers.  Similarly, programmers can create an &lt;a href=&quot;http://ajaxpatterns.org/&quot;&gt; asynchronous version of a method&lt;/a&gt; by decorating an empty method declaration  of a related signature with an &lt;code &gt;[Async()]&lt;/code&gt; attribute. Again, the Volta  post-compiler takes care of all the boilerplate code under the hood to enable  asynchronous invocation of the target method. Another pain point in writing AJAX  applications is supporting multiple browsers. To ease this pain, Volta includes &lt;a href=&quot;http://siteexperts.spaces.live.com/default.aspx&quot;&gt; Scott Isaac&lt;/a&gt;â€™s &lt;a href=&quot;http://siteexperts.spaces.live.com/blog/cns!CE6C50D25BFAAA73!4861.entry&quot;&gt; cross-browser compatibility layer&lt;/a&gt; that is also used in Windows Live.  
&lt;p &gt; 
Volta embraces the &lt;a href=&quot;http://www.poppendieck.com/lean.htm&quot;&gt; Lean Programming&lt;/a&gt; principle of delaying irreversible decisions until the last  possible responsible moment. In particular we want to delay decisions about  distribution as long as possible. To help developers make informed decisions  about the distribution a program across tiers, the &lt;a href=&quot;http://www.eweek.com/article2/0,1759,2222350,00.asp&quot;&gt; Rotunda profiler from MSR&lt;/a&gt; is fully integrated in the Volta toolchain. By  automatically injection hooks for all interesting events, Rotunda creates trace  information that can be inspected using the standard &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms732023.aspx&quot;&gt; Service Trace Viewer&lt;/a&gt; tool. 
&lt;p &gt; 
When I speak about Volta or show a demo, the best  compliment I can get is when people say this is â€œtrivialâ€ or â€œreally  straightforwardâ€. The best tools are those that do their work unobtrusive hidden  in the background. Anyway, with the holidays around the corner you may have some  spare cycles to give Volta a spin and &lt;a href=&quot;http://go.microsoft.com/?linkid=7772571&quot;&gt; let us know what you think&lt;/a&gt;!</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Wed, 05 Dec 2007 18:50:40 +0000</pubDate>
</item>
<item>
 <title>Lang .NET Symposium Registration Now Open</title>
 <link>http://lambda-the-ultimate.org/node/1572</link>
 <description>&lt;p &gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Number_of_the_Beast&quot;&gt;day of the 
beast&lt;/a&gt; has passed without any noticeable effect;
&lt;a href=&quot;http://news.google.com/news?hl=en&amp;amp;ned=us&amp;amp;q=Bill+Gates+retires&quot;&gt;Bill 
Gates has announced his retirement&lt;/a&gt; and the
&lt;a href=&quot;http://finance.google.com/finance?q=msft&quot;&gt;Microsoft stock actually goes 
up&lt;/a&gt;. The coast&amp;nbsp; finally seems safe for another post on the
&lt;a href=&quot;http://langnetsymposium.com/overview.asp&quot;&gt;Lang .NET symposium&lt;/a&gt;! &lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://langnetsymposium.com/register_online.asp&quot;&gt;Registration&lt;/a&gt; 
for this &lt;a href=&quot;http://lambda-the-ultimate.org/node/1416&quot;&gt;heavily debated 
event&lt;/a&gt; is now open. I believe that we have a
&lt;a href=&quot;http://langnetsymposium.com/speakers.asp&quot;&gt;very interesting set&lt;/a&gt; of 
non-Microsoft invited speakers including
&lt;a href=&quot;http://bracha.org/Site/Home.html&quot;&gt;Gilad Bracha&lt;/a&gt; from Sun,
&lt;a href=&quot;http://www.cs.utexas.edu/~wcook/&quot;&gt;William Cook&lt;/a&gt; from UT Austin,
&lt;a href=&quot;http://sky.fit.qut.edu.au/~gough/&quot;&gt;John Gough&lt;/a&gt; from QUT,
&lt;a href=&quot;http://tirania.org/&quot;&gt;Miguel de Icaza&lt;/a&gt; from Novel, and
&lt;a href=&quot;http://www.cs.brown.edu/~sk/&quot;&gt;Shriram Krishnamurthi&lt;/a&gt; from Brown; 
Microsoft folks including &lt;a href=&quot;http://research.microsoft.com/~mbarnett/&quot;&gt;
Mike Barnett&lt;/a&gt;, &lt;a href=&quot;http://flakenstein.net/&quot;&gt;Gary Flake&lt;/a&gt;,
&lt;a href=&quot;http://blogs.msdn.com/hugunin/&quot;&gt;Jim Hugunin&lt;/a&gt;,
&lt;a href=&quot;http://www.asp.net/sandbox/app_blinq.aspx?tabid=62&quot;&gt;Polita Paulus&lt;/a&gt;,
&lt;a href=&quot;http://blogs.msdn.com/dsyme/&quot;&gt;Don Syme&lt;/a&gt;, and
&lt;a href=&quot;http://www.panopticoncentral.net/&quot;&gt;Paul Vick&lt;/a&gt;; and a fine line-up of 
submitted papers.&lt;/p&gt;
&lt;p &gt;Hope to see you all in Redmond this August!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Sat, 17 Jun 2006 22:57:42 +0000</pubDate>
</item>
<item>
 <title>Gilad Is Right</title>
 <link>http://lambda-the-ultimate.org/node/1311</link>
 <description>&lt;p &gt;
&lt;b &gt;&lt;a href=&quot;http://bracha.org/&quot;&gt;Gilad&lt;/a&gt; Is Right (Confessions From A Recovering Typoholic)&lt;/b&gt;
&lt;/p&gt;
&lt;p &gt;
If you have not seen Gilad Bracha&#039;s talk on &lt;a href=&quot;http://bracha.org/pluggable-types.pdf&quot;&gt;pluggable and optional type systems&lt;/a&gt; or read the &lt;a href=&quot;http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Bracha.pdf&quot;&gt;corresponding  paper&lt;/a&gt;, I really urge you to do so (or invite Gilad as the &lt;a href=&quot;http://public.research.att.com/~kfisher/FOOL/FOOLWOOD06/program.html#bracha&quot;&gt; invited talk in your conference or workshop&lt;/a&gt;). The thesis of optional and  pluggable type systems is that type-systems should be an optional layer on top  of an otherwise dynamically typed system in such a way that (a) types cannot  change the run-time behavior of the program, and (b) they cannot prevent an  otherwise legal program form compiling or executing. In short what Gilad is  saying is that you should not depend on static typing. However, we all know that  static type-systems are very addictive, like the finest crack from the backstreets  of the ghetto, and I will stop beating around the bush and confess &amp;quot;I am Erik, and I am a (recovering) &lt;a href=&quot;http://www.cartesianclosed.com/pub/type_indexed_rows/&quot;&gt;typoholic&lt;/a&gt;&amp;quot;.
&lt;/p&gt;
&lt;p &gt;
To illustrate the tantalizing power of static typing, take the concept of &lt;a href=&quot;http://msdn.microsoft.com/vbasic/Future/default.aspx?pull=/library/en-us/dnvs05/html/vb9overview.asp#vb9overview_topic6&quot;&gt;axis members in Visual Basic 9&lt;/a&gt;. In our first design we keyed &amp;quot;late&amp;quot; binding over XML on the &lt;i &gt;static&lt;/i&gt; type of the receiver. For example take the  following element declaration
&lt;/p&gt;
&lt;pre &gt;Dim Pu As XElement = &amp;lt;Atom AtomicWeight=&amp;quot;244&amp;quot;&amp;gt;
                       &amp;lt;Name&amp;gt;Plutonium&amp;lt;/Name&amp;gt; 
                       &amp;lt;Symbol AtomicNumber=&amp;quot;94&amp;quot;&amp;gt;Pu&amp;lt;/Symbol&amp;gt;
                       &amp;lt;Radioactive&amp;gt;true&amp;lt;/Radioactive&amp;gt; 
                     &amp;lt;/Atom&amp;gt; &lt;/pre&gt;&lt;p &gt;
Since the static type of &lt;code &gt;Pu&lt;/code&gt; is &lt;code &gt;XElement&lt;/code&gt;, our compiler interprets the member access expression &lt;code &gt;Pu.Symbol&lt;/code&gt; as the call &lt;code &gt;Pu.Elements(&amp;quot;Symbol&amp;quot;)&lt;/code&gt; on the underlying XLinq API. While this is rather cute, it is not without problems. First of all, the &lt;code &gt;XElement &lt;/code&gt;class itself has quite a lot of members, and the question is who wins when there is an ambiguity like in &lt;code &gt;Pu.Name&lt;/code&gt;. Should this mean &lt;code &gt;Pu.Elements(&amp;quot;Name&amp;quot;)&lt;/code&gt; or should it just directly call the underlying &lt;code &gt;Name&lt;/code&gt; property of &lt;code &gt;XElement&lt;/code&gt;. Even worse, what happens if the static type of the receiver is &lt;code &gt;Object&lt;/code&gt;, but its dynamic type is &lt;code &gt;XElement &lt;/code&gt;as in &lt;code &gt;CObj(Pu).Symbol&lt;/code&gt;.  What we should really do is to extend the Visual Basic late binder to understand  axis members, which means we now have two levels of possible ambiguity! At this  point, we have lost the majority of our users. Keying axis member binding on the  static type of the receiver is just &lt;i &gt;too&lt;/i&gt; cute, we are really doing some kind of  fancy type-based overloading.
&lt;/p&gt;
&lt;p &gt;
Besides the child axis, we have special support for attribute axis, written using an &lt;code &gt;@&lt;/code&gt;-sign as in &lt;code &gt;Pu.@AtomicWeight&lt;/code&gt; and for the descendant axis, written using three consecutive dots as in &lt;code &gt;Pu...RadioActive&lt;/code&gt;. Obviously, for these two there is no ambiguity with normal member access, depending on how you look at it, it is clear from the member name (&lt;code &gt;Pu &lt;b &gt;.&lt;/b&gt;&lt;b &gt;@AtomicWeight&lt;/b&gt;&lt;/code&gt; and &lt;code &gt;Pu &lt;b &gt;.&lt;/b&gt; &lt;b &gt;â€¢â€¢RadioActive&lt;/b&gt;&lt;/code&gt;) or the selector (&lt;code &gt;Pu &lt;b &gt; â€¢@&lt;/b&gt; AtomicWeight&lt;/code&gt; and &lt;code &gt;Pu &lt;b &gt;â€¢â€¢â€¢&lt;/b&gt; AtomicWeight&lt;/code&gt;) what the intention is, independent of the static type of the receiver. There is no danger for ambiguity, and it all works fine for late-binding when the receiver has type object since we can always interpret &lt;code &gt;Pu.@AtomicWeight&lt;/code&gt; as &lt;code &gt;Pu.Attributes(&quot;AtomicWeight&quot;)&lt;/code&gt; and then do ordinary member resolution and type-checking on that.
&lt;/p&gt;
&lt;p &gt;
To solve our pain, we recently decided to also introduce special syntax for the child axis and write &lt;code &gt;Pu.&amp;lt;Symbol&amp;gt;&lt;/code&gt; instead of &lt;code &gt;Pu.Symbol&lt;/code&gt;. Now there is no ambiguity between &lt;code &gt;Pu.Name&lt;/code&gt;, which returns the string &lt;code &gt;&amp;quot;Atom&amp;quot;,&lt;/code&gt; and &lt;code &gt;Pu.&amp;lt;Name&amp;gt;&lt;/code&gt; which returns the &lt;code &gt;XElement&lt;/code&gt; child node &lt;code &gt;&amp;lt;Name&amp;gt;Plutonium&amp;lt;/Name&amp;gt;&lt;/code&gt;. For consistency, we also changed the syntax for the descendant axis to be &lt;code &gt;Pu...&amp;lt;RadioActive&amp;gt;&lt;/code&gt; instead of &lt;code &gt;Pu...RadioActive&lt;/code&gt;. &lt;/p&gt; &lt;p &gt;I hope that you agree that we have masked out the &lt;a href=&quot;http://en.wikipedia.org/wiki/Siren&quot;&gt;seductive voices of the static typing sirens&lt;/a&gt; by providing a syntax that is more beautiful and a semantics that is much simpler than our previous one that relied heavily on static typing. Gilad is right!
&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Sat, 18 Feb 2006 01:48:49 +0000</pubDate>
</item>
<item>
 <title>Beyond LINQ: A Manifesto For Distributed Data-Intensive Programming</title>
 <link>http://lambda-the-ultimate.org/node/1253</link>
 <description>&lt;p &gt;The &lt;a href=&quot;http://msdn.microsoft.com/netframework/future/linq/&quot;&gt;LINQ project&lt;/a&gt; as embodied by &lt;a href=&quot;http://download.microsoft.com/download/9/5/0/9503e33e-fde6-4aed-b5d0-ffe749822f1b/csharp%203.0%20specification.doc&quot;&gt;C# 3.0&lt;/a&gt; and &lt;a href=&quot;http://msdn.microsoft.com/vbasic/future/&quot;&gt;Visual Basic 9&lt;/a&gt; brings concepts from functional programming such as type-inference, lambda-expressions, and most importantly &lt;a href=&quot;http://homepages.inf.ed.ac.uk/wadler/topics/monads.html&quot;&gt;monad comprehensions&lt;/a&gt; into mainstream object-oriented programming. This is a definitively exciting for the programming language community, but realistically, it is just a tiny step towards democratizing building distributed data-intensive applications. To merely approach that goal there is still much work to do in (at least) the following areas:&lt;/p&gt;
&lt;p &gt;
&lt;dl &gt;
&lt;dt &gt;&lt;b &gt;Tools and IDE&lt;/b&gt;&lt;/dt&gt;
&lt;dd &gt;
It is fair to say that the the days of writing code using a text editor and batch compiler are over. Visual Studio, Eclipse, and Emacs are the norm rather than the exception. However, whenever you meet an (ex)-Smalltalk or VB6 programmer, they reminiscence the highly interactive development environment, scripters cannot live without their REPL, and tools like &lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; disrupt traditional development because of its simplicity and quick turn-around time. To simplify programming for the masses we need to shake of the yoke of the dreaded (edit, compile, run, debug)* loop and replace it with a lightweight (edit=compile=run=debug) experience.&lt;br &gt;
&lt;/dd&gt;
&lt;dt &gt;&lt;b &gt;Language and Type Systems&lt;/b&gt;&lt;/dt&gt;
&lt;dd &gt;
Writing distributed data-intensive applications naturally means dealing with many forms of data, relational, XML, objects, typed, semi-structured, or untyped. Current languages are &lt;a href=&quot;http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Meijer.pdf&quot;&gt;not well equipped to deal any scrap of data&lt;/a&gt;, and much language and type-system innovation is required such explicit relationships, contracts,&amp;nbsp; layered type-systems, seamlessly dealing with both static and dynamic typing in the same program, extensibility, etc. The challenge is to package advanced ideas from programming language research in such a way that you do not need a PhD in type-theory to understand them.&lt;/dd&gt;
&lt;dt &gt;&lt;b &gt;Runtime and Libraries&lt;/b&gt;&lt;/dt&gt;
&lt;dd &gt;
Sometimes, and preferably, the compiler is able map all language and type extensions to an existing runtime such as the JVM or the CLR. However, often this is not feasible and we need to extend the runtime infrastructure to accommodate these new features. A prime example is the support for generics in the &lt;a href=&quot;http://research.microsoft.com/~dsyme/netproj.aspx&quot;&gt;CLR&lt;/a&gt; versus the &lt;a href=&quot;http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf&quot;&gt;JVM&lt;/a&gt;, other examples include efficient support for first class &lt;a href=&quot;http://www.paulgraham.com/avg.html&quot;&gt;continuations&lt;/a&gt;, query execution, etc. Obviously, a dynamic language is ultimately all about how dynamic the underlying runtime infrastructure is unless you emulate the dynamic features of the language, which kills interoperability. In addition to runtime support, new language and type-system features often need extensive library and infrastructure support. For example, in the context of LINQ, the language extensions are just the tip of the iceberg, and in fact the bulk of the work is in the libraries such as &lt;a href=&quot;http://research.microsoft.com/~emeijer/Papers/XLinq%20XML%20Programming%20Refactored%20(The%20Return%20Of%20The%20Monoids).htm&quot;&gt;XLinq&lt;/a&gt; and in particular the &lt;a href=&quot;http://download.microsoft.com/download/c/f/b/cfbbc093-f3b3-4fdb-a170-604db2e29e99/DLinq%20Overview.doc&quot;&gt;OR&lt;/a&gt;-&lt;a href=&quot;http://msdn.microsoft.com/data/winfs/&quot;&gt;mapping&lt;/a&gt; infrastructure.&lt;br &gt;
&lt;/dd&gt;&lt;dt &gt;&lt;b &gt;Transactions Everywhere&lt;/b&gt;&lt;/dt&gt;
&lt;dd &gt;
To make programming &lt;a href=&quot;http://www.amazon.com/gp/browse.html/102-3048491-1060104?_encoding=UTF8&amp;amp;node=3435361&quot;&gt;web services&lt;/a&gt; accessible to the masses, we need have to have a comprehensible way to deal with concurrency. In addition, on the desktop itself we need some way to harness the upcoming multi-core revolution. We believe that &lt;a href=&quot;http://research.microsoft.com/~Gray/JimGrayHomePageSummary.htm&quot;&gt;transactions&lt;/a&gt; are the most promising approach in this space. In fact transaction are the only way ordinary people can deal with concurrency, unless of course you are a sadomasochist who likes to wear black leather and play with &lt;a href=&quot;http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html&quot;&gt;locks&lt;/a&gt;.&lt;br &gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p &gt;
As you can imagine, this is a lot of work and it will keep us language geeks off the streets for a long, long, time! And in case you are currently wandering the streets looking for a job as a compiler writer, virtual machine hacker, tool smith, etc. drop &lt;a href=&quot;http://research.microsoft.com/~emeijer/&quot;&gt;me&lt;/a&gt; an email. We have several job openings available.
&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Tue, 24 Jan 2006 16:37:40 +0000</pubDate>
</item>
<item>
 <title>LINQ BOF at OOPSLA</title>
 <link>http://lambda-the-ultimate.org/node/1048</link>
 <description>&lt;p&gt;
On Wednesday October 19, 2005, Mads Torgersen, Amanda Silver, and yours truly will be presenting a BOF on LINQ in the Royal Palm Salon 1+2, 5:00 â€“ 7:30pm during &lt;a href=&quot;http://www.oopsla.org/2005/ShowPage.do?id=Home&quot;&gt;OOPSLA 2005&lt;/a&gt; in the Town &amp;amp; Country Resort &amp;amp; Convention Center in San Diego, CA.
&lt;/p&gt; 
&lt;p&gt;
With three language geeks (one from VB land, one ex-academic from the Java side, and one ex-academic from the Haskell side) presenting, this should be a fun night. 
&lt;/p&gt; 
&lt;p&gt;
&lt;b&gt;Abstract&lt;/b&gt;
&lt;br&gt;
Modern applications operate on data in several different forms: Relational tables, XML documents, and in-memory objects. Each of these domains can have profound differences in semantics, data types, and capabilities, and much of the complexity in today&#039;s applications is the result of these mismatches. The future &quot;Orcas&quot; release of Visual Studio aims to unify the programming models through integrated query capabilities in C# and Visual Basic, a strongly typed data access framework, and an innovative API for manipulating and querying XML. This talk explains the ideas behind language integrated queries (LINQ) and discusses the language enhancements behind them.
&lt;/P&gt;
&lt;p&gt;
&lt;b&gt;Slides&lt;/b&gt;
The slides for the presentation are &lt;a href=&quot;http://www.research.microsoft.com/~emeijer/Papers/OOPSLA2005.ppt&quot;&gt;here&lt;/a&gt;.
</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Fri, 14 Oct 2005 07:40:35 +0000</pubDate>
</item>
<item>
 <title>XLinq: XML Programming Refactored (The Return Of The Monoids)</title>
 <link>http://lambda-the-ultimate.org/node/998</link>
 <description>&lt;p &gt;I just posted my &lt;a href=&quot;http://2005.xmlconference.org/&quot;&gt;XML 2005&lt;/a&gt; submission about &lt;a href=&quot;http://www.research.microsoft.com/~emeijer/Papers/XLinq%20XML%20Programming%20Refactored%20(The%20Return%20Of%20The%20Monoids).htm&quot;&gt;XLinq&lt;/a&gt; on my &lt;a href=&quot;http://www.research.microsoft.com/%7Eemeijer/&quot;&gt;homepage&lt;/a&gt;.&lt;br &gt;
It describes the &lt;a href=&quot;http://www.google.com/search?sourceid=navclient&amp;amp;ie=UTF-8&amp;amp;rls=GGLG,GGLG:2005-36,GGLG:en&amp;amp;q=System%2EXml%2EXLinq&quot;&gt;XLinq API&lt;/a&gt; in somewhat detail, and informally explains the relationship between &lt;a href=&quot;http://blogs.msdn.com/mattwar/archive/2005/09/19/471671.aspx&quot;&gt;LINQ and monads&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Fri, 23 Sep 2005 01:53:50 +0000</pubDate>
</item>
<item>
 <title>FLOPS 2006</title>
 <link>http://lambda-the-ultimate.org/node/980</link>
 <description>&lt;p &gt;The call for papers for &lt;a href=&quot;http://nicosia.is.s.u-tokyo.ac.jp/FLOPS2006/index.html&quot;&gt;FLOPS 2006&lt;/a&gt; is now out.&lt;/p&gt;
&lt;p &gt;FLOPS benefits from an eclectic mix of FP and LP papers,&lt;br &gt;
one of the few venues where the two communities get&lt;br &gt;
together. It should be a congenial meeting, situated under&lt;br &gt;
Mt Fuji.&lt;/p&gt;
&lt;p &gt;We have two excellent invited speakers.&lt;br &gt;
Peter van Roy, on Mozart&lt;br &gt;
Guy Steele, on Fortress (just confirmed)&lt;/p&gt;
&lt;p &gt;Submission deadline is 11 November 2005,&lt;br &gt;
the conference is 24--28 April 2006.&lt;br &gt;
Do submit, do come!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Fri, 16 Sep 2005 18:26:16 +0000</pubDate>
</item>
<item>
 <title>Visual Basic 9 Interview on DDJ</title>
 <link>http://lambda-the-ultimate.org/node/975</link>
 <description>For those interested in the new VB9 language, there is an interview on &lt;a href=&quot;http://www.ddj.com/documents/s=9776/ddj1126793370067/&quot;/&gt;DDJ&lt;/a&gt; with me and my partners in crime &lt;a href=&quot;http://www.panopticoncentral.net/&quot;&gt;Paul Vick&lt;/a&gt;, &lt;a href=&quot;http://blogs.msdn.com/vbteam/archive/category/4743.aspx&quot;&gt;Amanda Silver&lt;/a&gt;, together with our more pointy haired, but good, friends &lt;a href=&quot;http://blogs.msdn.com/vsdata/&quot;&gt;Alan Griver&lt;/a&gt;, &lt;a href=&quot;http://blogs.msdn.com/robertco/&quot;&gt;Rob Copeland&lt;/a&gt;, &lt;a href=&quot;http://blogs.msdn.com/jroxe/default.aspx&quot;&gt;Jay Roxe&lt;/a&gt;.
&lt;p&gt;
The reason I got sold on software transactions, as opposed to &lt;a href=&quot;http://research.microsoft.com/Comega/&quot;&gt;joins&lt;/a&gt;, is &lt;a href=&quot;http://research.microsoft.com/Users/simonpj/papers/stm/&quot;&gt;this&lt;/a&gt; paper.
</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Thu, 15 Sep 2005 16:05:07 +0000</pubDate>
</item>
<item>
 <title>Visual Basic and LINQ</title>
 <link>http://lambda-the-ultimate.org/node/967</link>
 <description>&lt;p&gt;
Over the last couple of months, both my existence and &lt;a href=&quot;http://lambda-the-ultimate.org/node/view/834&quot;&gt;my judgments&lt;/a&gt; have been
questioned several times on my favorite programming languages waterhole :-)
&lt;/p&gt;


&lt;p&gt;
In the mean time, I was busily working with the SQL, XML, C# and the Visual Basic teams on language integrated query, or as it is now called project &lt;a href=&quot;http://msdn.microsoft.com/netframework/future/linq/&quot;&gt;LINQ&lt;/a&gt;. In particular since early this year I am collaborating with &lt;a href=&quot;http://blogs.msdn.com/vbteam/archive/category/4743.aspx&quot;&gt;Amanda Silver&lt;/a&gt;, &lt;a href=&quot;http://www.panopticoncentral.net/&quot;&gt;Paul Vick&lt;/a&gt;, and &lt;a href=&quot;http://blogs.msdn.com/robertco/&quot;&gt;Rob Copeland&lt;/a&gt; and &lt;a href=&quot;http://blogs.msdn.com/vsdata/&quot;&gt;Alan Griver&lt;/a&gt; on what has become my programming language of choice &lt;a href=&quot;http://msdn.microsoft.com/vbasic/future&quot;&gt;Visual Basic&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
If you look closely at the new features introduced to C# and Visual Basic in the context of LINQ, you will recognize many familiar concepts that are regularly discussed on LTU ranging from &lt;a href=&quot;http://conferences.yapceurope.org/2005/talk/188&quot;&gt;monads&lt;/a&gt;, to &lt;a href=&quot;http://en.wikipedia.org/wiki/Metaprogramming&quot;&gt;meta-programming&lt;/a&gt;, &lt;a href=&quot;http://www.cs.ru.nl/~henk/lambdacalculus.html&quot;&gt;lambda expressions&lt;/a&gt;, &lt;a href=&quot;http://planx2006.ens.fr/&quot;&gt;XML programming&lt;/a&gt;, to the &lt;a href=&quot;http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Meijer.pdf&quot;&gt;relationship between static and dynamic typing&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
The LINQ project consists of a base pattern of query operators (compare to the &lt;a href=&quot;http://www.haskell.org/onlinereport/monad.html&quot;&gt;monad primitives&lt;/a&gt;) such as Select (&lt;a href=&quot;http://www.cs.uu.nl/~afie/haskell/tourofprelude.html#map&quot;&gt;map&lt;/a&gt;), SelectMany (&lt;a href=&quot;http://www.cs.uu.nl/~afie/haskell/tourofprelude.html#concatMap&quot;&gt;concatMap&lt;/a&gt;), Where (&lt;a href=&quot;http://www.cs.uu.nl/~afie/haskell/tourofprelude.html#filter&quot;&gt;filter&lt;/a&gt;), OrderBy (&lt;a href=&quot;http://www.cs.uu.nl/~afie/haskell/tourofprelude.html#sort&quot;&gt;sort&lt;/a&gt;), and GroupBy (&lt;a href=&quot;http://www.zvon.org/other/haskell/Outputlist/groupBy_f.html&quot;&gt;groupBy&lt;/a&gt;) on top of which Visual Basic and C# define query comprehensions (compare to &lt;a href=&quot;http://www.haskell.org/onlinereport/exps.html&quot;&gt;monad comprehensions&lt;/a&gt;) that Â facilitate querying objects, relational data and XML. The C# syntax for query comprehensions is similar to &lt;a href=&quot;http://www.w3.org/TR/xquery/#id-flwor-expressions&quot;&gt;FLWOR&lt;/a&gt; expressions, while the Visual Basic syntax stays close to SQL including aggregation.
&lt;/p&gt;

&lt;p&gt;
In addition to the language extensions and base operators, LINQ provides two supplementary domain-specific APIs namely DLinq (compare to &lt;a href=&quot;http://www.usenix.org/events/dsl99/full_papers/leijen/leijen_html/index.html&quot;&gt;HaskellDB&lt;/a&gt;) for SQL relational data access, and XLinq (compare to &lt;a href=&quot;http://www.cs.york.ac.uk/fp/HaXml/&quot;&gt;HaXml&lt;/a&gt;) for XML hierarchical data access. Besides query comprehensions, Visual Basic provides deep XML integration with XML literals and XML late binding on top of XLinq (compare to &lt;a href=&quot;http://www.cs.chalmers.se/~d00nibro/hsp/&quot;&gt;Haskell Server Pages&lt;/a&gt;, &lt;a href=&quot;http://www.cartesianclosed.com/pub/xmlambda/&quot;&gt;XM&lt;span style=&#039;font-family: Symbol&#039;&gt;l&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;http://research.microsoft.com/Comega/&quot;&gt;Comega&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
Both Visual Basic and C# have added several additional language extensions in support of LINQ, including local type inference (the type of local variable declarations are inferred from their initializers), lambda expressions (with type inference), local functions, anonymous types, object initializers, extension methods (static methods that can be called using instance method syntax), and meta-programming via expression trees (compare to &lt;i&gt;type-based&lt;/i&gt; &lt;a href=&quot;http://www.haskell.org/ghc/docs/latest/html/users_guide/template-haskell.html&quot;&gt;quote and quasi-quote&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
Visual Basic adds some further enhancements to leverage the fact that it allows static typing where possible and dynamic typing where necessary in the form of relaxed delegates, improved nullable support, dynamic identifiers (makes writing meta-circular interpreters a breeze) and last but not least dynamic interfaces, or as I like to refer to them strong duck typing (compare to simplified &lt;a href=&quot;http://www.cse.ogi.edu/~mpj/pubs/multi.html&quot;&gt;qualified types/type classes&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
LINQ general website: &lt;a href=&quot;http://msdn.microsoft.com/netframework/future/linq/&quot;&gt;http://msdn.microsoft.com/netframework/future/linq/&lt;/a&gt;
&lt;br&gt;
VB9 specific website: &lt;a href=&quot;http://msdn.microsoft.com/vbasic/future&quot;
title=&quot;http://msdn.microsoft.com/vbasic/future&quot;&gt;http://msdn.microsoft.com/vbasic/future&lt;/a&gt;
&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Tue, 13 Sep 2005 17:24:04 +0000</pubDate>
</item>
<item>
 <title>Scottish Programming Language Seminar</title>
 <link>http://lambda-the-ultimate.org/node/796</link>
 <description>&lt;a href=&quot;http://www.macs.hw.ac.uk/~trinder/spls05/&quot;&gt;&lt;br &gt;
Scottish Programming Language Seminar&lt;/a&gt;
&lt;div class=&quot;blogPost&quot;&gt;
			  &lt;div &gt;&lt;/div&gt;Many thanks to Greg Michaelson and Phil Trinder for organizing this meeting!&lt;/p&gt;
&lt;p &gt;This is the third meeting of SPLS, and its great to see that SPLS has already grown into what it was intended to be: a robust forum for language researchers in Scotland (and beyond).  We had in attendance thirty or forty programming language researchers, from U of Edinburgh, Heriot Watt, U of Glasgow, Strathclyde, and St Andrews, as well as speakers from Nottingham and Hertfordshire, both of whom had traveled to Edinburgh just for the occasion.&lt;/p&gt;
&lt;p &gt;Greg Michaelson noted that, as it happened, none of the speakers was Scottish.  (Richard is English, Anne is French, Conor is Irish, De Lesley is American, and Sven-Bodo is German.)  I suggested that we parse the name differently, and say that it is a seminar for work on Scottish Programming Languages.  With POP2, SASL, Hope, ML, Haskell, and (soon, I hope) Links, we have quite enough to keep us busy!&lt;/p&gt;
&lt;p &gt;We were hosted by the International Centre for Mathematical Sciences, which is located in the house in which James Clerk Maxwell was born.  I work in The James Clerk Maxwell Building in the north campus of the University of Edinburgh, affectionately known as JCMB to its inmates (and rather a cheek in naming, as Maxwell&#039;s main connection to Edinburgh is that they refused to hire him).  It was a pleasure to visit the other JCMB, which is more appealing in appearance.  Cheers to Greg and Phil for finding a wonderful venue.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Richard Connor, Strathclyde University&lt;/b&gt;&lt;br &gt;&lt;em &gt;Typed vs Untyped: performing a real experiment?&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;Put forward the excellent idea that we should actually try to experimentally measure what impact type systems have on programmer productivity and program reliability and maintanability.  Unfortunately, I suspect this will fall foul of a symptom I noticed years ago in papers that report experiments on programming languages.  If the person who wrote the paper believed that imperative languages were better than functional languages, thenthat is what his experiments proved, and if the person who wrote the paper believed the opposite then his experiments proved the opposite.  Richard&#039;s experiment consists of comparing untyped and typed variants of Javascript.  But his untyped variant supports the undefined value and his typed variant does not, so its not clear whether he&#039;ll be measuring the effects of typing or of flexible null values.  I can suggest a number of different experiments, which I suspect would yield rather different results: compare Java 1.4 and Java 1.5 (with and without generics -- this has the great advantage that it is working with two real languages), compare Haskell with and without types, compare Scheme with and without types (using the type inferencer in Dr Scheme for the typed version, so again you have two real languages).&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Anne Benoit, Edinburgh University&lt;/b&gt;&lt;br &gt;&lt;em &gt;Enhancing the performance of Grid Applications with Skeletons and Process Algebras&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;Skeletons with performance models applied to automatically choose the best implementation.  Seems like nice work. Unfortunately, I&#039;m not very familiar with skeletons, so I would have benefited from some simple, complete examples to convey the basic ideas.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Conor McBride, Nottingham University&lt;/b&gt;&lt;br &gt;&lt;em &gt;Idioms&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;A few years ago, John Hughes noticed that sometimes a monad is too strong, and he introduced a weaker structure called &#039;arrows&#039; with many interesting applications.  (Every monad is an arrow, but not conversely.)  Conor has now noticed that there is another useful structure halfway between arrows and monads, which he calls idioms.  (Every monad is an idiom and every idiom is an arrow, but not conversely.)&lt;/p&gt;
&lt;pre &gt;&lt;br &gt;  class Idiom i where&lt;br &gt;    k : x -&amp;gt; i x&lt;br &gt;    s : i (x -&amp;gt; y) -&amp;gt; i x -&amp;gt; i y&lt;br &gt;&lt;/pre&gt;&lt;p &gt;(To see why these are called k and s, take i x = a -&amp;gt; x.)  It was a Pearl of a talk, and I encourage him to write it up as a pearl for JFP.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;DeLesley Hutchins, Edinburgh University&lt;/b&gt;&lt;br &gt;&lt;em &gt;Feature Oriented Programming&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;An object calculus that is good for &quot;deep mixin&quot; combination.  Unlike most typed languages it is not stratified -- objects and their types are considered to be the same sorts of things, with the 
&lt;p &gt;&lt;b &gt;Sven-Bodo Sholz, University of Hertfordshire&lt;/b&gt;&lt;br &gt;&lt;em &gt;Using Sub-types and Intersection Types to strike the Balance Between Static and Dynamic Typing&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;An interesting companion to Richard&#039;s talk.  Sven-Bodo has a functional language for scientific programming with an optimizing compiler that achieves performance comparable to Fortran.  (And a compiler consisting of 500K lines of C.)  This talk focussed on the type system, which in effect ranges from highly typed to untyped.  He has a hierarchy of types for arrays, ranging from no information to specific information.&lt;/p&gt;
&lt;pre &gt;&lt;br &gt;  [*]  - any array&lt;br &gt;  [] - any scalar   [.] - any vector   [.,.] - any matrix&lt;br &gt;  [3] - vector of length 3, [4] - vector of length 4, [2,3] - matrix with 2 rows and 3 columns, ...&lt;br &gt;&lt;/pre&gt;&lt;p &gt;The system makes heavy use of intersection types.  It tries to give more precise types (lower down in the hierarchy sketched above), but moves up the hierarchy when it is too hard to give a precise type.  (It wasn&#039;t clear to me under which circumstances it would move up the hierarchy.)  This complements Milner&#039;s principle: Well-typed programs can&#039;t go wrong.  In this system, if a program is not well-typed it will typically move up the hierarchy.  Hence. one can&#039;t guarantee that well-typed programs won&#039;t go wrong (unless one inspects them and determines that all subterms are given precise types rather than imprecise types), but one can guarantee that ill-typed programs must go wrong!&lt;/p&gt;
&lt;p &gt;A fine day.  My thanks to all those who made it happen!  The next meetings are scheduled for Strathclyde in September and St Andrews in January.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Thu, 23 Jun 2005 21:20:57 +0000</pubDate>
</item>
<item>
 <title>The Essence of Programming: Reynoldsfest at MFPS</title>
 <link>http://lambda-the-ultimate.org/node/721</link>
 <description>&lt;p &gt;Having just got back from the &lt;a href=&quot;http://events.cs.bham.ac.uk/mfps21/index-data#special&quot;&gt;Reynoldsfest at MFPS&lt;/a&gt;, where part of the emphasis was on encouraging folk to look at Reynolds work, let me write down some of what was recommended.&lt;/p&gt;
&lt;p &gt;My personal favorites:&lt;br &gt;
Definitional Interpreters (this one changed my life when I was a graduate student)&lt;br &gt;
Gedanken&lt;br &gt;
Towards a Theory of Type Structure&lt;br &gt;
Types, Abstraction and Parametric Polymorphism&lt;br &gt;
The Essence of Algol&lt;br &gt;
Syntactic Control of Interference&lt;br &gt;
Three Approaches to Type Structure (tutorial)&lt;br &gt;
The Discoveries of Continuations (history)&lt;/p&gt;
&lt;p &gt;Some papers recommended by others:&lt;br &gt;
The Craft of Programming (recommended by Cliff Jones)&lt;br &gt;
Relating direct and continuation semantics (Filinski&#039;s favorite -- this one is tough going)&lt;br &gt;
Separation Logic: A Logic for Shared Mutable Data Structures&lt;/p&gt;
&lt;p &gt;Also, while I&#039;m at it, let me recommend&lt;br &gt;
&lt;a href=&quot;http://www.cs.virginia.edu/~robins/YouAndYourResearch.html&quot;&gt;You and Your Research&lt;/a&gt;, by Richard Hamming.  Want to do Nobel-class research? It&#039;s not just a matter of luck. Here is a nuts and bolts guide, from the third winner of the Turing Award.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Thu, 19 May 2005 20:41:30 +0000</pubDate>
</item>
<item>
 <title>Two Thank Yous for Peter van Roy</title>
 <link>http://lambda-the-ultimate.org/node/720</link>
 <description>&lt;p &gt;For FractaSketch. My kids love it!&lt;/p&gt;
&lt;p &gt;For &quot;Logic programming in the context of multiparadigm programming: the Oz experience&quot;. I always knew Oz was interesting. But, without a lot of time to sit down and write programs, how does one come to grips with a new paradigm? This paper does the trick.&lt;/p&gt;
&lt;p &gt;Thanks, &lt;a href=&quot;http://www2.info.ucl.ac.be/people/cvvanroy.html&quot;&gt;Peter&lt;/a&gt;!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/28">Guest Bloggers</category>
 <pubDate>Thu, 19 May 2005 20:27:52 +0000</pubDate>
</item>
</channel>
</rss>
