<<< Previous speaker next speaker >>>

Architect Erik Meijer, Microsoft

Architect Erik  Meijer

Erik Meijer is an architect in the Microsoft SQL server division where he currently works together with the Microsoft Visual C# and the Microsoft Visual Basic language design teams on data integration in programming languages.

Prior to joining Microsoft he was an associate professor at Utrecht University and adjunct professor at the Oregon Graduate Institute.

Erik is one of the designers of the standard functional programming language Haskell98 and more recently the Cw language.

Presentation: "Why Functional Programming (Still) Matters"

Time: Monday 17:00 - 17:50

Location: Store Sal

Abstract: In 1984, John Hughes wrote a seminal paper "Why Functional Programming Matters" in which he eloquently explained the value of pure and lazy functional programming. Due to the increasing importance of the Web and the introduction of multi-core machines, in the quarter century since the appearance of the paper, the problems associated with effectful imperative languages have reached a point where we hit a brick wall. We argue that fundamentalist functional programming, that is radically eliminating all side-effects from our programming languages, including strict evaluation, is what it takes to conquer the concurrency and parallelism dragon. We must embrace pure lazy functional programming "all the way", with all effects apparent in the type system of the host language using monads. Only a radical paradigm shift can save us, but does that mean that we will lose all current programmers along the way? Fortunately not. By design, LINQ is based on monadic principles. The success of LINQ proves that the world does not fear the monads.

Presentation: "LINQ + New Microsoft Things"

Time: Wednesday 11:30 - 12:20

Location: Kammermusik

Abstract: A recurring problem in API design is to provide a compositional interface to side-effecting operations, and/or to collection-valued operations. Many traditional API's, such as for instance the W3C DOM, are very imperative and statement-oriented, and hence non-compositional. Imperative API's force programmers to work at a low-level of abstraction and result in convoluted and unnatural code. Fortunately, in the first half of the last century, mathematicians invented monads, which have subsequently migrated to the computer science mainstream via functional programming (mainly Haskell) and have recently shown up as LINQ in C# 3.0 and Visual Basic. Monads/LINQ enable API writers to define compositional interfaces by implementing a set of standard "query" operators on top of which programming languages define syntactic sugar in the form of comprehensions. In this talk we will explain LINQ from first principles, and show several new and unusual LINQ variants such as LINQ to DataCenter for describing massively parallel map-reduce style computations and LINQ to Charts for compositional generation of charts.

Presentation: "JavaScript as an Assembly Language"

Time: Wednesday 14:40 - 15:30

Location: Rytmisk Sal


JavaScript was originally designed as a "scripting language or some kind of language inside the browser that could be used to automate parts of a web page or make a web page more dynamic" [http://cgi.netscape.com/columns/techvision/innovators_be.html].

The original designers probably did not anticipate the fact that a decade later people would want to write complete applications such as word processors, spreadsheets, mail clients, etc, inside the browser. The extreme flexibility and dynamism of JavaScript and the lack of modularity makes it hard for human developers to scale JavaScript programs beyond simple scripts. For instance, you have to be extremely careful to not make any typos in variable names; you have to manually encode namespaces and classes, there are no standard libraries. As a result, programs become fragile and the signal to noise ratio degrades significantly.

Every disadvantage has an advantage however, and while JavaScript is not such a great language for authoring large programs, JavaScript is actually a fantastic target language for compilers. Just like assembler languages, JavaScript lacks a restrictive static type system and allows for a certain amount of self-modifying code, but unlike typical assembler languages, JavaScript actually has high-level language features such as closures and exceptions. Moreover, JavaScript has the additional advantage that it comes with every Web browser. As a result, we see an increasing number of high-level languages that are compiled to JavaScript. Examples include Java, OCaml, ObjectiveC, Scheme, Haskell, and many others.

In contrast to this trend, Volta compiles a low-level assembly language, .NET MSIL, to JavaScript. In this talk we will explain the challenges and advantages of JavaScript as a target language, in particular the fact that JavaScript lacks jumps and gotos. We will also drill down into a foreign language interface between JavaScript and .NET.