<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Meta-Programming</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/15/0</link>
 <description></description>
 <language>en</language>
<item>
 <title>A Lambda Calculus for Real Analysis</title>
 <link>http://lambda-the-ultimate.org/node/3831</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://paultaylor.eu/ASD/lamcra/&quot;&gt;A Lambda Calculus for Real Analysis&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Abstract Stone Duality is a revolutionary paradigm for general topology that describes computable continuous functions directly, without using set theory, infinitary lattice theory or a prior theory of discrete computation. Every expression in the calculus denotes both a continuous function and a program, and the reasoning looks remarkably like a sanitised form of that in classical topology. This is an introduction to ASD for the general mathematician, with application to elementary real analysis.&lt;/p&gt;
&lt;p &gt;This language is applied to the Intermediate Value Theorem: the solution of equations for continuous functions on the real line. As is well known from both numerical and constructive considerations, the equation cannot be solved if the function &quot;hovers&quot; near 0, whilst tangential solutions will never be found.&lt;/p&gt;
&lt;p &gt;In ASD, both of these failures and the general method of finding solutions of the equation when they exist are explained by the new concept of overtness. The zeroes are captured, not as a set, but by higher-type modal operators. Unlike the Brouwer degree, these are defined and (Scott) continuous across singularities of a parametric equation.&lt;/p&gt;
&lt;p &gt;Expressing topology in terms of continuous functions rather than sets of points leads to treatments of open and closed concepts that are very closely lattice- (or de Morgan-) dual, without the double negations that are found in intuitionistic approaches. In this, the dual of compactness is overtness. Whereas meets and joins in locale theory are asymmetrically finite and infinite, they have overt and compact indices in ASD.&lt;/p&gt;
&lt;p &gt;Overtness replaces metrical properties such as total boundedness, and cardinality conditions such as having a countable dense subset. It is also related to locatedness in constructive analysis and recursive enumerability in recursion theory.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Paul Taylor is deadly serious about the intersection of logic, mathematics, and computation. I came across this after beating my head against &lt;a href=&quot;http://www.amazon.com/Probability-Theory-Logic-Science-Vol/dp/0521592712/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1266357272&amp;amp;sr=8-1&quot;&gt;Probability Theory: The Logic of Science&lt;/a&gt; and &lt;a href=&quot;http://axiomaticeconomics.com/&quot;&gt;Axiomatic Theory of Economics&lt;/a&gt; over the weekend, realizing that my math just wasn&#039;t up to the tasks, and doing a Google search for &quot;constructive real analysis.&quot; &quot;Real analysis&quot; because it was obvious that that was what both of the aforementioned texts were relying on; &quot;constructive&quot; because I&#039;d really like to develop proofs in Coq/extract working code from them. This paper was on the second page of results. Paul&#039;s name was familiar (and not just because I share it with him); he translated Jean-Yves Girard&#039;s regrettably out-of-print &lt;a href=&quot;http://paultaylor.eu/stable/Proofs+Types&quot;&gt;Proofs and Types&lt;/a&gt; to English and maintains a very popular set of tools for typesetting &lt;a href=&quot;http://paultaylor.eu/diagrams/&quot;&gt;commutative diagrams&lt;/a&gt; using LaTeX.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/22">Category Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</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>Tue, 16 Feb 2010 17:00: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>Implicit Phasing for R6RS Libraries</title>
 <link>http://lambda-the-ultimate.org/node/3691</link>
 <description>&lt;p &gt;Abdulaziz Ghuloum and R. Kent Dybvig, &lt;a href=&quot;http://www.cs.indiana.edu/~dyb/pubs/implicit-phasing.pdf&quot;&gt;Implicit Phasing for R6RS Libraries&lt;/a&gt;, Proc. ICFP 2007.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
