<?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>Continuation Fest 2008</title>
 <link>http://lambda-the-ultimate.org/node/2935</link>
 <description>&lt;p &gt;I had received the announcement for the &lt;a href=&quot;http://logic.cs.tsukuba.ac.jp/Continuation/&quot;&gt;Continuation Fest 2008&lt;/a&gt;, but then completely forgot about it.  Back in mid-April, some neat stuff was going on in Tokyo:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;&lt;a href=&quot;http://logic.cs.tsukuba.ac.jp/Continuation/abstract.html#kiselyov&quot;&gt;Demo of persistent delimited continuations in OCaml for nested web transactions&lt;/a&gt;, Oleg Kiselyov, &lt;a href=&quot;http://okmij.org/ftp/Computation/Fest2008-talk.pdf&quot;&gt;[Slides].&lt;/a&gt;  (I wish I had seen that a few years back when I was fooling with the &lt;a href=&quot;http://www.crsr.net/Software/InfernalDevice.html&quot;&gt;Infernal Device&lt;/a&gt;.  Just beautiful.)&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://logic.cs.tsukuba.ac.jp/Continuation/abstract.html#kono&quot;&gt;How to implement continuation only language in gcc 4.x&lt;/a&gt;, Shinji Kono, &lt;a href=&quot;http://www.ie.u-ryukyu.ac.jp/~kono/tmp/cf08-kono.tgz&quot;&gt;[Slides]&lt;/a&gt;.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://logic.cs.tsukuba.ac.jp/Continuation/abstract.html#watanabe&quot;&gt;Continuing from the past: An approach to building dynamically upgradable applications&lt;/a&gt;, Takuo Watanabe and Yuichi Tanaka, &lt;a href=&quot;http://www.psg.cs.titech.ac.jp/cf2008.pdf&quot;&gt;[Slides]&lt;/a&gt;.&lt;/li&gt;
&lt;li &gt;Plus others....&lt;/li&gt;
&lt;/ul&gt;
&lt;p &gt;[Edit: fixed url.]&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Wed, 13 Aug 2008 11:19:12 -0400</pubDate>
</item>
<item>
 <title>Catch me if you can: Towards type-safe, hierarchical, lightweight, polymorphic and efficient error management in OCaml</title>
 <link>http://lambda-the-ultimate.org/node/2892</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.univ-orleans.fr/lifo/Members/David.Teller/publications/ml2008.pdf&quot;&gt;Catch me if you can: Towards type-safe, hierarchical, lightweight, polymorphic and efficient error management in OCaml&lt;/a&gt;, by David Teller, Arnaud Spiwack, Till Varoquaux:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;This is the year 2008 and ML-style exceptions are everywhere. Most modern languages, whether academic or industrial, feature some variant of this mechanism. Languages such as Java even have a degree of out-of-the-box static coverage-checking for such exceptions, which is currently not available for ML languages, at least not without resorting to external tools.&lt;/p&gt;
&lt;p &gt;In this document, we demonstrate a design principle and a tiny library for managing errors in a functional manner, with static coverage-checking, automatically-inferred, structurally typed and hierarchical exceptional cases, all of this for what we believe is a reasonable run-time cost. Our work is based on OCaml and features simple uses of higher-order programming, low-level exceptions, phantom types, polymorphic variants and compile-time code&lt;br &gt;
rewriting.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Exhaustively checked, user-friendly exception handling was a bit of an open problem for awhile. As the paper details, languages supported either cumbersome, exhaustively checked polymorphic exceptions, as in Haskell, or we had unchecked easily extensible monomorphic exceptions, as in ML, or we had checked, extensible exceptions using a universal type as in Java.&lt;/p&gt;
&lt;p &gt;Supporting exhaustively checked, easily extensible polymorphic exceptions seemed quite a challenge, which this paper solves using monadic error handling and nested polymorphic variants. The paper also gives a good overview of current techniques of exception checking in OCaml, ie. &lt;a href=&quot;http://caml.inria.fr/pub/old_caml_site/ocamlexc/ocamlexc.htm&quot;&gt;ocamlexc&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;The performance of such exceptions is understandably lower than native exceptions, given all the thunking and indirection that monads entail. The authors attempt various implementations and test their performance against native exceptions. Ultimately, monadic error management seems acceptable for actual error handling, but not for control flow as native exceptions are sometimes used in OCaml.&lt;/p&gt;
&lt;p &gt;One interesting extension is to consider how efficient the implementations would be given more sophisticated control flow operators, such as continuations, coroutines, or delimited continuations, or whether native exceptions can be salvaged using a type and effects system in place of monads.&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/17">Software Engineering</category>
 <pubDate>Fri, 11 Jul 2008 11:16:54 -0400</pubDate>
