<?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>Graydon Hoare: 21 compilers and 3 orders of magnitude in 60 minutes</title>
 <link>http://lambda-the-ultimate.org/node/5648</link>
 <description>&lt;p &gt;In 2019, Graydon Hoare gave &lt;a href=&quot;http://venge.net/graydon/talks/CompilerTalk-2019.pdf?utm_source=thenewstack&amp;amp;utm_medium=website&amp;amp;utm_campaign=platform&quot;&gt;a talk to undergraduates (PDF of slides)&lt;/a&gt; trying to communicate a sense of what compilers looked like from the perspective of people who did it for a living.&lt;/p&gt;
&lt;p &gt;I&#039;ve been aware of this talk for over a year and meant to submit a story here, but was overcome by the sheer number of excellent observations. I&#039;ll just summarise the groups he uses:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;The giants: by which he means the big compilers that are built the old-fashioned way that throw massive resources at attaining efficiency
&lt;li &gt;The variants, which use tricks to avoid being so massive:
&lt;ol &gt;
&lt;li &gt;Fewer optimisations: be traditional, but be selective and only the optimisations that really pay off
&lt;li &gt;Use compiler-friendly languages, by which he is really taking about languages that are good for implementing compilers, like Lisp and ML
&lt;li &gt;Theory-driven meta-languages, esp. how something like yacc allows a traditional Dragon-book style compiler to be written more easily
&lt;li &gt;Base compiler on a carefully designed IR that is either easy to compile or reasonable to bytecode-interpret
&lt;li &gt;Exercise discretion  to have the object code be a mix of compiled and interpreted
&lt;li &gt;Use sophisticated partial evaluation
&lt;li &gt;Forget tradition and implement everything directly by hand
&lt;/ol&gt;
&lt;/ul&gt;
&lt;p &gt;I really recommend spending time working through these slides. While much of the material I was familiar with, enough was new, and I really appreciated the well-made points, shout-outs to projects that deserve more visibility, such as Nanopass compilers and CakeML, and the presentation of the Futamura projections, a famously tricky concept, at the undergraduate level.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Sun, 27 Feb 2022 14:47:26 +0000</pubDate>
</item>
<item>
 <title>Google Brain&#039;s Jax and Flax</title>
 <link>http://lambda-the-ultimate.org/google-brain-jax</link>
 <description>&lt;p &gt;Google&#039;s AI division, Google Brain, has two main products for deep learning: TensorFlow and Jax.  While TensorFlow is best known, Jax can be thought of as a higher-level language for specifying deep learning algorithms while automatically eliding code that doesn&#039;t need to run as part of the model.&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;https://github.com/google/jax&quot;&gt;Jax&lt;/a&gt; evolved from Autograd, and is a combination of Autograd and &lt;a href=&quot;https://www.tensorflow.org/xla&quot;&gt;XLA&lt;/a&gt;.  Autograd &quot;can automatically differentiate native Python and Numpy code. It can handle a large subset of Python&#039;s features, including loops, ifs, recursion and closures, and it can even take derivatives of derivatives of derivatives. It supports reverse-mode differentiation (a.k.a. backpropagation), which means it can efficiently take gradients of scalar-valued functions with respect to array-valued arguments, as well as forward-mode differentiation, and the two can be composed arbitrarily. The main intended application of Autograd is gradient-based optimization.&quot;&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;https://github.com/google/flax/&quot;&gt;Flax&lt;/a&gt; is then built on top of Jax, and allows for easier customization of existing models.&lt;/p&gt;
&lt;p &gt;What do you see as the future of domain specific languages for AI?&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/26">Python</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/34">Scientific Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Fri, 15 Jan 2021 13:59:26 +0000</pubDate>
</item>
<item>
 <title>Applications of Blockchain to Programming Language Theory</title>
 <link>http://lambda-the-ultimate.org/ltu-blockchain-plt-thinktank</link>
 <description>&lt;p &gt;Let&#039;s talk about Blockchain.  Goal is to use this forum topic to highlight its usefulness to programming language theory and practice.  If you&#039;re familiar with existing research efforts, please share them here.  In addition, feel free to generate ideas for how Blockchain could improve languages and developer productivity.&lt;/p&gt;
