<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Implementation</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/8/0</link>
 <description>language implementation techniques. GC, compilation etc.</description>
 <language>en</language>
<item>
 <title>Bart De Smet on .NET 4&#039;s System.Interactive library</title>
 <link>http://lambda-the-ultimate.org/node/3822</link>
 <description>&lt;p &gt;Microsoft employee Bart De Smet, who has a widely trafficked blog, has been writing a lot in the past few months about a new library being designed by his group at Microsoft.  Here is a whole truckload of blogpost links, in chronological order, which appears to be how Bart intended folks to read it:&lt;/p&gt;
&lt;p &gt;Dec 26, 2009: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2009/12/26/more-linq-with-system-interactive-the-ultimate-imperative.aspx&quot;&gt;More LINQ with System.Interactive – The Ultimate Imperative&lt;/a&gt;&lt;br &gt;
Dec 27, 2009: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2009/12/27/more-linq-with-system-interactive-exceptional-exception-handling.aspx&quot;&gt;More LINQ with System.Interactive – Exceptional Exception Handling&lt;/a&gt;&lt;br &gt;
Dec 28, 2009: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2009/12/28/more-linq-with-system-interactive-sequences-under-construction.aspx&quot;&gt;More LINQ with System.Interactive – Sequences under construction&lt;/a&gt;&lt;br &gt;
Dec 29, 2009: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2009/12/29/more-linq-with-system-interactive-exploiting-the-code-data-relationship.aspx&quot;&gt;More LINQ with System.Interactive – Exploiting the code = data relationship&lt;/a&gt;&lt;br &gt;
Dec 30, 2009: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2009/12/30/more-linq-with-system-interactive-more-combinators-for-your-swiss-army-knife.aspx&quot;&gt;More LINQ with System.Interactive – More combinators for your Swiss Army Knife&lt;/a&gt;&lt;br &gt;
Jan 01, 2010: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2010/01/01/the-essence-of-linq-minlinq.aspx&quot;&gt;The Essence of LINQ – MinLINQ&lt;/a&gt;&lt;br &gt;
Jan 07, 2010: &lt;a href=&quot;http://community.bartdesmet.net/blogs/bart/archive/2010/01/07/more-linq-with-system-interactive-functional-fun-and-taming-side-effects.aspx&quot;&gt;More LINQ with System.Interactive – Functional fun and taming side-effects&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;I don&#039;t usually read blogs, but I thought this was a pretty cogent series of posts.  Also, judging by how interested LtU and the surrounding blogosphere community was from Erik Meijer&#039;s presentation on the Rx framework at the &lt;A href=&quot;http://lambda-the-ultimate.org/node/3619&quot;&gt;JVM Language Summit 2009&lt;/a&gt;, I figured people would like this as well.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/4">Critiques</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Fri, 12 Feb 2010 13:37:30 -0500</pubDate>
</item>
<item>
 <title>Resolving and Exploiting the k-CFA Paradox</title>
 <link>http://lambda-the-ultimate.org/node/3814</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.ccs.neu.edu/home/dvanhorn/pubs/might-smaragdakis-vanhorn-preprint09.pdf&quot;&gt;Resolving and Exploiting the k-CFA Paradox&lt;/a&gt;, Matthew Might, Yannis Smaragdakis, and David Van Horn. To appear in PLDI 2010. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Low-level program analysis is a fundamental problem, taking the shape of &quot;flow analysis&quot; in functional languages and &quot;points-to&quot; analysis in imperative and object-oriented (OO) languages. Despite the similarities, the vocabulary and results in the two communities remain largely distinct, with limited cross-understanding. One of the few links is Shivers&#039;s k-CFA work, which has advanced the concept of &quot;context-sensitive analysis&quot; and is widely known in both communities. Recent results, however, indicate that the relationship between the different incarnations of the analysis is not understood. &lt;/p&gt;