</item>
<item>
 <title>Hardware Acceleration of Matrix Multiplication on a Xilinx FPGA</title>
 <link>http://lambda-the-ultimate.org/node/2881</link>
 <description>&lt;p &gt;via Jeff Newbern in the discussion forum comes the &lt;a href=&quot;http://www.ece.cmu.edu/~jhoe/distribution/mc07contest/14_dave_contest.pdf&quot;&gt;writeup from the winning entry&lt;/a&gt; in the MEMOCODE 2007 contest:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This year, the ﬁrst MEMOCODE hardware/software codesign contest posed the following problem: optimize matrix-matrix multiplication in such a way that it is split between the FPGA and PowerPC on a Xilinx Virtex IIPro 30. In this paper we discuss our solution, which we implemented on a Xilinx XUP development board with 256 MB of DRAM. The design was done by the ﬁve authors over a span of approximately 3 weeks, though of the 15 possible man-weeks, about 9 were actually spent working on this problem. All hardware design was done using &lt;a href=&quot;http://www.bluespec.com/&quot;&gt;Bluespec SystemVerilog (BSV)&lt;/a&gt;, with the exception of an imported Verilog multiplication unit, necessary only due to the limitations of the Xilinx FPGA toolﬂow optimizations.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Wow! This is much cooler than the kinds of programs I write :-)
&lt;p &gt;
This MIT/Bluespec team won the first contest at &lt;a href=&quot;http://memocode.irisa.fr/&quot;&gt;MEMOCODE 2007&lt;/a&gt; and the second in &lt;a href=&quot;http://rijndael.ece.vt.edu/memocontest08/&quot;&gt;MEMOCODE 2008&lt;/a&gt;. The &lt;a href=&quot;http://rijndael.ece.vt.edu/memocontest08/everybodywins/&quot;&gt;results for 2008&lt;/a&gt; are very interesting: The Bluespec team had the highest performance by an order of magnitude, the next fastest program was written by one guy in straight C without using the FPGA, and the rest were mostly in a hybrid of C and (V?)HDL.
&lt;p &gt;
Does this make Bluespec the programming tool of choice for discriminating hardware hackers?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Tue, 01 Jul 2008 07:22:19 -0400</pubDate>
</item>
<item>
 <title>Project Coverage</title>
 <link>http://lambda-the-ultimate.org/node/2870</link>
 <description>&lt;blockquote &gt;&lt;p &gt;
Thanks to French public funds, the next generation of Free Software code coverage tools is on its way. &lt;a href=&quot;http://www.adacore.com/2008/06/04/coverage-project/&quot;&gt;Project Coverage&lt;/a&gt; will produce a Free Software coverage analysis toolset together with the ability to generate artifacts that allow the tools to be used for safety-critical software projects undergoing a DO-178B software audit process for all levels of criticality...
&lt;p &gt;
The key insight of “Project Coverage” is as follows: code coverage can greatly benefit from recent advances in hardware virtualization technology as promoted, for instance, by QEMU.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Mon, 23 Jun 2008 22:39:27 -0400</pubDate>
</item>
<item>
 <title>Pure imperative programming</title>
 <link>http://lambda-the-ultimate.org/node/2860</link>
 <description>&lt;p &gt;Two intensively studied intermediate representations in compiler theory are Static Single Assignment form (SSA) and CPS translations, and Richard Kelsey&#039;s 1995 paper, &lt;a href=&quot;http://mumble.net/~kelsey/papers/cps-ssa.ps.gz&quot;&gt;A Correspondence Between Continuation Passing Style and Static Single Assignment Form (.ps.gz)&lt;/a&gt;, which shows a nearly-complete, exact equivalence between the two IRs.&lt;/p&gt;
