<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Programming Languages Weblog</title>
 <link>http://lambda-the-ultimate.org</link>
 <description>Programming languages news, articles and discussion</description>
 <language>en</language>
<item>
 <title>Abstract interpreters for free</title>
 <link>http://lambda-the-ultimate.org/node/4063</link>
 <description>&lt;p &gt;&lt;i &gt;Matthew Might, &lt;a href=&quot;http://matt.might.net/papers/might2010free.pdf&quot;&gt;&quot;Abstract interpreters for free&quot;&lt;/a&gt;, Static Analysis Symposium 2010 (SAS 2010).&lt;/i&gt; &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
...we present a two-step method to convert a small-step concrete semantics into a family of sound, computable abstract interpretations. The first step re-factors the concrete state-space to eliminate recursive structure; this refactoring of the state-space simultaneously determines a store-passing-style transformation on the underlying concrete semantics. The second step uses inference rules to generate an abstract state-space and a Galois connection simultaneously. The Galois connection allows the calculation of the “optimal” abstract interpretation. The two-step process is unambiguous, but nondeterministic: at each step, analysis designers face choices. Some of these choices ultimately influence properties such as flow-, field- and context-sensitivity. Thus, under the method, we can give the emergence of these properties a graph-theoretic characterization.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The work in this paper provides some context for known static analysis techniques like &lt;i &gt;k&lt;/i&gt;-CFA, and also opens up some interesting new directions for static analysis development. Also, as Matt points out, there are some pedagogical benefits to having a systematic process for getting from semantics to abstract interpretation. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <pubDate>Sun, 29 Aug 2010 09:31:51 -0400</pubDate>
</item>
<item>
 <title>Sapir-Whorf 70 years on</title>
 <link>http://lambda-the-ultimate.org/node/4062</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Linguistic_relativity#Programming_languages&quot;&gt;Many a people&lt;/a&gt; have looked at Programming Lanugages through the &lt;a href=&quot;http://en.wikipedia.org/wiki/Linguistic_relativity&quot;&gt;Sapir-Whorf&lt;/a&gt; lens so it&#039;s not uncommon to find people making PL claims using that hypothesis. Also not surprisingly, the topic keeps &lt;a href=&quot;http://lambda-the-ultimate.org/search/node/sapir+whorf&quot;&gt;re-appearing here on LtU&lt;/a&gt;. &lt;/p&gt;
&lt;p &gt;This week&#039;s NY Times magazine has an article titled &lt;a href=&quot;http://www.nytimes.com/2010/08/29/magazine/29language-t.html&quot;&gt;Does Your Language Shape How You Think?&lt;/a&gt; by &lt;a href=&quot;http://www.guydeutscher.org/&quot;&gt;Guy Deutscher&lt;/a&gt; which starts as a retrospective on Whorf but then goes into what new research has shown.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Some 50 years ago, the renowned linguist &lt;a href=&quot;http://en.wikipedia.org/wiki/Roman_Jakobson&quot;&gt;Roman Jakobson&lt;/a&gt; pointed out a crucial fact about differences between languages in a pithy maxim: &lt;em &gt;“Languages differ essentially in what they must convey and not in what they may convey.”&lt;/em&gt; This maxim offers us the key to unlocking the real force of the mother tongue: if different languages influence our minds in different ways, this is not because of what our language allows us to think but rather because of what it habitually obliges us to think about.&lt;/p&gt;
&lt;p &gt;...&lt;/p&gt;
&lt;p &gt;When your language routinely obliges you to specify certain types of information, it forces you to be attentive to certain details in the world and to certain aspects of experience that speakers of other languages may not be required to think about all the time. And since such habits of speech are cultivated from the earliest age, it is only natural that they can settle into habits of mind that go beyond language itself, affecting your experiences, perceptions, associations, feelings, memories and orientation in the world.
&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/4">Critiques</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <pubDate>Sat, 28 Aug 2010 02:35:20 -0400</pubDate>
</item>
<item>
 <title>Ocaml 3.12 released</title>
 <link>http://lambda-the-ultimate.org/node/4050</link>
 <description>&lt;p &gt;This notice comes a little late, but the &lt;a href=&quot;http://caml.inria.fr/ocaml/release.en.html&quot;&gt;latest version of OCaml&lt;/a&gt;, version 3.12, has been released. Surprisingly, for a point release there&#039;s a lot of interesting new language features: &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Some of the highlights in release 3.12 are:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt; Polymorphic recursion is supported, using explicit type declarations on the recursively-defined identifiers.