&lt;p &gt;Van Horn and Mairson proved k-CFA for k ≥ 1 to be EXPTIME-complete, hence no polynomial algorithm exists. Yet there have been multiple polynomial formulations of context-sensitive points-to analyses in OO languages. Is functional k-CFA a profoundly different analysis from OO k-CFA? We resolve this paradox by showing that OO features conspire to make the exact same specification of k-CFA be polynomial-time: objects and closures are subtly different, in a way that interacts crucially with context-sensitivity. This leads to a significant practical result: by emulating the OO approximation, we derive a polynomial hierarchy of context-sensitive CFAs for functional programs, simultaneously achieving high precision and efficiency.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I learned that performance bounds on flow analysis were fascinating from &lt;a href=&quot;http://lambda-the-ultimate.org/node/2647&quot;&gt;earlier work by David van Horn and Harry Mairson&lt;/a&gt;, so it&#039;s good to see that this line of work is still being continued, and even better to see new algorithms come out of it. &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/19">Theory</category>
 <pubDate>Mon, 08 Feb 2010 12:24:16 -0500</pubDate>
</item>
<item>
 <title>Delimited Control in OCaml, Abstractly and Concretely, System Description</title>
 <link>http://lambda-the-ultimate.org/node/3788</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://okmij.org/ftp/Computation/caml-shift.pdf&quot;&gt;Delimited Control in OCaml, Abstractly and Concretely, System Description&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We describe the first implementation of multi-prompt delimited control operators in OCaml that is direct in that it captures only the needed part of the control stack. The implementation is a library that requires no changes to the OCaml compiler or run-time, so it is perfectly compatible with existing OCaml source code and byte-code. The library has been in fruitful practical use for four years.&lt;/p&gt;
&lt;p &gt;We present the library as an implementation of an abstract machine derived by elaborating the definitional machine. The abstract view lets us distill a minimalistic API, scAPI, sufficient for implementing multi-prompt delimited control. We argue that a language system that supports exception and stack-overflow handling supports scAPI. Our library illustrates how to use scAPI to implement multi-prompt delimited control in a typed language. The approach is general and can be used to add multi-prompt delimited control to other existing language systems.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Oleg was kind enough to send me an e-mail letting me know of this paper&#039;s existence (it appears not yet to be linked from the &quot;Computation&quot; page under which it is stored) and to include me in the acknowledgements. Since the paper in its current form has been accepted for publication, he indicated that it can be made more widely available, so here it is. In typical Oleg fashion, it offers insights at both the theoretical and implementation levels.&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/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 25 Jan 2010 12:27:44 -0500</pubDate>
</item>
<item>
 <title>Verified Just-In-Time Compiler on x86</title>
 <link>http://lambda-the-ultimate.org/node/3768</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cl.cam.ac.uk/~mom22/jit/jit.pdf&quot;&gt;Verified Just-In-Time Compiler on x86&lt;/a&gt;&lt;br &gt;
&lt;i &gt;&lt;a href=&quot;http://www.cl.cam.ac.uk/~mom22/&quot;&gt;Magnus O. Myreen&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;This paper presents a method for creating formally correct just-in-time (JIT) compilers. The tractability of our approach is demonstrated through, what we believe is the first, verification of a JIT compiler with respect to a realistic semantics of self-modifying x86 machine code. Our semantics includes a model of the instruction cache. Two versions of the verified JIT compiler are presented: one generates all of the machine code at once, the other one is incremental i.e. produces code on-demand. All proofs have been performed inside the HOL4 theorem prover.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;(To appear in next week&#039;s &lt;a href=&quot;http://www.cse.psu.edu/popl/10/program.html&quot;&gt;POPL&lt;/a&gt;.)&lt;/p&gt;
&lt;p &gt;I&#039;ve been enjoying this paper on my commute this week. It&#039;s a nice little distillation of some of the basics of the engineering structure of a JITted language and how the pieces fit together in a correct implementation. As JIT compilers become more and more commonplace, I&#039;d like to see them presented in such a way that they&#039;re no more scary or daunting -- at least in principle -- than traditional offline compilers. Perhaps a chapter in &lt;a href=&quot;http://www.google.com/search?q=site%3Alambda-the-ultimate.org+eopl&quot;&gt;EoPL&lt;/a&gt;4?&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/29">Semantics</category>
 <pubDate>Tue, 12 Jan 2010 12:56:19 -0500</pubDate>