&lt;p &gt;The correspondence shows how the imperatively expressed SSA can be regarded as side-effect free, and Andrew Appel has pushed this idea to claim that &lt;a href=&quot;http://www.cs.princeton.edu/~appel/papers/ssafun.ps&quot;&gt;SSA &lt;i &gt;is&lt;/i&gt; functional programming&lt;/a&gt;.  This result is of clear relevance to discussions turning on &quot;what is purity?&quot;, such as &lt;a href=&quot;http://lambda-the-ultimate.org/node/2845#comment-42164&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;As an aside, the Wikipedia article &lt;a href=&quot;http://en.wikipedia.org/wiki/Static_single_assignment_form&quot;&gt;Static Single Assignment form&lt;/a&gt; is rather good.&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>Fri, 20 Jun 2008 05:56:04 -0400</pubDate>
</item>
<item>
 <title>Parametric Higher-Order Abstract Syntax for Mechanized Semantics</title>
 <link>http://lambda-the-ultimate.org/node/2853</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://adam.chlipala.net/papers/PhoasICFP08/&quot;&gt;Parametric Higher-Order Abstract Syntax for Mechanized Semantics&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We present &lt;i exsl=&quot;http://exslt.org/common&quot;&gt;parametric higher-order abstract syntax (PHOAS)&lt;/i&gt;, a new approach to formalizing the syntax of programming languages in computer proof assistants based on type theory.  Like higher-order abstract syntax (HOAS), PHOAS uses the meta language&#039;s binding constructs to represent the object language&#039;s binding constructs.  Unlike HOAS, PHOAS types are definable in general-purpose type theories that support traditional functional programming, like Coq&#039;s Calculus of Inductive Constructions.  We walk through how Coq can be used to develop certified, executable program transformations over several statically-typed functional programming languages formalized with PHOAS; that is, each transformation has a machine-checked proof of type preservation and semantic preservation.  Our examples include CPS translation and closure conversion for simply-typed lambda calculus, CPS translation for System F, and translation from a language with ML-style pattern matching to a simpler language with no variable-arity binding constructs.  By avoiding the syntactic hassle associated with first-order representation techniques, we achieve a very high degree of proof automation.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I was aware of this some months ago now, but held back commenting on it at Adam&#039;s request until it had been accepted for publication, which it now apparently has. This is (one element of) Adam&#039;s continued work on &lt;a href=&quot;http://ltamer.sourceforge.net&quot;&gt;LambdaTamer&lt;/a&gt;, his Coq-based environment for building certified compilers. There is a new version of LambdaTamer using this parametric higher-order abstract syntax approach. The new version also works in current and future versions of Coq, unlike the previous version. Finally, Adam is apparently working on a paper regarding &quot;type-theoretic denotational semantics for higher order, impure object languages&quot; and is post-docing with Greg Morrisett. The relationship between Adam&#039;s work and the &lt;a href=&quot;http://lambda-the-ultimate.org/node/2638&quot;&gt;YNot project&lt;/a&gt; is a bit unclear to me; perhaps either Adam or Greg could help clarify that.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Update:&lt;/b&gt; Whoops. I got ahead of myself and neglected to notice that the paper is not actually yet available, although the new version of LambdaTamer is. So at the moment, this story is merely to note that the paper exists and to provide a link to the new LambdaTamer. My apologies to Adam and the LtU readership.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;2nd Update:&lt;/b&gt; The paper is now available at the link, in either PostScript or PDF form.&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/21">Type Theory</category>
 <pubDate>Mon, 16 Jun 2008 11:44:57 -0400</pubDate>