&lt;li &gt; First-class modules: module expressions can be embedded as values of the core language, then manipulated like any other first-class value, then projected back to the module level.
&lt;li &gt; New operator to modify a signature a posteriori: &lt;code &gt;S with type t := tau&lt;/code&gt; denotes signature &lt;code &gt;S&lt;/code&gt; where the &lt;code &gt;t&lt;/code&gt; type component is removed and substituted by the type tau elsewhere.
&lt;li &gt; New notations for record expressions and record patterns: &lt;code &gt;{ lbl }&lt;/code&gt; as shorthand for &lt;code &gt;{ lbl = lbl }, and { ...; _ }&lt;/code&gt; marks record patterns where some labels were intentionally omitted.
&lt;li &gt; Local open &lt;code &gt;let open ... in ...&lt;/code&gt; now supported by popular demand.
&lt;li &gt; Type variables can be bound as type parameters to functions; such types are treated like abstract types within the function body, and like type variables (possibly generalized) outside.
&lt;li &gt; The module type of construct enables to recover the module type of a given module.
&lt;li &gt; Explicit method override using the &lt;code &gt;method!&lt;/code&gt; keyword, with associated warnings and errors.
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I&#039;m especially intrigued by first-class modules, and the destructive signature operations, both of which should make it much easier to write libraries.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Tue, 17 Aug 2010 06:22:46 -0400</pubDate>
</item>
<item>
 <title>Type Classes as Objects and Implicits</title>
 <link>http://lambda-the-ultimate.org/node/4039</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ropas.snu.ac.kr/~bruno/papers/TypeClasses.pdf&quot;&gt;Type Classes as Objects and Implicits&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
&lt;em &gt;Type classes&lt;/em&gt; were originally developed in Haskell as a disciplined alternative to ad-hoc polymorphism. Type classes have been shown to provide a type-safe solution to important challenges in software engineering and programming languages such as, for example, &lt;em &gt;retroactive extension&lt;/em&gt; of programs. They are also recognized as a good mechanism for &lt;em &gt;concept&lt;/em&gt;-based &lt;em &gt;generic programming&lt;/em&gt; and, more recently, have evolved into a mechanism for type-level computation. This paper presents a lightweight approach to type classes in object-oriented (OO) languages with generics using the CONCEPT pattern and &lt;em &gt;implicits&lt;/em&gt; (a type-directed implicit parameter passing mechanism).&lt;/p&gt;
&lt;p &gt;This paper also shows how Scala’s type system conspires with implicits to enable, and even surpass, many common extensions of the Haskell type class system, making Scala ideally suited for generic programming in the large.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Martin Odersky and team&#039;s design decisions around how to do type classes in a unified OO and FP language continue to bear fascinating fruit. Implicits look less and less like &quot;poor man&#039;s type classes,&quot; and more and more like an improvement upon type classes, in my opinion given a quick read of this paper.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Wed, 04 Aug 2010 18:25:48 -0400</pubDate>
</item>
<item>
 <title>What Sequential Games, the Tychonoff Theorem and the Double-Negation Shift have in Common</title>
 <link>http://lambda-the-ultimate.org/node/4037</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.bham.ac.uk/~mhe/papers/msfp2010/&quot;&gt;What Sequential Games, the Tychonoff Theorem, and the Double-Negation Shift have in Common&lt;/a&gt;, Martin Escardo and Paulo Oliva, to appear in MSFP 2010.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This is a tutorial for mathematically inclined functional programmers, based on previously published, peered reviewed theoretical work. We discuss a higher-type functional, written here in the functional programming language Haskell, which &lt;/p&gt;