The forthcoming Revised Report on Scheme differs from previous reports in that the language it describes is structured as a set of libraries. It also provides a syntax for defining new portable libraries. The same library may export both procedure and hygienic macro definitions, which allows procedures and syntax to be freely intermixed, hidden, and exported.&lt;/p&gt;
&lt;p &gt;This paper describes the design and implementation of a portable version of R6RS libraries that expands libraries into a core language compatible with existing R5RS implementations. Our implementation is characterized by its use of inference to determine when the bindings of an imported library are needed, e.g., run time or compile time, relieving programmers of the burden of declaring usage requirements explicitly.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;R6RS leaves it up to implementations whether import statements need to explicitly state the meta-level into which bindings should be placed. The authors argue for letting the implementation automatically figure out the required meta-levels, and present an implementation-oriented description of how to do so, that they implemented portably. The paper also includes a well-written and detailed introduction to the issues involved, and since they want the community to adopt their solution, they seem to have worked extra hard to produce a convincing paper ;).&lt;/p&gt;
&lt;p &gt;(&lt;a href=&quot;http://lambda-the-ultimate.org/node/3688#comment-52458&quot;&gt;via vieiro&lt;/a&gt;)&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Thu, 26 Nov 2009 10:54:00 -0500</pubDate>
</item>
<item>
 <title>π: a pattern language</title>
 <link>http://lambda-the-ultimate.org/node/3662</link>
 <description>&lt;p &gt;&amp;pi; - not to be confused with the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pi-calculus&quot;&gt;&amp;pi;-calculus&lt;/a&gt; - is a pattern-based language being developed by the Software Technology group at Technische Universität Darmstadt. Quoting from the &lt;a href=&quot;http://www.pi-programming.org&quot;&gt;project website&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;There is only one language construct in &amp;pi;: the pattern. Patterns are, simply speaking, EBNF-expressions with an associated meaning; a pattern can be easiest understood as a function with a syntactically complex (context-free) &quot;signature&quot;. The non-terminal symbols in the signature are then the parameters of the pattern. A &amp;pi;-program is a sequence of instruction symbols (technically, sentences), each being a sequence of (Unicode) characters. The sentences are then evaluated (executed) in the respective order.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The basic idea here seems similar to the &lt;a href=&quot;http://www.cs.ucla.edu/~awarth/papers/dls07.pdf&quot;&gt;OMeta&lt;/a&gt; language, previously mentioned on LtU &lt;a href=&quot;http://lambda-the-ultimate.org/node/2477&quot;&gt;here&lt;/a&gt;, but based on EBNF instead of Parsing Expression Grammars (PEGs).&lt;/p&gt;
&lt;p &gt;&lt;/p&gt;
&lt;p &gt;Pattern definitions in &amp;pi; have the form&lt;/p&gt;
&lt;pre &gt;declare_pattern name ≔ syntax ⇒ type ➞ meaning;&lt;/pre&gt;&lt;p &gt;
Here&#039;s a trivial example of defining a pattern:&lt;/p&gt;
&lt;pre &gt;
declare_pattern
   integer_potentiation ≔ integer:i %W- &quot;^&quot; %W- integer:j ⇒ integer ➞
   {
      int result = i;
      for (int k = 1; k &amp;lt;= j-1; k++)
         result *= i;
      return result;
   };
&lt;/pre&gt;&lt;p &gt;The resulting pattern can then be used directly in expressions, such as &lt;code &gt;print(42^6);&lt;/code&gt;.&lt;/p&gt;
&lt;p &gt;More information about the language, as well as the implementation, can be found at &lt;a href=&quot;http://www.pi-programming.org&quot;&gt;http://www.pi-programming.org&lt;/a&gt;. There&#039;s an OOPSLA09 paper on &amp;pi; as well, but I haven&#039;t been able to find an open access version of it yet.&lt;/p&gt;
&lt;p &gt;&lt;b &gt;[Update: the &amp;pi; team has made their OOPSLA article available &lt;a href=&quot;http://www.pi-programming.org/docs/%CF%80_a_pattern_language.pdf&quot;&gt;here&lt;/a&gt;]&lt;/b&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/15">Meta-Programming</category>
 <pubDate>Wed, 28 Oct 2009 21:58:09 -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>Verified Programming in Guru</title>
 <link>http://lambda-the-ultimate.org/node/3543</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://guru-lang.googlecode.com/svn/branches/1.0a/doc/book.pdf&quot;&gt;Verified Programming in Guru&lt;/a&gt; is a tutorial introduction to &lt;a href=&quot;http://code.google.com/p/guru-lang/&quot;&gt;Guru&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;GURU is a pure functional programming language, which is similar in some ways to Caml and Haskell. But GURU also contains a language for writing formal proofs demonstrating the properties of programs. So there are really two languages: the language of programs, and the language of proofs.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In comparison to Coq:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;GURU is inspired largely by the COQ theorem prover, used for formalized mathematics and theoretical computer science, as well as program verification. Like COQ, GURU has syntax for both proofs and programs, and supports dependent types. GURU does not have as complex forms of polymorphism and dependent types as COQ does. But GURU supports some features that are difficult or impossible for COQ to support, which are useful for practical program verification. In COQ, the compiler must be able to confirm that all programs are uniformly terminating: they must terminate on all possible inputs. We know from basic recursion theory or theoretical computer science that this means there are some programs which really do terminate on all inputs that the compiler will not be able to confirm do so. Furthermore, some programs, like web servers or operating systems, are not intended to terminate. So that is a significant limitation. Other features GURU has that COQ lacks include support for functional modeling of non-functional constructs like destructive updates of data structures and arrays; and better support for proving properties of dependently typed functions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The tutorial is worth a read to anybody new to this style of programming as it is one of the most gentle introductions to dependent types and automated program verification that I&#039;ve seen.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/13">Logic/Declarative</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Tue, 04 Aug 2009 22:59:11 -0400</pubDate>
</item>
<item>
 <title>Fully-parameterized, first-class modules with hygienic macros</title>
 <link>http://lambda-the-ultimate.org/node/3468</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://w210.ub.uni-tuebingen.de/frontdoor.php?source_opus=2423&amp;amp;la=de&quot;&gt;Fully-parameterized, first-class modules with hygienic macros&lt;/a&gt;, dissertation by Martin Gasbichler, 2006.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
It is possible to define a formal semantics for configuration, elaboration, linking, and evaluation of fully-parameterized first-class modules with hygienic macros, independent compilation, and code sharing. This dissertation defines such a semantics making use of explicit substitution to formalize hygienic expansion and linking. In the module system, interfaces define the static semantics of modules and include the definitions of exported macros. This enables full parameterization and independent compilation of modules even in the presence of macros. Thus modules are truly exchangeable components of the program. The basis for the module system is an operational semantics for hygienic macro expansion - computational macros as well as rewriting-based macros. The macro semantics provides deep insight into the nature of hygienic macro expansion through the use of explicit substitutions instead of conventional renaming techniques. The semantics also includes the formal description of Macro Scheme, the meta-language used for evaluating computational macros.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A very readable, interesting, and useful work. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Fri, 19 Jun 2009 14:20:47 -0400</pubDate>
</item>
<item>
 <title>Ziggurat </title>
 <link>http://lambda-the-ultimate.org/node/3179</link>
 <description>&lt;blockquote &gt;&lt;p &gt;
&lt;a href=&quot;http://www.cc.gatech.edu/~dfisher/ziggurat/&quot;&gt;Ziggurat&lt;/a&gt; is a framework for writing extensible programming languages, and for defining static semantics for those languages. In other words, it is a language designer&#039;s toolkit.&lt;/p&gt;
&lt;p &gt;Ziggurat is based on macros. When building a language using Ziggurat, it is easy to make that language extensible by adding a macro system. Ziggurat macros allow for incremental extension of the language by rewriting. What makes Ziggurat different from other macro systems is that Ziggurat allows the language extender to optionally define static semantics for her new language, and connect these static semantics amongst language levels. This makes it possible to write specialized analysis algorithms for the higher-level languages, either for optimization purposes, profiling purposes, debugging purposes, or whatever task analysis is put to.&lt;br &gt;
&lt;/blockquote&gt;
&lt;p &gt;
Strangely enough this project from Olin Shivers and David Fisher was not mentioned here before.&lt;p &gt;
Those with access may want to check out the paper on Ziggurat in the September 2008 double issue of JFP.&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/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Tue, 20 Jan 2009 02:35:48 -0500</pubDate>
</item>
<item>
 <title>Staging with Delimited Control </title>
 <link>http://lambda-the-ultimate.org/node/3112</link>
 <description>&lt;small&gt;Yukiyoshi Kameyama, Oleg Kiselyov, Chung-chieh Shan, &lt;a href=&quot;http://okmij.org/ftp/Computation/staging/circle-shift.pdf&quot;&gt;Shifting the Stage: Staging with Delimited Control&lt;/a&gt;. PEPM2009.&lt;/small&gt;&lt;p&gt;
&lt;blockquote&gt;
It is often hard to write programs that are ef?cient yet reusable. For example, an efficient implementation of Gaussian elimination should be specialized to the structure and known static properties of the input matrix. The most profitable optimizations, such as choosing the best pivoting or memoization, cannot be expected of even an advanced compiler because they are specific to the domain, but expressing these optimizations directly makes for ungainly source code. Instead, a promising and popular way to reconcile efficiency with reusability is for a domain expert to write code generators.
Two pillars of this approach are types and effects. Typed multilevel languages such as MetaOCaml ensure safety: a well-typed code generator neither goes wrong nor generates code that goes wrong. Side effects such as state and control ease correctness: an effectful generator can resemble the textbook presentation of an algorithm, as is familiar to domain experts, yet insert let for memoization and if for bounds-checking, as is necessary for efficiency. However, adding effects blindly renders multilevel types unsound...
&lt;/blockquote&gt;&lt;p&gt;

Code generators have to be written in CPS or monadic style due to the need for &lt;i&gt;let-insertion&lt;/i&gt; and &lt;i&gt;if-insertion&lt;/i&gt;. This makes writing code generators unattractive to many programmers. The paper provides an alternative based on delimited continuations, and paper proposes a sound combination of staging and delimited
continuations. 

The combination has been implemented. The authors show how pleasant it becomes to write interesting code generators (specializing dynamic programming and Gaussian elimination codes). The paper and the code for many generators is available &lt;a href=&quot;http://okmij.org/ftp/Computation/staging/README.dr&quot;&gt;online&lt;/a&gt;. I suggest reading the explanation of the problem, and then looking at the actual code generators.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Sun, 30 Nov 2008 20:49:41 -0500</pubDate>
</item>
<item>
 <title>Factor: an extensible interactive language</title>
 <link>http://lambda-the-ultimate.org/node/3074</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.youtube.com/watch?v=f_0QlhYlS8g&quot;&gt;Factor: an extensible interactive language&lt;/a&gt;, Google Tech Talk by Slava Pestov.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
&lt;a href=&quot;http://www.factorcode.org/&quot;&gt;Factor&lt;/a&gt; is a general-purpose programming language which has been in development for a little over five years and is influenced by Forth, Lisp, and Smalltalk. Factor takes the best ideas from Forth -- simplicity, succinct code, emphasis on interactive testing, meta-programming -- and brings modern high-level language features such as garbage collection, object orientation, and functional programming familiar to users of languages such as Python and JavaScript. Recognizing that no programming language is an island, Factor is portable, ships with a full-featured standard library, deploys stand-alone binaries, and interoperates with C and Objective-C.&lt;/p&gt;
&lt;p &gt;In this talk, I will give the rationale for Factor&#039;s creation, present an overview of the language, and show how Factor can be used to solve real-world problems with a minimum of fuss. At the same time, I will emphasize Factor&#039;s extensible syntax, meta-programming and reflection capabilities, and show that these features, which are unheard of in the world of mainstream programming languages, make programs easier to write, more robust, and fun.
&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <pubDate>Wed, 29 Oct 2008 18:19:59 -0400</pubDate>
</item>
<item>
 <title>Hardware Design and Functional Programming: a Perfect Match</title>
 <link>http://lambda-the-ultimate.org/node/2880</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.jucs.org/jucs_11_7/hardware_design_and_functional/jucs_11_7_1135_1158_sheeran.pdf&quot;&gt;Hardware Design and Functional Programming: a Perfect Match&lt;/a&gt; by Mary Sheeran, Journal of Universal Computer Science, Special issue devoted to the Brazilian Symposium on Programming Languages, 2005.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This is a slightly odd paper that explains why I am still as fascinated by the combination of functional programming and hardware design as I have ever been. It includes some looking back over my own research and that of others, and contains 60 references. It explains what kinds of research I am doing now, and why, and also presents some neat new results about parallel prefix circuits. It ends by posing lots of hard questions that we need to answer if we are to be able to design and verify circuits successfully in the future.
&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Sun, 29 Jun 2008 13:29:36 -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>Scheme macro systems</title>
 <link>http://lambda-the-ultimate.org/node/2753</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://lists.gnu.org/archive/html/chicken-users/2008-04/msg00013.html&quot;&gt;[Chicken-users] macro systems and chicken (long)&lt;/a&gt;, Alex Shinn, Apr 2008.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
There seems to be a lot of confusion in the Chicken&lt;br &gt;
community, and the Lisp community in general, about the&lt;br &gt;
different macro systems, so I thought provide some&lt;br &gt;
background information and discussion of the eggs available&lt;br &gt;
in Chicken and their uses.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;A very nice post that provides a historical overview and implementations of a hygienic &lt;code &gt;(swap! a b)&lt;/code&gt; macro in different macro systems: syntactic closures, reverse syntactic closures, explicit renaming, syntax-case, and syntax-rules.&lt;/p&gt;
&lt;p &gt;I didn&#039;t know &lt;a href=&quot;http://citeseer.ist.psu.edu/bawden88syntactic.html&quot;&gt;syntactic closures&lt;/a&gt; before, and find their interface and implementation simple and easy to understand.  Any reasons why they aren&#039;t used more in Scheme?&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/15">Meta-Programming</category>
 <pubDate>Sun, 06 Apr 2008 22:47:28 -0400</pubDate>
</item>
<item>
 <title>Applied Metamodelling: A Foundation for Language Driven Development</title>
 <link>http://lambda-the-ultimate.org/node/2711</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.ceteva.com/book.html&quot;&gt;Applied Metamodelling: A Foundation for Language Driven Development&lt;/a&gt; (2004)&lt;br &gt;
by Tony Clark, Paul Sammut, James Willans&lt;/p&gt;
&lt;p &gt;An excerpt: &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Language-driven development is fundamentally based on the ability to rapidly design new languages and tools in a unified and interoperable manner. We argue that existing technologies do not provide this capability, but a language engineering approach based on metamodelling can. The detailed study of metamodelling and how it can realise the Language-Driven Development vision will form the focus for the remainder of this book.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In software engineering circles the term &quot;language driven development&quot; is synonymous with &quot;language oriented programming&quot;, a term which LtU members are more familiar with (thanks to Martin Ward&#039;s article &lt;a href=&quot;http://www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf&quot;&gt;Language Oriented Programming&lt;/a&gt; which first appeared in 1994, and then Martin Fowler&#039;s essays on the topic). The book hasn&#039;t appeared on the radar here on LtU, despite &lt;a href=&quot;http://scholar.google.ca/scholar?hl=en&amp;amp;lr=&amp;amp;cites=13735337140062296561&quot;&gt;41 citations&lt;/a&gt;. I suspect this is due in part to only &lt;a href=&quot;http://citeseer.ist.psu.edu/736058.html&quot;&gt;one citation at Citeseer&lt;/a&gt;, and the lack of cross-talk between computer scientists and software engineers.&lt;/p&gt;
&lt;p &gt;There are a lot of similarities between the &lt;a href=&quot;http://www.ceteva.com/xmf.html&quot;&gt;XMF language&lt;/a&gt; (&lt;a href=&quot;http://lambda-the-ultimate.org/node/2686&quot;&gt;discussion at LtU&lt;/a&gt;) and that of the &lt;a href=&quot;http://www.chrisseaton.com/katahdin/&quot;&gt;Katahdin language&lt;/a&gt; (&lt;a href=&quot;http://lambda-the-ultimate.org/node/2303&quot;&gt;discussion at LtU&lt;/a&gt;). Other related discussions here at LtU, include &lt;a href=&quot;http://lambda-the-ultimate.org/node/815&quot;&gt;Language Workbenches: The Killer App for DSLs&lt;/a&gt; - about the essay by Martin Fowler, &lt;a href=&quot;http://lambda-the-ultimate.org/node/1851&quot;&gt;Ralph Johnson: Language workbenches&lt;/a&gt; - a response to Fowler&#039;s essay, &lt;a href=&quot;http://lambda-the-ultimate.org/node/577&quot;&gt;XActium - Lightweight Language Engineering?&lt;/a&gt; - which discusses an essay about a previous version of XMF, &lt;a href=&quot;http://lambda-the-ultimate.org/node/1690&quot;&gt;Generating Interpreters?&lt;/a&gt; , &lt;a href=&quot;http://lambda-the-ultimate.org/node/377&quot;&gt;Language Oriented Programming&lt;/a&gt; - discusses an essay by Jetbrain&#039;s Sergey Dmitriev, &lt;a href=&quot;http://lambda-the-ultimate.org/node/1693&quot;&gt;&quot;Language Oriented Programming&quot; Meta Programming System&lt;/a&gt; - discussion of the Jetbrain MPS system, &lt;a href=&quot;http://lambda-the-ultimate.org/node/46&quot;&gt;The DSL, MDA, UML thing again...&lt;/a&gt; - an older discussion on the relationship between DSLs and MDA. &lt;/p&gt;
&lt;p &gt;(Disclaimer: Some may notice that I am mentioned on the XMF web site, but this is just because I subjected their XMF language to a number of grueling challenges which they passed with flying colors: see the &lt;a href=&quot;http://www.ceteva.com/XMF/&quot;&gt;language snippets&lt;/a&gt; in the documentation. I have no affiliation with their company.) &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/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Fri, 07 Mar 2008 14:07:33 -0500</pubDate>
</item>
<item>
 <title>Closing the Stage: From Staged Code to Typed Closures</title>
 <link>http://lambda-the-ultimate.org/node/2575</link>
 <description>&lt;p &gt;Yukiyoshi Kameyama, Oleg Kiselyov, Chung-chieh Shan. &lt;a href=&quot;http://okmij.org/ftp/Computation/staging/metafx.pdf&quot;&gt;Closing the Stage: From Staged Code to Typed Closures&lt;/a&gt;. PEPM&#039;08. (&lt;a href=&quot;http://okmij.org/ftp/Computation/staging/paper-examples.ml&quot;&gt;code&lt;/a&gt;)&lt;br &gt;
&lt;blockquote &gt;&lt;p &gt;
Code generation lets us write well-abstracted programs without performance penalty. Writing a correct code generator is easier than building a full-scale compiler but still hard. Typed multistage languages such as MetaOCaml help in two ways: they provide simple annotations to express code generation, and they assure that the generated code is well-typed and well-scoped.  Unfortunately, the assurance only holds without side effects such as state and control. Without effects, generators often have to be written in a continuation-passing or monadic style that has proved inconvenient. It is thus a pressing open problem to combine effects with staging  in a sound type system.
&lt;p &gt;
This paper takes a first step towards solving the problem, by translating the staging away. Our source language models MetaOCaml restricted to one future stage. It is a call-by-value language, with a sound type system and a small-step operational semantics, that supports building open code, running closed code, cross-stage persistence, and non-termination effects. We translate each typing derivation from this source language to the unstaged System F with constants. Our translation represents future-stage code using closures, yet preserves the typing, alpha-equivalence (hygiene), and (we conjecture) termination and evaluation order of the staged program...&lt;/blockquote&gt;
&lt;p &gt;
Essentially, representation of staged programs in an unstaged language turns out to be related to typechecking/typed compilation: typechecking is a stage. While this basic idea is straightforward, the work presented in the paper is rather intricate and depends on previous work on typed compilation. Oleg will be able to put this work in context in the forum, hopefully.&lt;br &gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sun, 16 Dec 2007 22:17:29 -0500</pubDate>
</item>
</channel>
</rss>