</item>
<item>
 <title>Automatic Generation of Peephole Superoptimizers</title>
 <link>http://lambda-the-ultimate.org/node/2800</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://theory.stanford.edu/~aiken/publications/papers/asplos06.pdf&quot;&gt;Automatic Generation of Peephole Superoptimizers&lt;/a&gt;, Sorav Bansal and Alex Aiken, ASPLOS 2006. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Peephole optimizers are typically constructed using human-written pattern matching rules, an approach that requires expertise and time, as well as being less than systematic at exploiting all opportunities for optimization. We explore fully automatic construction of peephole optimizers using brute force superoptimization. While the optimizations discovered by our automatic system may be less general than human-written counterparts, our approach has the potential to automatically learn a database of thousands to millions of optimizations, in contrast to the hundreds found in current peephole optimizers. We show experimentally that our optimizer is able to exploit performance opportunities not found by existing compilers; in particular, we show speedups from 1.7 to a factor of 10 on some compute intensive kernels over a conventional optimizing compiler.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;It&#039;s always fun to see a method that ought to be intractable rendered tractable through a combination of cleverness and strategically applied brute force. &lt;/p&gt;
&lt;p &gt;I found their performance measurements suggestive but perplexing. Their results on their kernels are really astoundingly good, which they claim that is because they make use of the x86&#039;s SIMD instructions.  But there is very little change in the SPEC benchmarks, and they subsequently suggest that their peephole optimizer catches many things that other compilers get via dataflow optimization. As a result, I don&#039;t feel like I have a clear picture of what their optimizer does and doesn&#039;t do, or where it does and doesn&#039;t overlaps with  existing optimizations. But they definitely have enough to convince me that this is worth further study, so I really hope Bonsal and Aiken publish some more about this -- a tech report or journal paper with more systematic measurements and in-depth analysis would be really illuminating. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Mon, 05 May 2008 15:56:34 -0400</pubDate>
</item>
<item>
 <title>COLA Brainfuck</title>
 <link>http://lambda-the-ultimate.org/node/2796</link>
 <description>&lt;p &gt;From the &lt;a href=&quot;http://www.swa.hpi.uni-potsdam.de/index.html&quot;&gt;Software Architecture Group&lt;/a&gt; at the Hasso Plattner Institut:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Our &lt;a href=&quot;http://www.swa.hpi.uni-potsdam.de/tutorials/cola/index.html&quot;&gt;tutorial&lt;/a&gt; on COLA provides insight on how programming languages can be implemented using the combined abstractions and an implementation of parsing expression grammars in COLA. The &quot;esoteric&quot; programming language brainfuck was chosen for its simplicity, which allows for concentrating on COLA&#039;s features.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Previously: &lt;a href=&quot;http://lambda-the-ultimate.org/node/2483&quot;&gt;COLA and Open, extensible object models&lt;/a&gt;; via &lt;a href=&quot;http://del.icio.us/neuraxon77&quot;&gt;neuraxon77&lt;/a&gt;.&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/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Thu, 01 May 2008 03:58:14 -0400</pubDate>
</item>
<item>
 <title>Register Allocation by Proof Transformation</title>
 <link>http://lambda-the-ultimate.org/node/2765</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://citeseer.ist.psu.edu/650314.html&quot;&gt;Register Allocation by Proof Transformation&lt;/a&gt;, Atsushi Ohori. ESOP 2003. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper presents a proof-theoretical framework for register allocation that accounts for the entire process of register allocation. Liveness analysis is proof reconstruction (similar to type inference), and register allocation is proof transformation from a proof system with unrestricted variable accesses to the one with restricted variable access. In our framework, the set of registers acts as the ``working set&#039;&#039; of the live variables at each instruction step, which changes during the execution of the code. This eliminates the ad-hoc notion of ``spilling&#039;&#039;. The necessary memory-register moves are systematically incorporated in the proof transformation process. Its correctness is a simple corollary of our construction; the resulting proof is equivalent to the proof of the original code modulo the treatment of structural rules. This yields a simple yet powerful register allocation algorithm. The algorithm has been implemented, demonstrating the feasibility of the framework.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The idea that making uses of the structural rules explicit gives you proof terms to model register-memory moves is very pretty. Another fun thing to do would be to take a continuation calculus and apply the ideas here to see if it produces a good low-level IR. &lt;/p&gt;