&lt;ol &gt;
&lt;li &gt;optimally plays sequential games,
&lt;li &gt;implements a computational version of the Tychonoff Theorem from topology, and
&lt;li &gt; realizes the Double-Negation Shift from logic and proof theory.
&lt;/ol&gt;
&lt;p &gt;The functional makes sense for finite and infinite (lazy) lists, and in the binary case it amounts to an operation that is available in any (strong) monad. &lt;/p&gt;
&lt;p &gt;In fact, once we define this monad in Haskell, it turns out that this amazingly versatile functional is already available in Haskell, in the standard prelude, called &lt;code &gt;sequence&lt;/code&gt;, which iterates this binary operation. Therefore Haskell proves that this functional is even more versatile than anticipated, as the function sequence was introduced for other purposes by the language designers, in particular the iteration of a list of monadic effects (but effects are not what we discuss here).
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;One of the most durable and productive analogies in semantics is the analogy between computability and continuity. Depending on how you read the history, this idea might even predate computers: Brouwer proved that all intuitonistic functions on the reals were continuous.&lt;/p&gt;
&lt;p &gt;Over the last few years, Escardo and his collaborators have done a lot of cool stuff showing how this network of ideas can be turned into miraculous-looking little programs, so it&#039;s very nice to see a relatively accesible introduction to this work. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Wed, 04 Aug 2010 06:12:04 -0400</pubDate>
</item>
<item>
 <title>It&#039;s been ten years!</title>
 <link>http://lambda-the-ultimate.org/node/4025</link>
 <description>&lt;p &gt;It has been &lt;a href=&quot;http://lambda-the-ultimate.org/classic/message1.html&quot;&gt;ten years&lt;/a&gt; since LtU was launched. When I launched it I had no idea if anyone will read the site, let alone if people contribute new stories. The result exceeded my wildest hopes.&lt;p &gt;
I got into the habit of writing a few words every year, a kind of &quot;state of lambda&quot; post. Somehow, this feels inappropriate for the ten year anniversary. I will possibly post something about last year later this week, but let&#039;s take a moment to celebrate our first ten years.&lt;p &gt;
There are a lot of things that can be said, and a few things that perhaps should be said. I personally will say little. The thread is open.&lt;p &gt;
For my part, I just want to thank all those how contributed to LtU over the years, whether by submitting new stories, by participating in the discussion, or with help with administrative and hosting issues. Some, of course, helped with any and all tasks.&lt;p &gt;
It is great to see that some members that have been with LtU from its early years are still here. Some members that left have come back, and those that decided to move on to other things are still part of the ethos of LtU, as well as the archives, as we move towards the future.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/3">Admin</category>
 <pubDate>Wed, 28 Jul 2010 01:26:56 -0400</pubDate>
</item>
<item>
 <title>The Mirah Language</title>
 <link>http://lambda-the-ultimate.org/node/4020</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.mirah.org/wiki/MirahFeatures&quot;&gt;Mirah&lt;/a&gt; is a new language from Charles Nutter, the developer of JRuby. He describes it thus:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Mirah is ... a repurposing of Ruby’s syntax to a flexible toolchain suitable for compiling to any number of type systems and runtimes with maximum performance.&lt;/p&gt;