</item>
<item>
 <title>Syntactic Proofs of Compositional Compiler Correctness</title>
 <link>http://lambda-the-ultimate.org/node/3765</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/compose.pdf&quot;&gt;Syntactic Proofs of Compositional Compiler Correctness&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Semantic preservation by compilers for higher-order languages can be veriﬁed using simple syntactic methods. At the heart of classic techniques are relations between source-level and target-level values. Unfortunately, these relations are speciﬁc to particular compilers, leading to correctness theorems that have nothing to say about linking programs with functions compiled by other compilers or written by hand in the target language. Theorems based on logical relations manage to avoid this problem, but at a cost: standard logical relations do not apply directly to programs with non-termination or impurity, and extensions to handle those features are relatively complicated, compared to the classical compiler veriﬁcation literature. &lt;/p&gt;
&lt;p &gt;In this paper, we present a new approach to “open” compiler correctness theorems that is “syntactic” in the sense that the core relations do not refer to semantics. Though the technique is much more elementary than previous proposals, it scales up nicely to realistic languages. In particular, untyped and impure programs may be handled simply, while previous work has addressed neither in this context. &lt;/p&gt;
&lt;p &gt;Our approach is based on the observation that it is an unnecessary handicap to consider proofs as black boxes. We identify some theorem-speciﬁc proof skeletons, such that we can deﬁne an algebra of nondeterministic compilations and their proofs, and we can compose any two compilations to produce a correct-by-construction result. We have prototyped these ideas with a Coq implementation of multiple CPS translations for an untyped Mini-ML source language with recursive functions, sums, products, mutable references, and exceptions.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A submitted draft of another paper from Adam, continuing to expand &lt;a href=&quot;http://ltamer.sourceforge.net&quot;&gt;LambdaTamer&lt;/a&gt;&#039;s reach.&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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:10:05 -0500</pubDate>
</item>
<item>
 <title>A Verified Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3764</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/papers/ImpurePOPL10/&quot;&gt;A Verified Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a verified compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq&#039;s tactic language, making it possible to reuse proofs unchanged as new language features are added.&lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler verification projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general purpose type theories like Coq&#039;s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Further work on/with &lt;a href=&quot;http://ltamer.sourceforge.net/&quot;&gt;LambdaTamer&lt;/a&gt; for certified compiler development.&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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 09 Jan 2010 12:03:42 -0500</pubDate>
</item>
<item>
 <title>EASTL -- Electronic Arts Standard Template Library</title>
 <link>http://lambda-the-ultimate.org/node/3733</link>
 <description>&lt;p &gt;The gaming studio Electronic Arts maintains their own version of the Standard Template Library.  Despite the fact this is old news, I checked the LtU Archives and the new site, and there is no mention of EASTL anywhere.  There are quite a few good blog posts about EASTL on the Internet, as well as the the following paper, &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html&quot;&gt;EASTL -- Electronic Arts Standard Template Library&lt;/a&gt; by Paul Pedriana:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Gaming platforms and game designs place requirements on game software which differ from requirements of other platforms. Most significantly, game software requires large amounts of memory but has a limited amount to work with. Gaming software is also faced with other limitations such as weaker processor caches, weaker CPUs, and non-default memory alignment requirements. A result of this is that game software needs to be careful with its use of memory and the CPU. The C++ standard library&#039;s containers, iterators, and algorithms are potentially useful for a variety of game programming needs. However, weaknesses and omissions of the standard library prevent it from being ideal for high performance game software. Foremost among these weaknesses is the allocator model. An extended and partially redesigned replacement (EASTL) for the C++ standard library was implemented at Electronic Arts in order to resolve these weaknesses in a portable and consistent way. This paper describes game software development issues, perceived weaknesses of the current C++ standard, and the design of EASTL as a partial solution for these weaknesses.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This paper is a good introduction to a unique set of requirements video game development studios face, and compliments Manuel Simoni&#039;s recent story about &lt;a href=&quot;http://lambda-the-ultimate.org/node/3732&quot;&gt;The AI Systems of Left 4 Dead&lt;/a&gt;.  This paper could be a useful inroad to those seeking to apply newer object-functional programming languages and ideas to game development.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/4">Critiques</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Tue, 22 Dec 2009 10:05:35 -0500</pubDate>