&lt;p &gt;EDIT: Ehud asked for some further exposition, so here goes. &lt;/p&gt;
&lt;p &gt;At a high level, you can think of the need to do register allocation as arising from a mismatch between a programming language and the hardware. In a language, we refer to data using variables, and in any given expression, we can use as many variables as we like. However, when a CPU does stuff, it wants the data to be in registers -- and it has only a small, finite set of them. So when a program is compiled, some variables can be represented by registers, and the rest must be represented by locations in memory (usually on the stack). Whenever the CPU needs to use a variable in memory, there must be explicit code to move it from memory into a register. &lt;/p&gt;
&lt;p &gt;The idea in this paper is to take the typing derivation of a program with an unbounded variable set, and then divide the context into two parts, one representing the register file and the other representing variables in memory. In terms of the implementation, moves between these two zones correspond to register-memory moves; and in terms of logic, this is a use of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Exchange_rule&quot;&gt;structural rule of Exchange&lt;/a&gt;, which permutes the order of variables in a context.&lt;/p&gt;
&lt;p &gt;So this gives us a high-level, machine-independent characterization of the register allocation problem: take a one-zone derivation and convert it to a two-zone derivation. But it gets even better: as long as the register allocation algorithm only adds uses of the structural rules in its transformation, we know that the meaning of the original program is unchanged -- so this method also yields a simple way of proving that a register allocation pass is semantics-preserving. (The fact that this is an easy proof is one indication of the power of this idea.)&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/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 11 Apr 2008 18:08:24 -0400</pubDate>
</item>
<item>
 <title>Simply efficient functional reactivity</title>
 <link>http://lambda-the-ultimate.org/node/2756</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://conal.net/papers/simply-reactive/&quot;&gt;Simply efficient functional reactivity&lt;/a&gt;. Conal Elliott.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Functional reactive programming (FRP) has simple and powerful semantics, but has resisted efficient implementation. In particular, most past implementations have used demand-driven sampling, which accommodates FRP&#039;s continuous time semantics and fits well with the nature of functional programming. Consequently, values are wastefully recomputed even when inputs don&#039;t change, and reaction latency can be as high as the sampling period.&lt;/p&gt;
&lt;p &gt;This paper presents a way to implement FRP that combines data- and demand-driven evaluation, in which values are recomputed only when necessary, and reactions are nearly instantaneous. The implementation is rooted in a new simple formulation of FRP and its semantics and so is easy to understand and reason about.&lt;/p&gt;
&lt;p &gt;On the road to efficiency and simplicity, we&#039;ll meet some old friends (monoids, functors, applicative functors, monads, morphisms, and improving values) and make some new friends (functional future values, reactive normal form, and concurrent “unambiguous choice”).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I&#039;m not sure exactly where to classify this submission to ICFP 2008, but I think many here will be interested in 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/10">Paradigms</category>
 <pubDate>Mon, 07 Apr 2008 13:36:41 -0400</pubDate>
</item>
<item>
 <title>Relating Complexity and Precision in Control Flow Analysis</title>
 <link>http://lambda-the-ultimate.org/node/2647</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.brandeis.edu/~mairson/Papers/icfp07.pdf&quot;&gt;Relating Complexity and Precision in Control Flow Analysis&lt;/a&gt;, David Van Horn and Harry Mairson. ICFP 2007.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We analyze the computational complexity of kCFA, a hierarchy of control flow analyses that determine which functions may be applied at a given call-site. This hierarchy specifies related decision problems, quite apart from any algorithms that may implement their solutions. We identify a simple decision problem answered by this analysis and prove that in the 0CFA case, the problem is complete for polynomial time. The proof is based on a nonstandard, symmetric implementation of Boolean logic within multiplicative linear logic (MLL). We also identify a simpler version of 0CFA related to eta-expansion, and prove that it is complete for logarithmic space, using arguments based on computing paths and permutations.&lt;/p&gt;