&lt;p &gt;Mirah’s design is centered around a few simple principals:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;Platform-agnostic&lt;/li&gt;
&lt;li &gt;Free from concrete decisions about the back-end type system&lt;/li&gt;
&lt;li &gt;Code generation, or other details are specified by the outward language&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I think Mirah is a bit too new to make a front-page post. It is interesting and also puzzling in that it doesn&#039;t really define a semantics. E.g. &amp;ldquo;roughly similar scripts could conceivably compile to any number of type systems and runtimes. In this sense, Mirah is more of a rough coupling of Ruby-like syntax with a pluggable type-inference and compilation pipeline.&amp;rdquo; Can you actually claim you&#039;ve created a language if the semantics of the language aren&#039;t specified? I&#039;m not sure whether to file this under interesting or quackers.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Fri, 23 Jul 2010 07:16:07 -0400</pubDate>
</item>
<item>
 <title>Scribble: Closing the Book on Ad Hoc Documentation Tools</title>
 <link>http://lambda-the-ultimate.org/node/4017</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.utah.edu/plt/publications/icfp09-fbf.pdf&quot;&gt;Scribble: Closing the Book on Ad Hoc Documentation Tools&lt;/a&gt;. Matthew Flatt, Eli Barzilay, and Robert Bruce Findler. ICFP &#039;09.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Scribble is a new system for writing library documentation, user guides, and tutorials. Scribble builds on PLT Scheme’s technology for language extension, and at its heart is a new approach to connecting prose references with library bindings. We have built Scribble libraries that support standalone documentation and papers, JavaDoc-style API documentation, and literate programming. Thanks in large part to Scribble’s flexibility and the ease with which we can cross-reference information across different levels, the documentation that is distributed with PLT Scheme now runs into the thousands of pages. This paper reports on the use of Scribble and on its design as both an extension and extensible part of PLT Scheme.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This introduces a cute and well thought out syntax for writing technical prose and for escaping back into the PL for typesetting operations and cross-references to PL values.  It looks reminiscent of TeX, but has a direct transformation to S-expressions.  Scribble also makes great use of PLT Scheme&#039;s modular and polyglot programming facilities.&lt;/p&gt;