</item>
<item>
 <title>Why Object-Oriented Languages Need Tail Calls</title>
 <link>http://lambda-the-ultimate.org/node/3702</link>
 <description>&lt;p &gt;The Fortress blog has a recent post, &lt;a href=&quot;http://projectfortress.sun.com/Projects/Community/blog/ObjectOrientedTailRecursion&quot;&gt;Why Object-Oriented Languages Need Tail Calls&lt;/a&gt;,  where Guy Steele argues for the necessity of proper tail call implementations without rehashing two of the classic arguments:  state machines and the continuation passing style.   It starts by mentioning William Cook&#039;s &lt;a href=&quot;http://lambda-the-ultimate.org/node/3668&quot;&gt;On Understanding Data Abstraction, Revisited&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;In this blog post we extend one of his examples in order to make a completely different point: object-oriented programming languages need tail calls correctly implemented, not just as a &quot;trivial and optional&quot; optimization of the use of stack space that could be achieved by using iteration statements, but in order to preserve object-oriented abstractions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The post also mentions other papers previously discussed on LtU:  &lt;a href=&quot;http://lambda-the-ultimate.org/node/569&quot;&gt;Automata as Macros&lt;/a&gt;, and &lt;a href=&quot;http://lambda-the-ultimate.org/node/1333&quot;&gt;A Tail-Recursive Machine with Stack Inspection&lt;/a&gt;.&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/14">OOP</category>
 <pubDate>Thu, 03 Dec 2009 13:03:27 -0500</pubDate>
</item>
<item>
 <title>PICBIT: A Scheme System for the PIC Microcontroller</title>
 <link>http://lambda-the-ultimate.org/node/3694</link>
 <description>&lt;p &gt;Marc Feeley and Danny Dubé, &lt;a href=&quot;http://www.iro.umontreal.ca/~feeley/papers/sw03.pdf&quot;&gt;PICBIT: A Scheme System for the PIC Microcontroller&lt;/a&gt;, Fourth Workshop on Scheme and Functional Programming. November 7, 2003.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper explains the design of the PICBIT R4RS Scheme system which specifically targets the PIC microcontroller family. The PIC is a popular inexpensive single-chip microcontroller for very compact embedded systems that has a ROM on the chip and a very small RAM. The main challenge is fitting the Scheme heap in only 2 kilobytes of RAM while still allowing useful applications to be run. PICBIT uses a novel compact (24 bit) object representation suited for such an environment and an optimizing compiler and byte-code interpreter that uses RAM frugally. Some experimental measurements are provided to assess the performance of the system.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A very interesting perspective on language implementation, found via @&lt;a href=&quot;http://twitter.com/dhess&quot;&gt;dhess&lt;/a&gt; and &lt;a href=&quot;http://lambda-the-ultimate.org/node/2124#comment-26595&quot;&gt;previous discussion&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Fri, 27 Nov 2009 10:56:40 -0500</pubDate>
</item>
<item>
 <title>State of the art C compiler optimization tricks</title>
 <link>http://lambda-the-ultimate.org/node/3674</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.linux-kongress.org/2009/slides/compiler_survey_felix_von_leitner.pdf&quot;&gt;A survey about state of the art C compiler optimization tricks&lt;/a&gt;,  Felix von Leitner,  Linux Kongress 2009.&lt;/p&gt;
&lt;p &gt;The introduction and the conclusion is quite well put:&lt;/p&gt;
&lt;blockquote &gt;
&lt;ul &gt;
&lt;li &gt; Optimizing == important. &lt;/li&gt;
&lt;li &gt; But often: Readable code == more important &lt;/li&gt;
&lt;li &gt; &lt;p &gt;Learn what your compiler does
  &lt;p &gt;&lt;b &gt;Then let the compiler do it. &lt;/b&gt;&lt;/p&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote &gt;
&lt;ul &gt;
&lt;li &gt;If you do an optimization, test it on real world data.&lt;/li&gt;
&lt;li &gt;If it’s not drastically faster but makes the code less readable: undo it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;That&#039;s certainly something that I agree with 110%.   And really,  that&#039;s why a good compilers course is so important,  even if the vast majority of students never write a compiler outside of class.&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/18">Teaching &amp; Learning</category>
 <pubDate>Fri, 06 Nov 2009 14:29:31 -0500</pubDate>