&lt;p &gt;As one tasty example: Blockchain helps to formalize thinking about &lt;a href=&quot;https://en.wikipedia.org/wiki/Mutual_knowledge_(logic)&quot;&gt;mutual knowledge&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Common_knowledge_(logic)&quot;&gt;common knowledge&lt;/a&gt;, and potentially think about sharing intergalactic computing power through vast distributed computing fabrics.  If we can design contracts in such a way that maximizes the usage of mutual knowledge while minimizing common knowledge to situations where you have to &quot;prove your collateral&quot;, third-party transactions could eliminate a lot of back office burden.  But, there might be benefits in other areas of computer science from such research, as well.&lt;/p&gt;
&lt;p &gt;Some language researchers, like Mark S. Miller, have always dreamed of &lt;a href=&quot;https://www.youtube.com/watch?v=j5SuqIrgRJU&quot;&gt;Agoric and the Decades-Long Quest for Secure Smart Contracts&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Some may also be aware that &lt;a href=&quot;https://www.innoq.com/en/articles/2019/07/verifikation-von-smart-contracts/&quot;&gt;verification of smart contracts&lt;/a&gt; is an important research area, because of the notorious theft of purse via logic bug in an Ethereum smart contract.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</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>
 <pubDate>Mon, 13 Apr 2020 14:38:12 +0000</pubDate>
</item>
<item>
 <title>Tensor Considered Harmful</title>
 <link>http://lambda-the-ultimate.org/tensor-considered-harmful</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://nlp.seas.harvard.edu/NamedTensor&quot;&gt;Tensor Considered Harmful&lt;/a&gt;, by Alexander Rush&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
TL;DR: Despite its ubiquity in deep learning, Tensor is broken. It forces bad habits such as exposing private dimensions, broadcasting based on absolute position, and keeping type information in documentation. This post presents a proof-of-concept of an alternative approach, &lt;strong &gt;named tensors&lt;/strong&gt;, with named dimensions. This change eliminates the need for indexing, dim arguments, einsum- style unpacking, and documentation-based coding. The prototype &lt;strong &gt;PyTorch library&lt;/strong&gt; accompanying this blog post is available as &lt;a href=&quot;https://github.com/harvardnlp/NamedTensor&quot;&gt;namedtensor&lt;/a&gt;.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Thanks to Edward Z. Yang for pointing me to this &quot;Considered Harmful&quot; position paper.&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/18">Teaching &amp; Learning</category>
 <pubDate>Thu, 27 Jun 2019 14:26:57 +0000</pubDate>
</item>
<item>
 <title>Selective Functors</title>
 <link>http://lambda-the-ultimate.org/story-selective-functors</link>
 <description>&lt;p &gt;From Andrey Mokhov&#039;s twitter feed:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Is there any intermediate abstraction between applicative functors and monads? And if yes, what is it? In a new paper with @geo2A, @simonmar and @dimenix we explore &quot;selective functors&quot;, which are essentially applicative functors with branching: &lt;a href=&quot;https://www.staff.ncl.ac.uk/andrey.mokhov/selective-functors.pdf&quot;&gt;https://www.staff.ncl.ac.uk/andrey.mokhov/selective-functors.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;We&#039;ve implemented selective functors in Haskell: &lt;a href=&quot;https://github.com/snowleopard/selective&quot;&gt;https://github.com/snowleopard/selective&lt;/a&gt;, OCaml: &lt;a href=&quot;https://github.com/snowleopard/selective-ocaml&quot;&gt;https://github.com/snowleopard/selective-ocaml&lt;/a&gt;, and even Coq: &lt;a href=&quot;https://github.com/tuura/selective-theory-coq&quot;&gt;https://github.com/tuura/selective-theory-coq&lt;/a&gt; (the Coq repository contains some proofs of correctness that our selective instances are lawful). And there is also a PureScript fork!&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/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Tue, 05 Mar 2019 17:12:26 +0000</pubDate>
