<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Programming Languages Weblog</title>
 <link>http://lambda-the-ultimate.org</link>
 <description>Programming languages news, articles and discussion</description>
 <language>en</language>
<item>
 <title>History of Lisp</title>
 <link>http://lambda-the-ultimate.org/node/5548</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://jmc.stanford.edu/articles/lisp/lisp.pdf&quot;&gt;History of Lisp&lt;/a&gt; &lt;em &gt;(The history of LISP according to McCarthy&#039;s memory in 1978, presented at the ACM SIGPLAN History of Programming Languages Conference.)&lt;/em&gt;&lt;/p&gt;
&lt;p &gt;This is such a fun paper which I couldn&#039;t find on LtU. It&#039;s about the very early history of programming (1950s and &#039;60s), back when things we take for granted today didn&#039;t exist yet.&lt;/p&gt;
&lt;p &gt;On taking apart complex data structures with functions like CAR and CDR:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;It was immediately apparent that arbitrary subexpressions of symbolic expressions could be obtained by composing the functions that extract immediate subexpressions, and this seemed reason enough to go to an algebraic language.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;On creating new data, i.e. CONS:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;At some point a cons(a,d,p,t) was defined, but it was regarded as a subroutine and not as a function with a value. ... Gelernter and Gerberich noticed that cons should be a function, not just a subroutine, and that its value should be the location of the word that had been taken from the free storage list. This permitted new expressions to be constructed out of subsubexpressions by composing occurrences of cons&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;On inventing IF:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;This led to the invention of the true conditional expression which evaluates only one of N1 and N2 according to whether M is true or false and to a desire for a programming language that would allow its use.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;On how supreme laziness led to the invention of garbage collection:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Once we decided on garbage collection, its actual implementation could be postponed, because only toy examples were being done.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;You might have heard this before:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;S.R. Russell noticed that eval could serve as an interpreter for LISP, promptly hand coded it, and we now had a programming language with an interpreter.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;And the rest is history...&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/7">History</category>
 <pubDate>Sat, 25 Aug 2018 17:43:23 +0000</pubDate>