&lt;p &gt;For any fixed k &amp;gt; 0, it is known that kCFA (and the analogous decision problem) can be computed in time exponential in the program size. For k = 1, we show that the decision problem is NP-hard, and sketch why this remains true for larger fixed values of k. The proof technique depends on using the approximation of CFA as an essentially nondeterministic computing mechanism, as distinct from the exactness of normalization. When k = n, so that the &quot;depth&quot; of the control flow analysis grows linearly in the program length, we show that the decision problem is complete for exponential time.&lt;/p&gt;
&lt;p &gt;In addition, we sketch how the analysis presented here may be extended naturally to languages with control operators. All of the insights presented give clear examples of how straightforward observations about linearity, and linear logic, may in turn be used to give a greater understanding of functional programming and program analysis.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;There&#039;s ton of really good stuff in here; I was particularly fascinated by the fact that 0-CFA is &lt;em &gt;exact&lt;/em&gt; for multiplicatively linear programs (ie, that use variables at most once), because linearity guarantees that every lambda can flow to at most one use site.  &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/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Fri, 01 Feb 2008 13:47:53 -0500</pubDate>
</item>
<item>
 <title>The YNot Project</title>
 <link>http://lambda-the-ultimate.org/node/2638</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.eecs.harvard.edu/~greg/ynot/&quot;&gt;The YNot Project&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
The goal of the Ynot project is to make programming with dependent types practical for a modern programming language.  In particular, we are extending the Coq proof assistant to make it possible to write higher-order, imperative and concurrent programs (in the style of Haskell) through a shallow embedding of Hoare Type Theory (HTT).  HTT provides a clean separation between pure and effectful computations, makes it possible to formally specify and reason about effects, and is fully compositional.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This was actually commented on &lt;a href=&quot;http://lambda-the-ultimate.org/node/2551#comment-38515&quot;&gt;here&lt;/a&gt;, by Greg Morrisett himself. Conceptually, this seems like it&#039;s related to Adam Chlipala&#039;s &lt;a href=&quot;http://lambda-the-ultimate.org/node/2146&quot;&gt;A Certified Type-Preserving Compiler from Lambda Calculus to Assembly Language&lt;/a&gt;. See, in particular, slides 23-24 of &lt;a href=&quot;http://adam.chlipala.net/papers/CtpcPLDI07/CtpcINRIA.pdf&quot;&gt;this presentation&lt;/a&gt; (PDF). More generally, computation and reflection seem to be gaining recognition as important features for the practical use of such powerful tools as Coq; see also &lt;a href=&quot;http://research.microsoft.com/research/downloads/Details/6658d5cc-9965-4e6f-9fe1-b3d94e6b8346/Details.aspx&quot;&gt;SSREFLECT tactics for Coq&lt;/a&gt; and their accompanying paper &lt;a href=&quot;http://www.lix.polytechnique.fr/~assia/Publi/ssrdoc.pdf&quot;&gt;A Small Scale Reflection Extension for the Coq system&lt;/a&gt; (PDF).&lt;/p&gt;
&lt;p &gt;It&#039;s also interesting to observe that the work appears to depend on the &quot;Program&quot; keyword in the forthcoming Coq 8.2, the work behind which is known as &quot;Russell,&quot; as referred to in &lt;a href=&quot;http://lambda-the-ultimate.org/node/2626&quot;&gt;this thread&lt;/a&gt;. Russell&#039;s main page in the meantime is &lt;a href=&quot;http://www.lri.fr/~sozeau/research/russell.fr.html&quot;&gt;here&lt;/a&gt;. Again, the point is to simplify programming with dependent types in Coq.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;Update:&lt;/b&gt; Some preliminary code is available from the project page.&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/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 28 Jan 2008 21:14:52 -0500</pubDate>
</item>
<item>
 <title>Open Multi-Methods for C++</title>
 <link>http://lambda-the-ultimate.org/node/2590</link>
 <description>&lt;small&gt;Peter Pirkelbauer, Yuriy Solodkyy, and Bjarne Stroustrup. &lt;a href=&quot;http://www.research.att.com/~bs/multimethods.pdf&quot;&gt;Open Multi-Methods for C++&lt;/a&gt;. Proc. ACM 6th International Conference on Generative Programming and Component Engineering (GPCE). October 2007.&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