</item>
<item>
 <title>Safe Dynamic Memory Management in Ada and SPARK</title>
 <link>http://lambda-the-ultimate.org/node/5541</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://www.adacore.com/papers/safe-dynamic-memory-management-in-ada-and-spark&quot;&gt;Safe Dynamic Memory Management in Ada and SPARK&lt;/a&gt; by Maroua Maalej, Tucker Taft, Yannick Moy:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Handling memory in a correct and efficient way is a step toward safer, less complex, and higher performing software-intensive systems. However, languages used for critical software development such as Ada, which supports formal verification with its SPARK subset, face challenges regarding any use of pointers due to potential pointer aliasing. In this work, we introduce an extension to the Ada language, and to its SPARK subset, to provide pointer types (“access types” in Ada) that provide provably safe, automatic storage management without any asynchronous garbage collection, and without explicit deallocation by the user. Because the mechanism for these safe pointers relies on strict control of aliasing, it can be used in the SPARK subset for formal verification, including both information flow analysis and proof of safety and correctness properties. In this paper, we present this proposal (which has been submitted for inclusion in the next version of Ada), and explain how we are able to incorporate these pointers into formal analyses&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;For the systems programmers among you, you might be interested in some new developments in Ada where they propose to add ownership types to Ada&#039;s pointer/access types, to improve the flexibility of the programs that can be written and whose safety can be automatically verified. The automated satisfiability of these safety properties is a key goal of the SPARK Ada subset.&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/21">Type Theory</category>
 <pubDate>Thu, 26 Jul 2018 19:42:01 +0000</pubDate>
</item>
<item>
 <title>&quot;C Is Not a Low-level Language&quot;</title>
 <link>http://lambda-the-ultimate.org/node/5534</link>
 <description>&lt;p &gt;&lt;b &gt;David Chisnall, &lt;a href=&quot;https://queue.acm.org/detail.cfm?id=3212479&quot;&gt;&quot;C Is Not a Low-level Language. Your computer is not a fast PDP-11.&quot;&lt;/a&gt;, ACM Queue, Volume 16, issue 2.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;&quot;For a language to be &quot;close to the metal,&quot; it must provide an abstract machine that maps easily to the abstractions exposed by the target platform. It&#039;s easy to argue that C was a low-level language for the PDP-11.&lt;br &gt;
...&lt;br &gt;
it is possible to make C code run quickly but only by spending thousands of person-years building a sufficiently smart compiler—and even then, only if you violate some of the language rules. Compiler writers let C programmers pretend that they are writing code that is &quot;close to the metal&quot; but must then generate machine code that has very different behavior if they want C programmers to keep believing that they are using a fast language.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Includes a discussion of various ways in which modern processors break the C abstract machine, as well as some interesting speculation on what a &quot;non-C processor&quot; might look like. The latter leads to thinking about what a low-level language for such a processor should look like.&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/16">Parallel/Distributed</category>
 <pubDate>Wed, 04 Jul 2018 03:09:16 +0000</pubDate>
</item>
<item>
 <title>Compiling a Subset of APL Into a Typed Intermediate Language</title>
 <link>http://lambda-the-ultimate.org/node/5488</link>
 <description>&lt;a href=&quot;http://hiperfit.dk/pdf/array14_final.pdf&quot;&gt;Compiling a Subset of APL Into