</item>
<item>
 <title>Safe Garbage Collection = Regions + Intensional Type Analysis</title>
 <link>http://lambda-the-ultimate.org/node/3634</link>
 <description>&lt;p &gt;&lt;a href=&quot;ftp://ftp.cs.princeton.edu/techreports/1999/609.pdf&quot;&gt;Safe Garbage Collection = Regions + Intensional Type Analysis&lt;/a&gt;, by Daniel C. Wang and Andrew W. Appel:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We present a technique to implement type-safe garbage collectors by combining existing type systems used for compiling type-safe languages. We adapt the type systems used in region inference [16] and intensional type analysis [8] to construct a safe stop-and-copy garbage collector for higher-order polymorphic languages. Rather than using region inference as the primary method of storage management, we show how it can be used to implement a garbage collector which is provably safe. We also introduce a new region calculus with non-nested object lifetimes which is signiﬁcantly simpler than previous calculi. Our approach also formalizes more of the interface between garbage collectors and code generators. The efﬁciency of our safe collectors are algorithmically competitive with unsafe collectors.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I&#039;m surprised this region calculus hasn&#039;t received more attention or follow-up discussion in subsequent papers. It seems eminently practical, as it replaces the more complicated alias analyses required in other region calculi, with garbage collection of region handles; seems like a huge improvement over general GC, assuming region inference is sufficiently precise.&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/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <pubDate>Sun, 11 Oct 2009 16:47:59 -0400</pubDate>
</item>
<item>
 <title>Lifted inference: normalizing loops by evaluation</title>
 <link>http://lambda-the-ultimate.org/node/3566</link>
 <description>&lt;small&gt;&lt;a href=&quot;http://okmij.org/ftp/lift-reduce/lifted.pdf&quot;&gt;Lifted inference: normalizing loops by evaluation.&lt;/a&gt; Oleg Kiselyov and Chung-chieh Shan. &lt;a href=&quot;http://www.brics.dk/~danvy/NBE09/&quot;&gt;2009 Workshop on Normalization by Evaluation&lt;/A&gt;.&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
Many loops in probabilistic inference map almost every individual in their domain to the same result. Running such
loops symbolically takes time sublinear in the domain size. Using normalization by evaluation with first-class delimited continuations, we lift inference procedures to reap this speed-up without interpretive overhead. To express nested loops, we use multiple control delimiters for metacircular interpretation. To express loops over a powerset domain, we convert nested loops over a subset to unnested loops.&lt;/blockquote&gt;&lt;p&gt;

The paper is a bit hard to follow, but there are enough little tricks here to merit attentive reading. Or better yet, read &lt;a href=&quot;http://okmij.org/ftp/lift-reduce/README.dr&quot;&gt;the&lt;/a&gt; &lt;a href=&quot;http://okmij.org/ftp/lift-reduce/&quot;&gt;code&lt;/a&gt;.

The basic PLT idea might be summed as doing abstract interpretation on a shallowly embedded DSL using delimited continuations.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Thu, 13 Aug 2009 22:34:15 -0400</pubDate>
</item>
<item>
 <title>A Veriﬁed Compiler for an Impure Functional Language</title>
 <link>http://lambda-the-ultimate.org/node/3554</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/tmp/imp.pdf&quot;&gt;A Veriﬁed Compiler for an Impure Functional Language&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a veriﬁed compiler to an idealized assembly language from a small, untyped functional language with mutable references and exceptions. The compiler is programmed in the Coq proof assistant and has a proof of total correctness with respect to big-step operational semantics for the source and target languages. Compilation is staged and includes standard phases like translation to continuation-passing style and closure conversion, as well as a common subexpression elimination optimization. In this work, our focus has been on discovering and using techniques that make our proofs easy to engineer and maintain. While most programming language work with proof assistants uses very manual proof styles, all of our proofs are implemented as adaptive programs in Coq’s tactic language, making it possible to reuse proofs unchanged as new language features are added. &lt;/p&gt;