Multiple dispatch – the selection of a function to be invoked based on the dynamic type of two or more arguments – is a solution to several classical problems in object-oriented programming. Open multi-methods generalize multiple dispatch towards open-class extensions, which improve separation of concerns and provisions for retroactive design. We present the rationale, design, implementation, and performance of a language feature, called open multi-methods, for C++ . Our open multi-methods support both repeated and virtual inheritance...
...our approach is simpler to use, catches more user mistakes, and resolves more ambiguities through link-time analysis, runs significantly faster, and requires less memory. In particular, the runtime cost of calling an open multimethod is constant and less than the cost of a double dispatch (two virtual function calls). Finally, we provide a sketch of a design for open multi-methods in the presence of dynamic loading and linking of libraries.&lt;/blockquote&gt;&lt;p&gt;
Who said C++ isn&#039;t evolving?&lt;p&gt;
The discussion in section 4 of the actual implementation (using EDG) is particularly detailed, which is a bonus. </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 Jan 2008 23:05:26 -0500</pubDate>
</item>
<item>
 <title>Theorem proving support in programming language semantics</title>
 <link>http://lambda-the-ultimate.org/node/2582</link>
 <description>&lt;blockquote &gt;&lt;p &gt;
We describe several views of the semantics of a simple programming language as formal documents in the calculus of inductive constructions that can be verified by the Coq proof system. Covered aspects are natural semantics, denotational semantics, axiomatic semantics, and abstract interpretation. Descriptions as recursive functions are also provided whenever suitable, thus yielding a a verification condition generator and a static analyser that can be run inside the theorem prover for use in reflective proofs. Extraction of an interpreter from the denotational semantics is also described. All different aspects are formally proved sound with respect to the natural semantics specification.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;More work on mechanized metatheory with an eye towards naturalness of representation and automation. This seems to me to relate to Adam Chlipala&#039;s work on &lt;a href=&quot;http://lambda-the-ultimate.org/node/2146&quot;&gt;A Certified Type-Preserving Compiler from Lambda Calculus to Assembly Language&lt;/a&gt;, which relies on denotational semantics and proof by reflection, in crucial ways. More generally, it seems to reinforce an important trend in using type-theory-based theorem provers to tackle programming language design from the semantic point of view (see also &lt;a href=&quot;http://lambda-the-ultimate.org/node/1760&quot;&gt;A Very Modal Model of a Modern, Major, General Type System&lt;/a&gt; and &lt;a href=&quot;http://lambda-the-ultimate.org/node/2171&quot;&gt;Verifying Semantic Type Soundness of a Simple Compiler&lt;/a&gt;). I find the trend exciting, but of course I also wonder how far we can practically go with it today, given that the overwhelming majority of the literature, including our beloved &lt;a href=&quot;http://lambda-the-ultimate.org/node/492&quot;&gt;Types and Programming Languages&lt;/a&gt;, is based on &lt;a href=&quot;http://lambda-the-ultimate.org/node/1883&quot;&gt;A Syntactic Approach to Type Soundness&lt;/a&gt;. Even the upcoming &lt;a href=&quot;http://lambda-the-ultimate.org/node/2564&quot;&gt;How to write your next POPL paper in Coq&lt;/a&gt; at POPL &#039;08 centers on the syntactic approach.&lt;/p&gt;
&lt;p &gt;Is the syntactic approach barking up the wrong tree, in the long term? The semantic approach? Both? Neither?&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>Thu, 27 Dec 2007 17:21:42 -0500</pubDate>
</item>
<item>
 <title>Avi Bryant: Ruby IS-A Smalltalk</title>
 <link>http://lambda-the-ultimate.org/node/2573</link>
 <description>&lt;p &gt;A short &lt;a href=&quot;http://itc.conversationsnetwork.org/shows/detail3432.html&quot;&gt;audio presentation&lt;/a&gt; (Avi speaks for less than ten minutes, I guess), about the lessons the Ruby community should learn from Smalltalk. It&#039;s mainly about turtles-all-the-way-down, but Self (fast VMs), GemStone (transactional distributed persistence), Seaside (web frameworks) are also mentioned briefly.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/30">Ruby</category>
 <pubDate>Tue, 11 Dec 2007 22:59:13 -0500</pubDate>
</item>
</channel>
</rss>