a Typed Intermediate Language&lt;/a&gt;
&lt;p &gt;by Martin Elsman, Martin Dybdal&lt;/p&gt;
&lt;blockquote &gt;
Traditionally, APL is an interpreted language
...
In this paper, we present a compiler that compiles a subset of
APL into a typed intermediate representation, which should serve
as a practical and well-defined intermediate format for targeting
parallel-architectures through a large number of existing tools and
frameworks. The intermediate language is conceptually close to
the language Repa. It supports shape-polymorphic functions
and types that classify shapes. The compiler takes a simplified approach
to certain aspects of APL. Following other APL compilation
approaches, the compiler is based on lexical (i.e., static) identifier
scoping and has no support for dynamic compilation (APL execute).
&lt;/blockquote&gt;

Terseness of APL is legendary, for good or bad. I keep finding more and more papers by Haskell community (and especially GHC contributors) working on efficient (parallel) arrays in Haskell.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Wed, 03 Jan 2018 00:13:51 +0000</pubDate>
</item>
<item>
 <title>Exploiting Vector Instructions with Generalized Stream Fusion</title>
 <link>http://lambda-the-ultimate.org/node/5485</link>
 <description>&lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/haskell-beats-C.pdf&quot;&gt;Exploiting Vector Instructions with Generalized Stream Fusion&lt;/a&gt;
&lt;p &gt;By Geoffrey Mainland, Roman Leshchinskiy, and Simon Peyton Jones.&lt;/p&gt;
&lt;div &gt;A.k.a. &lt;b &gt;&quot;Haskell beats C&quot;&lt;/b&gt;.&lt;/div&gt;
&lt;blockquote &gt;
Our ideas are implemented
in modified versions of the GHC compiler and vector
library. Benchmarks show that high-level Haskell code written using
our compiler and libraries can produce code that is faster than both
compiler- and hand-vectorized C.&lt;/blockquote&gt;

&lt;p &gt;This paper continues the promising line of research started in &lt;a href=&quot;https://link.springer.com/content/pdf/10.1007/3-540-19027-9_23.pdf&quot;&gt;1990 by Wadler&lt;/a&gt; (at least, that was how I learned of deforestation). Of course, there was a lot of development since then, but this specific paper introduces an interesting idea of multiple representations - potentially changing the game.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Fri, 22 Dec 2017 03:33:58 +0000</pubDate>
</item>
<item>
 <title>Implementing Algebraic Effects in C</title>
 <link>http://lambda-the-ultimate.org/node/5457</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/implementing-algebraic-effects-c/&quot;&gt;Implementing Algebraic Effects in C&lt;/a&gt; by Daan Leijen:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We describe a full implementation of algebraic effects and handlers as a library in standard and portable C99, where effect operations can be used just like regular C functions. We use a formal operational semantics to guide the C implementation at every step where an evaluation context corresponds directly to a particular C execution context. Finally we show a novel extension to the formal semantics to describe optimized tail resumptions and prove that the extension is sound. This gives two orders of magnitude improvement to the performance of tail resumptive operations (up to about 150 million operations per second on a Core i7@2.6GHz)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Another great paper by Daan Leijen, this time on a C library with immediate practical applications at Microsoft. The applicability is much wider though, since it&#039;s an ordinary C library for defining and using arbitrary algebraic effects. It looks pretty usable and is faster and more general than most of the C coroutine libraries that already exist.&lt;/p&gt;
&lt;p &gt;It&#039;s a nice addition to your toolbox for creating language runtimes in C, particularly since it provides a unified, structured way of creating and handling a variety of sophisticated language behaviours, like async/await, in ordinary C with good performance. There has been considerable discussion here of C and low-level languages with green threads, coroutines and so on, so hopefully others will find this useful!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/35">Effects</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 Jul 2017 13:50:17 +0000</pubDate>
</item>
<item>
 <title>Simon Peyton Jones elected into the Royal Society Fellowship</title>
 <link>http://lambda-the-ultimate.org/node/5332</link>
 <description>&lt;p &gt;&lt;A href=&#039;http://research.microsoft.com/en-us/people/simonpj/&#039;&gt;Simon Peyton Jones&lt;/A&gt; has been &lt;A href=&quot;https://royalsociety.org/fellows/fellows-directory/#?earliestelectedyear=2016&quot;&gt;elected&lt;/A&gt; as a &lt;A href=&#039;https://royalsociety.org/people/simon-peyton-jones-12889/&#039;&gt;Fellow of the Royal Society&lt;/A&gt;. The Royal Society biography reads:&lt;BLOCKQUOTE &gt;&lt;br &gt;