&lt;p &gt;A nice twist on the classic Scheme ploy:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;A documentation language should be designed not by piling escape conventions on top of a comment syntax, but by removing the weaknesses and restrictions of the programming language that make a separate documentation language appear necessary. Scribble demonstrates that a small number of rules for forming documentation, with no restrictions on how they are composed, suffice to form a practical and efficient documentation language that is flexible enough to support the major documentation paradigms in use today.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;(P.S. To which I&#039;d like to add, somewhat OT, that compared to PLT &lt;em &gt;Scheme&lt;/em&gt;, Common Lisp is starting to look &lt;em &gt;teeny&lt;/em&gt;.)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Tue, 20 Jul 2010 21:18:45 -0400</pubDate>
</item>
<item>
 <title>The Future of C#</title>
 <link>http://lambda-the-ultimate.org/node/4016</link>
 <description>&lt;p &gt;One of the future additions to C# announced by Anders Hejlsberg in &lt;a href=&quot;http://channel9.msdn.com/pdc2008/TL16/&quot;&gt;this entertaining video&lt;/a&gt; from 2008 is &lt;em &gt;Compiler as a Service&lt;/em&gt;. By that he means the ability to &lt;code &gt;eval&lt;/code&gt; code strings (and I&#039;m guessing that this will also be integrated with C#&#039;s built-in AST objects).&lt;/p&gt;
&lt;p &gt;He shows this off at around minute 59, to great effect and great excitement by the audience.  It feels like an inflection point.  There probably won&#039;t be another REPL-less language from now on.&lt;/p&gt;
&lt;p &gt;I predict that after that, they&#039;ll add hygienic macros and quasisyntax.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/23">Cross language runtimes</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Mon, 19 Jul 2010 20:54:51 -0400</pubDate>
</item>
<item>
 <title>App Inventor: Programming for non-programmers... again</title>
 <link>http://lambda-the-ultimate.org/node/4011</link>
 <description>&lt;p &gt;From the &lt;a href=&quot;http://appinventor.googlelabs.com/about/&quot;&gt;App Inventor about page&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;To use App Inventor, you do not need to be a developer. App Inventor requires NO programming knowledge. This is because instead of writing code, you visually design the way the app looks and use blocks to specify the app&#039;s behavior.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;It seems we&#039;ve been here before. (and I don&#039;t just mean that it&#039;s based on &lt;a href=&quot;http://dspace.mit.edu/handle/1721.1/41550&quot;&gt;Open Blocks&lt;/a&gt; and &lt;a href=&quot;http://www.gnu.org/software/kawa/&quot;&gt;Kawa&lt;/a&gt;)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Mon, 12 Jul 2010 15:50:18 -0400</pubDate>
</item>
<item>
 <title>The Rust Language</title>
 <link>http://lambda-the-ultimate.org/node/4009</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://wiki.github.com/graydon/rust/&quot;&gt;Rust&lt;/a&gt; is systems programming languages being developed by Mozilla. It&#039;s very preliminary work, but the &lt;a href=&quot;http://wiki.github.com/graydon/rust/language-faq&quot;&gt;list of features&lt;/a&gt; suggests an interesting intersection of features. I&#039;m particularly excited by the control over memory layout that Rust gives to the programmer, but it also has massive concurrency, structural typing, and the &amp;ldquo;ability to define complex invariants that hold over data structures&amp;rdquo; in its bag of tricks.&lt;/p&gt;
&lt;p &gt;The main developer is Graydon Hoare, with contributions from heroes-to-the-Internet Dave Herman and Brendan Eich amongst others.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Thu, 08 Jul 2010 09:37:44 -0400</pubDate>
</item>
<item>
 <title>Handlers of Algebraic Effects</title>
 <link>http://lambda-the-ultimate.org/node/4006</link>
 <description>&lt;p &gt;Matija Pretnar, Gordon Plotkin (2009) &lt;A href=&quot;http://matija.pretnar.info/handlers-of-algebraic-effects.pdf&quot;&gt;Handlers of Algebraic Effects&lt;/A&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present an algebraic treatment of exception handlers and,&lt;br &gt;
more generally, introduce handlers for other computational effects repre-&lt;br &gt;
sentable by an algebraic theory. These include nondeterminism, interac-&lt;br &gt;
tive input/output, concurrency, state, time, and their combinations; in&lt;br &gt;
all cases the computation monad is the free-model monad of the theory.&lt;br &gt;
Each such handler corresponds to a model of the theory for the effects&lt;br &gt;
at hand. The handling construct, which applies a handler to a compu-&lt;br &gt;
tation, is based on the one introduced by &lt;A href=&quot;http://lambda-the-ultimate.org/node/1193&quot;&gt;Benton and Kennedy&lt;/A&gt;, and is&lt;br &gt;
interpreted using the homomorphism induced by the universal property&lt;br &gt;
of the free model. This general construct can be used to describe previ-&lt;br &gt;
ously unrelated concepts from both theory and practice.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Handling a computational effect, such as raising an exception, amounts to homomorphically mapping the handled computation onto another computation. So, for example, &lt;code &gt;raise&lt;/code&gt; is interpreted as the exception handling code given to the handler.&lt;/p&gt;
&lt;p &gt;While encompassing both returning and non-returning handlers, this idea becomes more interesting when you start to handle the other effects, such as &lt;code &gt;lookup&lt;/code&gt; and update&lt;/code&gt;. Then you can get things like state rollback when an exception occurs, and others (CSS renaming and hiding, stream redirection, timeout). Thus the semantics of handlers gives rise to a new programming construct.&lt;/p&gt;
&lt;p &gt;If you want a gentler introduction to the subject (along with Plotkin&#039;s &lt;A href=&quot;http://lambda-the-ultimate.org/node/1024&quot;&gt;algebraic theory of effects&lt;/A&gt; and Levy&#039;s &lt;A href=&quot;http://lambda-the-ultimate.org/node/1975&quot;&gt;Call-by-Push-Value&lt;/A&gt;), try Pretnar&#039;s &lt;A href=&quot;http://matija.pretnar.info/the-logic-and-handling-of-algebraic-effects.pdf&quot;&gt;2010 thesis.&lt;/A&gt;&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Sun, 04 Jul 2010 05:54:45 -0400</pubDate>
</item>
<item>
 <title>Traceable Data Types for Self-Adjusting Computation</title>
 <link>http://lambda-the-ultimate.org/node/4004</link>
 <description>&lt;p &gt;This post is triggered by Jules asking, essentially, &lt;a href=&quot;http://lambda-the-ultimate.org/node/4001&quot;&gt;how could FRP support imperative structures&lt;/a&gt;? Part of the answer is about interface -- a command becomes an input stream of commands, which is a common pattern in systems like Max/MSP, and most FRP systems also provide mutable reactive cells (... a worthwhile topic for another day). More interesting is when we want a particular imperative implementation that the automatic incrementalizer wouldn&#039;t have picked, such as a hand-tuned one in a lower-level language. Sometimes, a reactive language supports interfacing with alternative implementations in other languages automatically, as in &lt;a href=&quot;http://www.cs.brown.edu/~sk/Publications/Papers/Published/ick-adapt-oo-fwk-frp/&quot;&gt;Crossing State Lines: Adopting OO Frameworks to Functional Reactive Languages&lt;/a&gt;, but, as long as the incrementalization algorithm supports foreign computations, even language users can do it (e.g., Flapjax supports manual lifting of the DOM, I also did arrays, etc.). &lt;/p&gt;
&lt;p &gt;The following recent paper, &lt;a href=&quot;http://www.mpi-sws.org/~umut/papers/pldi10.pdf&quot;&gt;Traceable Data Types for Self-Adjusting Computation&lt;/a&gt;, can be interpreted as an explanation of why it has been sensible performance-wise for an FRP system like Flapjax to lift a library like the DOM: in a typed setting, the library is an ADT that has been tuned to take care of its own incrementalization and thus we just need a bit of glue to lift it:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In this paper, we extend dependence-tracing to work at the granularity of the query and update operations of arbitrary (abstract) data types, instead of just reads and writes on memory cells. This can significantly reduce the number of dependencies that need to be kept in the trace and followed during an update. We define an interface for supporting a traceable version of a data type, which reports the earliest query that depends on (is changed by) revising operations back in time, and implement several such structures, including priority queues, queues, dictionaries, and counters. We develop a semantics for tracing, extend an existing self-adjusting language, ∆ML, and its implementation to support traceable data types, and present an experimental evaluation by considering a number of benchmarks. Our experiments show dramatic improvements on space and time, sometimes by as much as two orders of magnitude.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A little more out there, and why I liked this paper, is its typed phrasing allows you to reduce the typical lifting+FFI approach for automatic incrementalization of general programs to being an instance of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Expression_Problem&quot;&gt;the expression problem&lt;/a&gt;. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/1">LtU Forum</category>
 <pubDate>Sat, 03 Jul 2010 19:35:31 -0400</pubDate>
</item>
<item>
 <title>An intuitionistic logic that proves Markov&#039;s principle</title>
 <link>http://lambda-the-ultimate.org/node/4003</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://pauillac.inria.fr/~herbelin/publis/lics-Her10-markov.pdf&quot;&gt;“An intuitionistic logic that proves Markov&#039;s principle”&lt;/a&gt;, Hugo Herbelin, LICS 2010. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We design an intuitionistic predicate logic that supports a limited amount of classical reasoning, just enough to prove a variant of Markov’s principle suited for predicate logic.&lt;/p&gt;
&lt;p &gt;At the computational level, the extraction of an existential witness out of a proof of its double negation is done by using a form of statically-bound exception mechanism, what can be seen as a direct-style variant of Friedman’s A-translation.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Markov&#039;s principle is an axiom of &quot;Russian constructivism&quot;. It says that if P is a decidable predicate (i.e., the formula &amp;forall;x. P(x) or &amp;not;P(x) is constructively provable), then if we know that P is not always false (ie &amp;not;(&amp;forall;x. &amp;not;P(x))), then there exists an x such that P holds (ie &amp;exist;x. P(x)). &lt;/p&gt;
&lt;p &gt;One operational way of understanding this axiom is that it says is that if we know P is not always false (on, say, the natural numbers), we can find an element for which it is true with a while-loop: check to see if 1 is true, and then check to see if 2 is true, and so on, stopping when you hit a number for which it holds. This means that Markov&#039;s principle is a principle of unbounded search, and as a result it has controversial status in intuitionistic mathematics -- should we regard a program with a non-constructive termination proof as a constructively terminating program? (The answer is, as usual, &quot;it depends&quot;: in different applications you can want it or not.) &lt;/p&gt;
&lt;p &gt;However, just chucking an axiom like &amp;not;(&amp;forall;x. &amp;not;P(x)) &amp;rarr; &amp;exist;x. P(x) into your proof rules is not very nice from a proof-theoretic perspective. It mixes up a bunch of different logical connectives, and adding it as an axiom will break things like the cut-elimination theorem for sequent calculus. &lt;/p&gt;
&lt;p &gt;In this paper, Herbelin exploits (a) the fact that Markov&#039;s principle is a (mildly) classical principle of reasoning, and (b) the fact that classical logic is connected with control operators like continuations, to give a logic which is proof-theoretically well-behaved, but which supports Markov&#039;s principle. The trick is to add first-class continuations, but only for &lt;em &gt;value types&lt;/em&gt; (ie, you can throw products and sums, but not functions). &lt;/p&gt;
&lt;p &gt;What I find surprising is that this same class of restriction also arises in another paper on control operators at LICS -- Noam Zeilberger&#039;s paper &lt;a href=&quot;http://www.pps.jussieu.fr/~noam/papers/polpol.pdf&quot;&gt;&quot;Polarity and the Logic of Delimited Continuations&quot;&lt;/a&gt; uses it too. (This paper deserves a post here too.)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 02 Jul 2010 05:36:04 -0400</pubDate>
</item>
<item>
 <title>Compiling Structural Types on the JVM</title>
 <link>http://lambda-the-ultimate.org/node/3998</link>
 <description>&lt;p &gt;Here&#039;s a little sausage making article for JVM language implementors.  In &lt;a href=&quot;http://infoscience.epfl.ch/record/138931/files/2009_structural.pdf&quot;&gt;Compiling Structural Types on the JVM: A Comparison of Reflective and Generative Techniques from Scala’s Perspective&lt;/a&gt;, Gilles Dubochet and Martin Odersky describe&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Scala’s compilation technique of structural types for the JVM. The technique uses Java reflection and polymorphic inline caches. Performance measurements of this technique are presented and analysed. Further measurements compare Scala’s reflective technique with the “generative” technique used by Whiteoak to compile structural types. The article ends with a comparison of reflective and generative techniques for compiling structural types. It concludes that generative techniques may, in specific cases, exhibit higher performances than reflective approaches, but that reflective techniques are easier to implement and have fewer restrictions.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;There&#039;s no discussion of the the proposed JVM &quot;&lt;a href=&quot;http://blogs.sun.com/jrose/entry/method_handles_in_a_nutshell&quot;&gt;method handles&lt;/a&gt;&quot; and whether they might be an even better solution than runtime reflection.&lt;/p&gt;
&lt;p &gt;Whiteoak was mentioned &lt;a href=&quot;http://lambda-the-ultimate.org/node/3048&quot;&gt;previously on LtU&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/23">Cross language runtimes</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <pubDate>Wed, 30 Jun 2010 11:18:49 -0400</pubDate>
</item>
</channel>
</rss>