&lt;p &gt;In this paper, we focus especially on phases of compilation that rearrange the structure of syntax with nested variable binders. That aspect has been a key challenge area in past compiler veriﬁcation projects, with much more effort expended in the statement and proof of binder-related lemmas than is found in standard pencil-and-paper proofs. We show how to exploit the representation technique of parametric higher-order abstract syntax to avoid the need to prove any of the usual lemmas about binder manipulation, often leading to proofs that are actually shorter than their pencil-and-paper analogues. Our strategy is based on a new approach to encoding operational semantics which delegates all concerns about substitution to the meta language, without using features incompatible with general-purpose type theories like Coq’s logic.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The latest from Adam Chlipala. Yet another evolutionary step for &lt;a href=&quot;http://lambda-the-ultimate.org/node/2146&quot;&gt;Lambda&lt;/a&gt; &lt;a href=&quot;http://lambda-the-ultimate.org/node/2853&quot;&gt;Tamer&lt;/a&gt;. Between this and &lt;a href=&quot;http://lambda-the-ultimate.org/node/3549&quot;&gt;Ynot&lt;/a&gt; the Coq/certified compiler story seems to be getting more impressive nearly daily.&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>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Mon, 10 Aug 2009 12:09:11 -0400</pubDate>
</item>
<item>
 <title>Effective Interactive Proofs for Higher-Order Imperative Programs</title>
 <link>http://lambda-the-ultimate.org/node/3549</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ynot.cs.harvard.edu/papers/icfp09.pdf&quot;&gt;Effective Interactive Proofs for Higher-Order Imperative Programs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present a new approach for constructing and verifying higher-order, imperative programs using the Coq proof assistant. We build on the past work on the Ynot system, which is based on Hoare Type Theory. That original system was a proof of concept, where every program veriﬁcation was accomplished via laborious manual proofs, with much code devoted to uninteresting low-level details. In this paper, we present a re-implementation of Ynot which makes it possible to implement fully-veriﬁed, higher-order imperative programs with reasonable proof burden. At the same time, our new system is implemented entirely in Coq source ﬁles, showcasing the versatility of that proof assistant as a platform for research on language design and veriﬁcation. &lt;/p&gt;
&lt;p &gt;Both versions of the system have been evaluated with case studies in the veriﬁcation of imperative data structures, such as hash tables with higher-order iterators. The veriﬁcation burden in our new system is reduced by at least an order of magnitude compared to the old system, by replacing manual proof with automation. The core of the automation is a simpliﬁcation procedure for implications in higher-order separation logic, with hooks that allow programmers to add domain-speciﬁc simpliﬁcation rules.&lt;/p&gt;
&lt;p &gt;We argue for the effectiveness of our infrastructure by verifying a number of data structures and a packrat parser, and we compare to similar efforts within other projects. Compared to competing approaches to data structure veriﬁcation, our system includes much less code that must be trusted; namely, about a hundred lines of Coq code deﬁning a program logic. All of our theorems and decision procedures have or build machine-checkable correctness proofs from ﬁrst principles, removing opportunities for tool bugs to create faulty veriﬁcations.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Adam Chlipala has been telling us how underutilized Coq&#039;s Ltac tactic programming language for proof automation is for years. Here is the... er... proof.&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/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Thu, 06 Aug 2009 12:54:47 -0400</pubDate>
</item>
<item>
 <title>Certiﬁed Web Services in Ynot</title>
 <link>http://lambda-the-ultimate.org/node/3548</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ynot.cs.harvard.edu/papers/wwv09.pdf&quot;&gt;Certiﬁed Web Services in Ynot&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In this paper we demonstrate that it is possible to implement certiﬁed web systems in a way not much diﬀerent from writing Standard ML or Haskell code, including use of imperative features like pointers, ﬁles, and socket I/O. We present a web-based course gradebook application developed with Ynot, a Coq library for certiﬁed imperative programming. We add a dialog-based I/O system to Ynot, and we extend Ynot’s underlying Hoare logic with event traces to reason about I/O behavior. Expressive abstractions allow the modular certiﬁcation of both high level speciﬁcations like privacy guarantees and low level properties like memory safety and correct parsing.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Ynot, always ambitious, takes another serious swing: extracting a real web application from a proof development. In some respects the big news here is the additional coverage that Ynot now offers in terms of support for file and socket I/O, and the event trace mechanism. But there&#039;s even bigger news, IMHO, which is the subject of another paper that warrants a separate post.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Thu, 06 Aug 2009 12:46:05 -0400</pubDate>
</item>
</channel>
</rss>