Simon&#039;s main research interest is in functional programming languages, their implementation, and their application. He was a key contributor to the design of the now-standard functional language Haskell, and is the lead designer of the widely-used Glasgow Haskell Compiler (GHC). He has written two textbooks about the implementation of functional languages.&lt;/p&gt;
&lt;p &gt;More generally, Simon is interested in language design, rich type systems, compiler technology, code generation, runtime systems, virtual machines, and garbage collection. He is particularly motivated by direct use of principled theory to practical language design and implementation -- that is one reason he loves functional programming so much.&lt;/p&gt;
&lt;p &gt;Simon is also chair of Computing at School, the grass-roots organisation that was at the epicentre of the 2014 reform of the English computing curriculum.&lt;br &gt;
&lt;/BLOCKQUOTE&gt;&lt;/p&gt;
&lt;p &gt;Congratulations SPJ!&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/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/25">Spotlight</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/18">Teaching &amp; Learning</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Sat, 30 Apr 2016 19:44:24 +0000</pubDate>
</item>
<item>
 <title>Performance Problems You Can Fix: A Dynamic Analysis of Memoization Opportunities</title>
 <link>http://lambda-the-ultimate.org/node/5296</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://mp.binaervarianz.de/oopsla2015.pdf&quot;&gt;Performance Problems You Can Fix: A Dynamic Analysis of Memoization Opportunities&lt;/a&gt;&lt;br &gt;
Luca Della Toffola, Michael Pradel, Thomas Gross&lt;br &gt;
2015&lt;br &gt;
&lt;/p&gt;

&lt;blockquote &gt;
Performance bugs are a prevalent problem and recent research proposes various techniques to identify such bugs. This paper addresses a kind of performance problem that often is easy to address but difficult to identify: redundant computations that may be avoided by reusing already computed results for particular inputs, a technique called memoization. To help developers find and use memoization opportunities, we present MemoizeIt, a dynamic analysis that identifies methods that repeatedly perform the same computation. The key idea is to compare inputs and outputs of method calls in a scalable yet precise way. To avoid the overhead of comparing objects at all method invocations in detail, MemoizeIt first compares objects without following any references and iteratively increases the depth of exploration while shrinking the set of considered methods. After each iteration, the approach ignores methods that cannot benefit from memoization, allowing it to analyze calls to the remaining methods in more detail. For every memoization opportunity that MemoizeIt detects, it provides hints on how to implement memoization, making it easy for the developer to fix the performance issue. Applying MemoizeIt to eleven real-world Java programs reveals nine profitable memoization opportunities, most of which are missed by traditional CPU time profilers, conservative compiler optimizations, and other existing approaches for finding performance bugs. Adding memoization as proposed by MemoizeIt leads to statistically significant speedups by factors between 1.04x and 12.93x.
&lt;/blockquote&gt;