</item>
<item>
 <title>Notes on notation and thought</title>
 <link>http://lambda-the-ultimate.org/node/5542</link>
 <description>&lt;small&gt;(via &lt;a href=&quot;https://news.ycombinator.com/item?id=17632850&quot;&gt;HN&lt;/a&gt;)&lt;/small&gt;&lt;p&gt;
A &lt;a href=&quot;https://github.com/hypotext/notation&quot;&gt;nice collection&lt;/a&gt; of quotes on notation as a tool of thought. Mostly not programming related, which  actually makes them more interesting, offering a richer diversity of examples. 
We used  to have quite a few discussions of notation in the early days (at least in part because I never accepted the prevailing dogma that syntax is not that interesting or important), which is a good reminder for folks to check the archives.</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <pubDate>Sat, 28 Jul 2018 20:46:31 +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> ICFP Programming Contest 2018</title>
 <link>http://lambda-the-ultimate.org/node/5540</link>
 <description>&lt;p &gt;Yep, it &lt;a href=&quot;https://icfpcontest2018.github.io/&quot;&gt;on&lt;/a&gt;!&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/11">Functional</category>
 <pubDate>Sat, 21 Jul 2018 06:45:18 +0000</pubDate>
</item>
<item>
 <title>Transfer of pywer</title>
 <link>http://lambda-the-ultimate.org/node/5539</link>
 <description>&lt;p &gt;Guido van Rossum is &lt;a href=&quot;https://mail.python.org/pipermail/python-committers/2018-July/005664.html&quot;&gt;&quot;resigning&quot;&lt;/a&gt; from being the Python BDFL: &quot;I&#039;m basically giving myself a permanent vacation from being BDFL, and you all will be on&lt;br &gt;
your own.&quot; Apparently running a language can be tiring... It will be interesting to see what happens next.&lt;br &gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/26">Python</category>
 <pubDate>Thu, 12 Jul 2018 17:15:46 +0000</pubDate>
</item>
<item>
 <title>Captcha </title>
 <link>http://lambda-the-ultimate.org/node/5535</link>
 <description>&lt;p &gt;Note to those who tried to sign up but couldn&#039;t get passed the broken captcha: we removed it, so please try again. Email me directly to activate the account, once you&#039;ve created it and got the automatic email.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/3">Admin</category>
 <pubDate>Sun, 08 Jul 2018 06:36:55 +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>The Gentle Art of Levitation</title>
 <link>http://lambda-the-ultimate.org/node/5526</link>
 <description>&lt;a href=&quot;http://jmchapman.github.io/papers/levitation.pdf&quot;&gt;The Gentle Art of Levitation&lt;/a&gt;
&lt;p &gt;2010 by James Chapman, Pierre-Evariste Dagand, Conor McBride, Peter Morrisy&lt;/p&gt;
&lt;blockquote &gt;
We present a closed dependent type theory whose inductive types
are given not by a scheme for generative declarations, but by encoding
in a universe. Each inductive datatype arises by interpreting its
description—a first-class value in a datatype of descriptions. Moreover,
the latter itself has a description. Datatype-generic programming
thus becomes ordinary programming. We show some of the
resulting generic operations and deploy them in particular, useful
ways on the datatype of datatype descriptions itself. Surprisingly
this apparently self-supporting setup is achievable without paradox
or infinite regress.
&lt;/blockquote&gt;
It&#039;s datatype descriptions all the way down.</description>
 <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>Fri, 11 May 2018 19:26:31 +0000</pubDate>
</item>
<item>
 <title>Comprehending Ringads</title>
 <link>http://lambda-the-ultimate.org/node/5525</link>
 <description>&lt;a href=&quot;http://www.cs.ox.ac.uk/jeremy.gibbons/publications/ringads.pdf&quot;&gt;Comprehending Ringads&lt;/a&gt;
&lt;p &gt;2016 by Jeremy Gibbons&lt;/p&gt;
&lt;blockquote &gt;
Ringad comprehensions represent a convenient notation for expressing
database queries. The ringad structure alone does not provide
a good explanation or an efficient implementation of relational joins;
but by allowing heterogeneous comprehensions, involving both bag and
indexed table ringads, we show how to accommodate these too.
&lt;/blockquote&gt;
Indexed/parametric/graded monads are the key (read the paper to understand the pun).</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/22">Category Theory</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 05 May 2018 02:59:11 +0000</pubDate>
</item>
<item>
 <title>Sequent Calculus as a Compiler Intermediate Language</title>
 <link>http://lambda-the-ultimate.org/node/5519</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/wp-content/uploads/2016/04/sequent-calculus-icfp16.pdf&quot;&gt;Sequent Calculus as a Compiler Intermediate Language&lt;/a&gt;&lt;br &gt;
2016 by Paul Downen, Luke Maurer, Zena M. Ariola, Simon Peyton Jones&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
The typed λ-calculus arises canonically as the term language for a logic called natural deduction, using the Curry-Howard isomorphism: the pervasive connection between logic and programming languages asserting that propositions are types and proofs are programs. Indeed, for many people, the λ-calculus is the living embodiment of Curry-Howard.&lt;/p&gt;
&lt;p &gt;But natural deduction is not the only logic! Conspicuously, natural deduction has a twin, born in the very same paper, called the sequent calculus. Thanks to the Curry-Howard isomorphism, terms of the sequent calculus can also be seen as a programming language with an emphasis on control flow.
&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/6">General</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Mon, 02 Apr 2018 17:06:41 +0000</pubDate>
</item>
<item>
 <title>How to Write Seemingly Unhygienic and Referentially Opaque Macros with Syntax-rules</title>
 <link>http://lambda-the-ultimate.org/node/5517</link>
 <description>&lt;a href=&quot;http://okmij.org/ftp/Scheme/Dirty-Macros.pdf&quot;&gt;How to Write Seemingly Unhygienic and Referentially
Opaque Macros with Syntax-rules&lt;/a&gt;&lt;br &gt;
By Oleg Kiselyov&lt;br &gt;
&lt;blockquote &gt;
This paper details how folklore notions of hygiene and referential transparency
of R5RS macros are defeated by a systematic attack. We demonstrate
syntax-rules that seem to capture user identifiers and allow their own identifiers
to be captured by the closest lexical bindings. In other words, we have written
R5RS macros that accomplish what commonly believed to be impossible.
&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/15">Meta-Programming</category>
 <pubDate>Thu, 22 Mar 2018 02:22:21 +0000</pubDate>
</item>
<item>
 <title> Why Is SQLite Coded In C </title>
 <link>http://lambda-the-ultimate.org/node/5515</link>
 <description>&lt;p &gt;We are nearing the day someone quips that C is an improvement on most of its successors (&lt;a href=&quot;http://www.eecs.umich.edu/~bchandra/courses/papers/Hoare_Hints.pdf&quot;&gt;smirk&lt;/a&gt;). So reading &lt;a href=&quot;https://sqlite.org/whyc.html&quot;&gt;this page&lt;/a&gt; from the SQLite website is instructive, as is reading &lt;a href=&quot;https://sqlite.org/testing.html&quot;&gt;the page&lt;/a&gt; on the tooling and coding practices that make this approach work.&lt;/p&gt;
&lt;p &gt;I think none of this is news, and these approaches have been on the books for quite a bit. But still, as I said: an improvement on most of its successors. Hat tip: &lt;a href=&quot;https://news.ycombinator.com/item?id=16585120&quot;&gt;HN discussion&lt;/a&gt;. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/6">General</category>
 <pubDate>Fri, 16 Mar 2018 04:47:32 +0000</pubDate>
</item>
<item>
 <title>Resource Polymorphism</title>
 <link>http://lambda-the-ultimate.org/node/5511</link>
 <description>&lt;p &gt;&lt;a href=&quot;https://arxiv.org/abs/1803.02796&quot;&gt;Resource Polymorphism&lt;/a&gt;, by Guillaume Munch-Maccagnoni:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We present a resource-management model for ML-style programming languages, designed to be compatible with the OCaml philosophy and runtime model. This is a proposal to extend the OCaml language with destructors, move semantics, and resource polymorphism, to improve its safety, efficiency, interoperability, and expressiveness. It builds on the ownership-and-borrowing models of systems programming languages (Cyclone, C++11, Rust) and on linear types in functional programming (Linear Lisp, Clean, Alms). It continues a synthesis of resources from systems programming and resources in linear logic initiated by Baker. &lt;/p&gt;
&lt;p &gt;It is a combination of many known and some new ideas. On the novel side, it highlights the good mathematical structure of Stroustrup&#039;s &quot;Resource acquisition is initialisation&quot; (RAII) idiom for resource management based on destructors, a notion sometimes confused with finalizers, and builds on it a notion of resource polymorphism, inspired by polarisation in proof theory, that mixes C++&#039;s RAII and a tracing garbage collector (GC).&lt;br &gt;
The proposal targets a new spot in the design space, with an automatic and predictable resource-management model, at the same time based on lightweight and expressive language abstractions. It is backwards-compatible: current code is expected to run with the same performance, the new abstractions fully combine with the current ones, and it supports a resource-polymorphic extension of libraries. It does so with only a few additions to the runtime, and it integrates with the current GC implementation. It is also compatible with the upcoming multicore extension, and suggests that the Rust model for eliminating data-races applies. &lt;/p&gt;
&lt;p &gt;Interesting questions arise for a safe and practical type system, many of which have already been thoroughly investigated in the languages and prototypes Cyclone, Rust, and Alms.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;An ambitious goal, and it would be an incredibly useful addition to OCaml. Might even displace Rust in some places, since you can theoretically avoid triggering the GC, but you have the excellent GC available when needed. This is definitely a pain point for Rust.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</category>
 <pubDate>Thu, 08 Mar 2018 14:40:49 +0000</pubDate>
</item>
<item>
 <title>The Left Hand of Equals</title>
 <link>http://lambda-the-ultimate.org/node/5509</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://web.cecs.pdx.edu/~black/publications/egal.pdf&quot;&gt;The Left Hand of Equals&lt;/a&gt;, by James Noble, Andrew P. Black, Kim B. Bruce, Michael Homer, Mark S. Miller:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;When is one object equal to another object? While object identity is fundamental to object-oriented systems, object equality, although tightly intertwined with identity, is harder to pin down. The distinction between identity and equality is reflected in object-oriented languages, almost all of which provide two variants of “equality”, while some provide many more. Programmers can usually override at least one of these forms of equality, and can always define  their own methods to distinguish their own objects.&lt;/p&gt;
&lt;p &gt;This essay takes a reflexive journey through fifty years of identity and equality in object-oriented languages, and ends somewhere we did not expect: a “left-handed” equality relying on trust and grace.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This covers a lot of ground, not only historical, but conceptual, like the meaning of equality and objects. For instance, they consider Ralph Johnson on what object oriented programming means:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;I explain three views of OO programming. The Scandinavian view is that an OO system is one whose creators realise that programming is modelling. The mystical view is that an OO system is one that is built out of objects that communicate by sending messages to each other, and computation is the messages flying from object to object. The software engineering view is that an OO system is one that supports data abstraction, polymorphism by late-binding of function calls, and inheritance.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;And constrast with William Cook&#039;s autognosis/procedural-abstraction view, which we&#039;ve &lt;a href=&quot;http://lambda-the-ultimate.org/node/3668&quot;&gt;discussed&lt;/a&gt; here &lt;a href=&quot;http://lambda-the-ultimate.org/node/4468&quot;&gt;before&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;The paper&#039;s goal then becomes clear: &quot;What can we do to provide an equality operator for a pure, autognostic object-oriented language?&quot; They answer this question in the context of the &lt;a href=&quot;http://gracelang.org/applications/&quot;&gt;Grace programming language&lt;/a&gt;. As you might expect from some of the authors, security and trust are important considerations.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Wed, 07 Mar 2018 17:56:44 +0000</pubDate>
</item>
<item>
 <title>Site migration</title>
 <link>http://lambda-the-ultimate.org/node/5490</link>
 <description>&lt;p &gt;&lt;b &gt;Update:&lt;/b&gt; The migration of LtU to new servers is complete.&lt;/p&gt;
&lt;p &gt;If you notice any issues with the site, please post in this thread (if you can), or email me at antonvs8 at (gmail domain).&lt;/p&gt;
&lt;p &gt;Original announcement appears below:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This evening (Sunday, US Eastern time), Lambda the Ultimate will be migrated to new servers.&lt;/p&gt;
&lt;p &gt;The site will be offline for around 30 minutes, while this migration and some database maintenance is in progress.&lt;/p&gt;
&lt;p &gt;The new platform is a shiny new Kubernetes cluster, which will enable some long-overdue improvements to the site in 2018.&lt;/p&gt;
&lt;p &gt;An update will be posted in this thread once the migration is complete.
&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/2">Site Discussion</category>
 <pubDate>Sun, 04 Feb 2018 20:03:47 +0000</pubDate>
</item>
</channel>
</rss>