&lt;p &gt;This paper was recommended by Asumu Takikawa. It is a nice idea, which seems surprisingly effective. The examples they analysed (sadly they don&#039;t really explain how they picked the program to study) have a mix of memoization opportunities in fairly different parts of the codebase. There are several examples of what we could call &quot;peripheral communication logic&quot;, eg. date formatting stuff, which we could assume is not studied really closely by the programmers focusing more on the problem-domain logic. But there is also an interesting of subtle domain-specific memoization opportunity: an existing cache was over-pessimistic and would reset itself at times where it was in fact not necessary, and this observation corresponds to a non-trivial program invariant.&lt;/p&gt;

&lt;p &gt;The authors apparently had some difficulties finding program inputs to exercise profiling. Programs should more often be distributed with &quot;performance-representative inputs&quot;, not just functionality-testing inputs. In one example of a linting tool, the provided &quot;standard test&quot; was to feed the code of the linting tool to itself. But this was under a default configuration for which the tools&#039; developers had already fixed all alarms, so the alarm-creating code (which actually had an optimization opportunity) was never exercised by this proposed input.&lt;/p&gt;

&lt;p &gt;Note that the caching performed is very lightweight, usually not a full tabulation of the function. Most examples just add a static variable to cache the last (input, output) pair, which is only useful when the same input is typically called several times in a row, but costs very little space.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Tue, 12 Jan 2016 16:42:49 +0000</pubDate>
</item>
<item>
 <title>Compilers as Assistants</title>
 <link>http://lambda-the-ultimate.org/node/5280</link>
 <description>&lt;p &gt;Designers of &lt;a href=&quot;http://elm-lang.org&quot;&gt;Elm&lt;/a&gt; want their compiler to produce friendly error messages. They show some examples of helpful error messages from their newer compiler on the blog post.&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://elm-lang.org/blog/compilers-as-assistants&quot;&gt;Compilers as Assistants&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
One of Elm’s goals is to change our relationship with compilers. Compilers should be assistants, not adversaries. A compiler should not just detect bugs, it should then help you understand why there is a bug. It should not berate you in a robot voice, it should give you specific hints that help you write better code. Ultimately, a compiler should make programming faster and more 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/8">Implementation</category>
 <pubDate>Fri, 20 Nov 2015 05:11:51 +0000</pubDate>
</item>
<item>
 <title>Optimizing Closures in O(0) time</title>
 <link>http://lambda-the-ultimate.org/node/5259</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://users-cs.au.dk/danvy/sfp12/papers/keep-hearn-dybvig-paper-sfp12.pdf&quot;&gt;Optimizing Closures in O(0) time&lt;/a&gt;, by Andrew W. Keep, Alex Hearn, R. Kent Dybvig:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;The flat-closure model for the representation of first-class procedures is simple, safe-for-space, and efficient, allowing the values or locations of free variables to be accessed with a single memory indirect. It is a straightforward model for programmers to understand, allowing programmers to predict the worst-case behavior of their programs. This paper presents a set of optimizations that improve upon the flat-closure model along with an algorithm that implements them, and it shows that the optimizations together eliminate over 50% of run-time closure-creation and free-variable access overhead in practice, with insignificant compile-time overhead. The optimizations never add overhead and remain safe-for-space, thus preserving the benefits of the flat-closure model.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Looks like a nice and simple set of optimizations for probably the most widely deployed closure representation.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <pubDate>Sun, 04 Oct 2015 17:46:22 +0000</pubDate>
</item>
<item>
 <title>Xavier Leroy will receive the Royal Society&#039;s 2016 Milner Award </title>
 <link>http://lambda-the-ultimate.org/node/5254</link>
 <description>&lt;p &gt;The &lt;A href=&quot;https://royalsociety.org/&quot;&gt;Royal Society&lt;/A&gt; will award &lt;A href=&quot;http://pauillac.inria.fr/~xleroy&quot;&gt;Xavier Leroy&lt;/A&gt; the &lt;A href=&quot;https://royalsociety.org/grants-schemes-awards/awards/milner-award/&quot;&gt;Milner Award 2016&lt;/A&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;... in recognition of his research on the OCaml functional programming language and on the formal verification of compilers.&lt;/BLOCKQUOTE&gt;&lt;/p&gt;
&lt;p &gt;Xavier&#039;s replied:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;It is very moving to see how far we have come, from Milner&#039;s great ideas of the 1970s to tools as powerful and as widely used as OCaml and Coq.&lt;/BLOCKQUOTE&gt;&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/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/8">Implementation</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/12">Object-Functional</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <pubDate>Fri, 18 Sep 2015 14:48:40 +0000</pubDate>
</item>
</channel>
</rss>
