<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Paradigms</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/10/0</link>
 <description></description>
 <language>en</language>
<item>
 <title>What does focusing tell us about language design?</title>
 <link>http://lambda-the-ultimate.org/node/4471</link>
 <description>&lt;p &gt;A blog post about &lt;a href=&quot;http://www.cs.bham.ac.uk/~pbl/cbpv.html&quot;&gt;Call-By-Push-Value&lt;/a&gt; by Rob Simmons: &lt;a href=&quot;http://requestforlogic.blogspot.com/2012/03/what-does-focusing-tell-us-about.html&quot;&gt;What does focusing tell us about language design?&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
I think that one of the key observations of focusing/CBPV is that programs are dealing with two different things - data and computation - and that we tend to get the most tripped up when we confuse the two.&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;Data is classified by data types (a.k.a. positive types). Data is defined by how it is constructed, and the way you use data is by pattern-matching against it.
&lt;li &gt;Computation is classified by computation types (a.k.a. negative types). Computations are defined their eliminations - that is, by how they respond to signals/messages/pokes/arguments.
&lt;/ul&gt;
&lt;p &gt;There are two things I want to talk about, and they&#039;re both recursive types: call-by-push-value has positive recursive types (which have the feel of inductive types and/or algebras and/or what we&#039;re used to as datatypes in functional languages) and negative recursive types (which have the feel of recursive, lazy records and/or &quot;codata&quot; whatever that is and/or coalgebras and/or what William Cook calls objects). Both positive and negative recursive types are treated by Paul Blain Levy in his thesis (section 5.3.2) and in the Call-By-Push Value book (section 4.2.2).&lt;/p&gt;
&lt;p &gt;In particular, I want to claim that Call-By-Push-Value and focusing suggest two fundamental features that should be, and generally aren&#039;t (at least simultaneously) in modern programming languages:&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;Support for structured data with rich case analysis facilities (up to and beyond what are called views)
&lt;li &gt;Support for recursive records and negative recursive types.
&lt;/ul&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Previously on Rob&#039;s blog: &lt;a href=&quot;http://requestforlogic.blogspot.com/2011/08/embracing-and-extending-levy-language.html&quot;&gt;Embracing and extending the Levy language&lt;/a&gt;; on LtU: &lt;a href=&quot;http://lambda-the-ultimate.org/node/1975&quot;&gt;Call by push-value&lt;/a&gt;, &lt;a href=&quot;http://lambda-the-ultimate.org/node/4314&quot;&gt;Levy: a Toy Call-by-Push-Value Language&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;And let me also repeat CBPV&#039;s slogan, which is one of the finest in PL advocacy: &lt;em &gt;Once the fine structure has been exposed, why ignore it?&lt;/em&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/14">OOP</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <pubDate>Mon, 05 Mar 2012 10:17:25 -0500</pubDate>
</item>
<item>
 <title>Adding Delimited and Composable Control to a Production Programming Environment</title>
 <link>http://lambda-the-ultimate.org/node/4466</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.utah.edu/plt/publications/icfp07-fyff.pdf&quot;&gt;Adding Delimited and Composable Control to a Production Programming Environment&lt;/a&gt; (&lt;a href=&quot;http://www.cs.utah.edu/plt/delim-cont/&quot;&gt;add&#039;l material&lt;/a&gt;), Matthew Flatt, Gang Yu, Robert Bruce Findler, Matthias Felleisen, ICFP 2007.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Operators for delimiting control and for capturing composable continuations litter the landscape of theoretical programming language research. Numerous papers explain their advantages, how the operators explain each other (or don’t), and other aspects of the operators’ existence. Production programming languages, however, do not support these operators, partly because their relationship to existing and demonstrably useful constructs—such as exceptions and dynamic binding—remains relatively unexplored. In this paper, we report on our effort of translating the theory of delimited and composable control into a viable implementation for a production system. The report shows how this effort involved a substantial design element, including work with a formal model, as well as significant practical exploration and engineering. The resulting version of PLT Scheme incorporates the expressive combination of delimited and composable control alongside dynamic-wind, dynamic binding, and exception handling. None of the additional operators subvert the intended benefits of existing control operators, so that programmers can freely mix and match control operators.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Another tour de force by the PLT folks. Does your language have &lt;a href=&quot;http://lambda-the-ultimate.org/node/4334&quot;&gt;delimited control&lt;/a&gt;, &lt;a href=&quot;http://lambda-the-ultimate.org/node/1584&quot;&gt;delimited dynamic binding&lt;/a&gt;, and exceptions? It&#039;s the new gold standard, and so far only Racket and O&#039;Caml qualify (and maybe Haskell and Scala?)&lt;/p&gt;
&lt;p &gt;Racket&#039;s implementation is additionally interesting because it achieves backwards compatibility with code written using undelimited call/cc and dynamic-wind. The authors mention that a simpler solution would be possible without this compatibility - based on &lt;em &gt;control filters&lt;/em&gt; from the &lt;a href=&quot;http://lambda-the-ultimate.org/node/216&quot;&gt;Subcontinuations&lt;/a&gt; paper.&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>Fri, 02 Mar 2012 14:09:40 -0500</pubDate>
</item>
<item>
 <title>Programming as collaborative reference</title>
 <link>http://lambda-the-ultimate.org/node/4444</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://okmij.org/ftp/Computation/index.html#collaborative-PL&quot;&gt;Programming as collaborative reference&lt;/a&gt; (extended abstract and slides) by everybody&#039;s favorite PLT tag team, Oleg and Chung-chieh, from the &lt;a href=&quot;http://www.cs.princeton.edu/~dpw/obt/&quot;&gt;Off-the-beaten track workshop&lt;/a&gt; affiliated with POPL 2012:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;We argue that programming-language theory should face the pragmatic fact that humans develop software by interacting with computers in real time [hear, hear]. This interaction not only relies on but also bears on the core design and tools of programming languages, so it should not be left to Eclipse plug-ins and StackOverflow. We further illustrate how this interaction could be improved by drawing from existing research on natural-language dialogue, specifically on collaborative reference.&lt;/p&gt;
&lt;p &gt;Overloading resolution is one immediate application. Here, collaborative reference can resolve the tension between fancy polymorphism and the need to write long type annotations everywhere. The user will submit a source code fragment with few or no annotations. If the compiler gets stuck -- e.g., because of ambiguous overloading -- it will ask the user for a hint. At the successful conclusion of the dialogue, the compiler saves all relevant context, in the form of inserted type annotations or as a proof tree attached to the source code. When revisiting the code later on, the same or a different programmer may ask the compiler questions about the inferred types and the reasons for chosen overloadings. We argue that such an interactive overloading resolution should be designed already in the type system (e.g., using oracles).&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sat, 04 Feb 2012 11:48:09 -0500</pubDate>
</item>
<item>
 <title>A Semantic Model for Graphical User Interfaces</title>
 <link>http://lambda-the-ultimate.org/node/4352</link>
 <description>&lt;p &gt;Nick Benton and Neel Krishnaswami, ICFP&#039;11, &lt;A href=&quot;http://www.cs.cmu.edu/~neelk/icfp11-krishnaswami-benton.pdf&quot;&gt;A Semantic Model for Graphical User Interfaces&lt;/A&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We give a denotational model for graphical user interface (GUI) programming using the Cartesian closed category of ultrametric spaces. [..] We capture the arbitrariness of user input [..] [by a nondeterminism] “powerspace” monad.&lt;/p&gt;
&lt;p &gt;Algebras for the powerspace monad yield a model of intuitionistic linear logic, which we exploit in the definition of a mixed linear/non-linear domain-specific language for writing GUI programs. The non-linear part of the language is used for writing reactive stream-processing functions whilst the linear sublanguage naturally captures the generativity and usage constraints on the various linear objects in GUIs, such as the elements of a DOM or scene graph.&lt;/p&gt;
&lt;p &gt;We have implemented this DSL as an extension to OCaml, and give examples demonstrating that programs in this style can be short and readable.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is an application of their (more squiggly) LICS&#039;11 submission, &lt;A href=&quot;http://www.cs.cmu.edu/~neelk/frp-lics11.pdf&quot;&gt;Ultrametric Semantics of Reactive Programs&lt;/A&gt;. In both these cases, I find appealing the fact the semantic model led to a type system and a language that was tricky to find.&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/5">Fun</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/11">Functional</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/19">Theory</category>
 <pubDate>Sat, 10 Sep 2011 16:25:56 -0400</pubDate>
</item>
<item>
 <title>Levy:  a Toy Call-by-Push-Value Language</title>
 <link>http://lambda-the-ultimate.org/node/4314</link>
 <description>&lt;p &gt;Andrej Bauer&#039;s &lt;A href=&#039;http://math.andrej.com/&#039;&gt;blog&lt;/A&gt; contains the &lt;A href=&#039;http://math.andrej.com/?s=PL+Zoo&#039;&gt;PL Zoo&lt;/A&gt; project. In particular, the &lt;A href=&#039;http://math.andrej.com/2008/11/23/a-toy-call-by-push-value-language/&#039;&gt;Levy&lt;/A&gt; language, a toy implementation of Paul Levy&#039;s &lt;A href=&#039;http://lambda-the-ultimate.org/node/1975&#039;&gt;CBPV&lt;/A&gt; in OCaml. &lt;/p&gt;
&lt;p &gt;If you&#039;re curious about CBPV, this implementation might be a nice accompaniment to the &lt;A href=&#039;http://portal.acm.org/citation.cfm?id=984044&#039;&gt;book&lt;/A&gt;, or simply a hands on way to check it out.&lt;/p&gt;
&lt;p &gt;It looks like an implementation of CBPV without sum and product types, with complex values, and without effects. I guess a more hands-on way to get to grips with CBPV would be to implement any of these missing features.&lt;/p&gt;
&lt;p &gt;The posts are are 3 years old, but I&#039;ve only just noticed them. The PL Zoo project was &lt;A href=&#039;http://lambda-the-ultimate.org/node/2815#comment-42266&#039;&gt;briefly mentioned&lt;/A&gt; here.&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>
 <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/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</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>Thu, 14 Jul 2011 14:57:09 -0400</pubDate>
</item>
<item>
 <title>Type-checking Modular Multiple Dispatch with Parametric Polymorphism and Multiple Inheritance</title>
 <link>http://lambda-the-ultimate.org/node/4236</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.mpi-sws.org/~skilpat/papers/multipoly-ecoop.pdf&quot;&gt;Type-checking Modular Multiple Dispatch with Parametric Polymorphism and Multiple Inheritance&lt;/a&gt;. Eric Allen, Justin Hilburn, Scott Kilpatrick, Sukyoung Ryu, David Chase, Victor Luchangco, and Guy L. Steele Jr. Submitted for publication, December 2010.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Multiple dynamic dispatch poses many problems for a statically typed language with nominal subtyping and multiple inheritance. In particular, there is a tension between modularity and extensibility when trying to ensure at compile time that each function call dispatches to a unique most specific definition at run time. We have previously shown how requiring that each set of overloaded definitions forms a meet semi-lattice allows one to statically ensure the absence of ambiguous calls while maintaining modularity and extensibility.&lt;/p&gt;
&lt;p &gt;In this paper, we extend the rules for ensuring safe overloaded functions to a type system with parametric polymorphism. We show that such an extension can be reduced to the problem of determining subtyping relationships between universal and existential types. We also ensure that syntactically distinct types inhabited by the same sets of values are equivalent under subtyping. Our system has been implemented as part of the open source Fortress compiler.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;So it&#039;s Sunday, and I&#039;m researching the interaction of multiple dispatch, type-checking, and  parametric polymorphism, when Google spits out this new paper by the Fortress team.&lt;/p&gt;
&lt;p &gt;Scott Kilpatrick&#039;s Master&#039;s Thesis &lt;a href=&quot;http://www.mpi-sws.org/~skilpat/papers/kilpatrick-masters-thesis.pdf&quot;&gt;Ad Hoc: Overloading and Language Design&lt;/a&gt; puts it into perspective:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;The intricate concepts of ad-hoc polymorphism and overloading permeate the field of programming languages despite their somewhat nebulous definitions. With the perspective afforded by the state of the art, object-oriented Fortress programming language, this thesis presents a contemporary account of ad-hoc polymorphism and overloading in theory and in practice. Common language constructs are reinterpreted with a new emphasis on overloading as a key facility.&lt;/p&gt;
&lt;p &gt;Furthermore, concrete problems with overloading in Fortress, encountered during the author&#039;s experience in the development of the language, are presented with an emphasis on the ad hoc nature of their solutions.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;All of this is a bit over my head, unfortunately, but I find it very interesting nevertheless.  And it&#039;s heartening that the somewhat neglected multiple dispatch (and multiple inheritance!) is further developed by such a high caliber team.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Sun, 20 Mar 2011 12:28:15 -0400</pubDate>
</item>
<item>
 <title>Omega - Language of the Future</title>
 <link>http://lambda-the-ultimate.org/node/4088</link>
 <description>&lt;p &gt;When I discovered Tim Sheard&#039;s &lt;a href=&quot;http://web.cecs.pdx.edu/~sheard/papers/LangOfTheFuture.ps&quot;&gt;Languages of the Future&lt;/a&gt;, I realized that PLs do indeed have a future (beyond asymptotically approaching CLOS and/or adding whimsical new rules to your type checker).  Compared to languages like Lisp, pre-generics Java, and Python, the &quot;futuristic&quot; languages like Haskell and O&#039;Caml seemed to mainly offer additional static verification, and some other neat patterns, but the &quot;bang for the buck&quot; seemed somewhat low, especially since these languages have their own costs (they are much more complex, they rule out many &quot;perfectly fine&quot; programs).&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://web.cecs.pdx.edu/~sheard/&quot;&gt;&amp;Omega;mega&lt;/a&gt; seems like a true revolution to me - it shows what can be done with a really fancy typesystem, and this seems like the first astounding advancement over existing languages, from Python to Haskell.  Its mantra is that it&#039;s possible to reap many (all?) benefits of dependent programming, without having to suffer its problems, by adding two much more humble notions to the widely understood, ordinary functional programming setting: &lt;a href=&quot;http://web.cecs.pdx.edu/~sheard/papers/GADT+ExtKinds.ps&quot;&gt;GADTs + Extensible Kinds&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;Sheard and coworkers show that these two simple extensions allow &lt;a href=&quot;http://web.cecs.pdx.edu/~sheard/papers/SumSchNotes.ps&quot;&gt;the succinct expression of many dependently-typed and related examples&lt;/a&gt; from the literature.  Fine examples are implementations of AVL and red-black trees that are always balanced &lt;em &gt;by construction&lt;/em&gt; -  it&#039;s simply impossible to create an unbalanced tree; this is checked by the type-system.  It seems somewhat obvious that sooner than later all code will be written in this (or a similar) way.&lt;/p&gt;
&lt;p &gt;How to understand this stuff: my route was through the generics of Java and C# (especially Featherweight Generic Java, &lt;a href=&quot;http://lamp.epfl.ch/~cremet/FGJ-omega/&quot;&gt;FGJ&lt;sub &gt;&amp;omega;&lt;/sub&gt;&lt;/a&gt;, and &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/akenn/generics/index.html&quot;&gt;A. Kennedy&#039;s generics papers&lt;/a&gt;).  Once you understand basic notions like type constructors, variance, and kinds, you know everything to understand why &lt;a href=&quot;http://lambda-the-ultimate.org/node/689&quot;&gt;GADTs + Extensible Kinds = Dependent Programming&lt;/a&gt; (and also esoteric stuff like &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.6.6746&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;polytypic values have polykinded types&lt;/a&gt; for that matter).&lt;/p&gt;
&lt;p &gt;It is my belief that &lt;em &gt;you must understand &amp;Omega;mega now!&lt;/em&gt; Even if you&#039;re never going to use it, or something like it, you&#039;ll still learn a whole lot about programming.  Compared to &amp;Omega;mega, other languages are puny. ;P&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/15">Meta-Programming</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Fri, 24 Sep 2010 20:49:20 -0400</pubDate>
</item>
<item>
 <title>On Iteration</title>
 <link>http://lambda-the-ultimate.org/node/3947</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.informit.com/articles/printerfriendly.aspx?p=1407357&quot;&gt;On Iteration&lt;/a&gt;, by Andrei Alexandrescu.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Lisp pioneered forward iteration using singly-linked lists. Later object-oriented container designs often used the Iterator design pattern to offer sequential access using iterators. Though iterators are safe and sensible, their interface prevents definition of flexible, general, and efficient container-independent algorithms. For example, you can&#039;t reasonably expect to sort, organize as a binary heap, or even reverse a container by just using its Iterator. At about the same time, C++&#039;s Standard Template Library (STL) defines its own conceptual hierarchy of iterators and shows that container-independent algorithms are possible using that hierarchy. However, STL iterators are marred by lack of safety, difficulty of usage, difficulty of definition, and a very close relationship to C++ that limits adoption by other languages. I propose an API that combines the advantages of Iterator and STL, and I bring evidence that the proposed abstraction is sensible by implementing a superset of STL&#039;s algorithms in the D language&#039;s standard library.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Previously: &lt;a href=&quot;http://lambda-the-ultimate.org/node/3520&quot;&gt;Iterators Must Go&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/17">Software Engineering</category>
 <pubDate>Wed, 12 May 2010 13:52:18 -0400</pubDate>
</item>
<item>
 <title>Project Sikuli</title>
 <link>http://lambda-the-ultimate.org/node/3783</link>
 <description>&lt;p &gt;Picture or &lt;a href=&quot;http://web.mit.edu/newsoffice/2010/screen-shots-0120.html&quot;&gt;screenshot driven programming&lt;/a&gt; from the MIT.&lt;/p&gt;
&lt;p &gt;From the Sikuli &lt;a href=&quot;http://sikuli.csail.mit.edu/&quot;&gt;project page&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Sikuli is a visual technology to search and automate graphical user interfaces (GUI) using images (screenshots). The first release of Sikuli contains Sikuli Script, a visual scripting API for Jython, and Sikuli IDE, an integrated development environment for writing visual scripts with screenshots easily.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/26">Python</category>
 <pubDate>Sun, 24 Jan 2010 00:31:57 -0500</pubDate>
</item>
<item>
 <title>Differentiating Parsers</title>
 <link>http://lambda-the-ultimate.org/node/3704</link>
 <description>&lt;p &gt;A &lt;a href=&quot;http://okmij.org/ftp/Computation/differentiating-parsers.html&quot;&gt;fascinating article&lt;/a&gt; by Oleg Kiselyov on delimited continuations:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We demonstrate the conversion of a regular parser to an incremental one in byte-code OCaml. The converted, incremental parser lets us parse from a stream that is only partially known. The parser may report what it can, asking for more input. When more input is supplied, the parsing resumes. The converted parser is not only incremental but also undoable and restartable. If, after ingesting a chunk of input the parser reports a problem, we can `go back&#039; and supply a different piece of input.&lt;/p&gt;
&lt;p &gt;The conversion procedure is automatic and largely independent of the parser implementation. The parser should either be written without visible side effects, or else we should have access to its global mutable state. The parser otherwise may be written with no incremental parsing in mind, available to us only in a compiled form. The conversion procedure relies on the inversion of control, accomplished with the help of delimited continuations provided by the delimcc library.
&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <pubDate>Sat, 05 Dec 2009 11:03:36 -0500</pubDate>
</item>
<item>
 <title>Expressive Modes and Species of Language</title>
 <link>http://lambda-the-ultimate.org/node/3587</link>
 <description>&lt;p &gt;R. E. Moe, 2006. &lt;a href=&quot;http://www.waset.org/journals/waset/v23/v23-27.pdf&quot;&gt;Expressive Modes and Species of Language&lt;/a&gt;.  In Proc. 23rd &lt;i &gt;World Academy of Science, Engineering and Technology&lt;/i&gt;.&lt;/p&gt;
&lt;p &gt;This paper is very relevant to my attempts to characterise what I call the Scott-Strachey school of computer science; cf. &lt;a href=&quot;http://lambda-the-ultimate.org/node/3304#comment-48467&quot;&gt;Right On!&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;I am grateful to Ehud for bringing the following paper to my attention: White, G., 2004; The Philosophy of Computer Languages; In L. Floridi (ed.): &lt;i &gt;Philosophy of Computing and Information&lt;/i&gt;; Blackwell, 2004.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <pubDate>Mon, 24 Aug 2009 15:46:06 -0400</pubDate>
</item>
<item>
 <title>Iterators Must Go</title>
 <link>http://lambda-the-ultimate.org/node/3520</link>
 <description>&lt;p &gt;Andrei Alexandrescu: &lt;a href=&quot;http://www.boostcon.com/site-media/var/sphene/sphwiki/attachment/2009/05/08/iterators-must-go.pdf&quot;&gt;Iterators Must Go&lt;/a&gt;, BoostCon 2009 keynote. &lt;/p&gt;
&lt;p &gt;Presents a simple yet far-reaching replacement for iterators, called ranges, and interesting &quot;D&quot; libraries built on it: &lt;a href=&quot;http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html&quot;&gt;std.algorithm&lt;/a&gt; and &lt;a href=&quot;http://www.digitalmars.com/d/2.0/phobos/std_range.html&quot;&gt;std.range&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Ranges pervade D: algorithms, lazy evaluation, random numbers, higher-order functions, foreach statement...&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;(Related: &lt;a href=&quot;http://lambda-the-ultimate.org/node/1451&quot;&gt;SERIES&lt;/a&gt;, &lt;a href=&quot;http://okmij.org/ftp/Scheme/enumerators-callcc.html&quot;&gt;enumerators&lt;/a&gt;, &lt;a href=&quot;http://srfi.schemers.org/srfi-1/srfi-1.html&quot;&gt;SRFI 1&lt;/a&gt;, and &lt;a href=&quot;http://www.ddj.com/hpc-high-performance-computing/217801225&quot;&gt;The Case For D&lt;/a&gt; by the same author)&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/10">Paradigms</category>
 <pubDate>Mon, 20 Jul 2009 16:40:08 -0400</pubDate>
</item>
<item>
 <title>Computer music: a bastion of interactive visual dataflow languages</title>
 <link>http://lambda-the-ultimate.org/node/3316</link>
 <description>&lt;p &gt;The area of computer music has been designing systems for aiding music composition and performance for over 40 years now.  The developers have not been much influenced by mainstream programming fads, but have been  driven mainly by the needs of composers and performers.  Current systems keep the principal original metaphor, the &lt;i &gt;patchboard&lt;/i&gt;: a collection of live modules (&quot;patches&quot;) connected by cables and easily inspected and modified on the fly.  This metaphor has full GUI support and is extended with interactive visual tools for abstraction and exploration, such as the &lt;i &gt;maquette&lt;/i&gt;.  The language semantics are based on deterministic concurrency, with controlled use of nondeterminism and state.
&lt;p &gt;
Current systems are full-fledged programming platforms with visual dataflow languages.  Two examples among many are the &lt;A href=&quot;http://www.cycling74.com/products/max5&quot;&gt;Max/MSP&lt;/A&gt; platform for controlling and generating music performances in real time and the &lt;A href=&quot;http://recherche.ircam.fr/equipes/repmus/OpenMusic/&quot;&gt;OpenMusic&lt;/A&gt; design studio for composers.  Max/MSP has two visual dataflow languages: one for control and one for real-time waveform generation.  OpenMusic has a dataflow language controlled interactively with many tools for composers.
&lt;p &gt;
These systems are actually general-purpose programming platforms.  They show that visual dataflow can be made both practical and scalable.  In my view, this is one promising direction for the future of programming.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <pubDate>Wed, 13 May 2009 07:50:47 -0400</pubDate>
</item>
<item>
 <title>The Art of the Propagator</title>
 <link>http://lambda-the-ultimate.org/node/3250</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://dspace.mit.edu/handle/1721.1/44215&quot;&gt;The Art of the Propagator&lt;/a&gt;, Alexey Radul and Gerald Jay Sussman. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
We develop a programming model built on the idea that the basic computational elements are autonomous machines interconnected by shared cells through which they communicate. Each machine continuously examines the cells it is interested in, and adds information to some based on deductions it can make from information from the others. This model makes it easy to smoothly combine expression-oriented and constraint-based programming; it also easily accommodates implicit incremental distributed search in ordinary programs. This work builds on the original research of Guy Lewis Steele Jr. and was developed more recently with the help of Chris Hanson.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I just ran across this tech report. I haven&#039;t read it yet, but the subject is particularly well-timed for me, since I just finished a correctness proof for a simple FRP system implemented via imperative dataflow graphs, and so constraint propagation has been much on my mind recently. It&#039;s pretty clear that constraint propagation can do things that FRP doesn&#039;t, but it&#039;s not so clear to me whether this is a case of &quot;more expressiveness&quot; or &quot;more fragile abstractions&quot;.  &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/10">Paradigms</category>
 <pubDate>Tue, 24 Mar 2009 19:47:39 -0400</pubDate>
</item>
<item>
 <title>Linear Logic and Permutation Stacks--The Forth Shall Be First</title>
 <link>http://lambda-the-ultimate.org/node/3227</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://home.pipeline.com/~hbaker1/ForthStack.html&quot;&gt;Linear Logic and Permutation Stacks--The Forth Shall Be First&lt;/a&gt; by Henry Baker, 1993.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Girard&#039;s linear logic can be used to model programming languages in which each bound variable name has exactly one &quot;occurrence&quot;--i.e., no variable can have implicit &quot;fan-out&quot;; multiple uses require explicit duplication. Among other nice properties, &quot;linear&quot; languages need no garbage collector, yet have no dangling reference problems. We show a natural equivalence between a &quot;linear&quot; programming language and a stack machine in which the top items can undergo arbitrary permutations. Such permutation stack machines can be considered combinator abstractions of Moore&#039;s Forth programming language.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;I remembered this paper while chatting with a friend who&#039;s designing a stack-based instruction set and looking for relevant compilation techniques (imagine compiling C to Forth). Do you have some relevant references?
&lt;p &gt;
Today I found this paragraph particularly intriguing:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Since Forth is usually implemented on a traditional von Neumann machine, one thinks of the return stack as holding &quot;return addresses&quot;. However, in these days of large instruction caches, in which entire cache lines are read from the main memory in one transaction, this view should be updated. It is well-known that non-scientific programs have a very high rate of conditional branches, with the mean number of instructions between branches being on the order of 10 or less. Forth programs are also very short, with &quot;straight-line&quot; (non-branching) sequences averaging 10 items or less. In these environments, it makes more sense to view the return stack itself as the instruction buffer cache! In other words, the return stack doesn&#039;t hold &quot;return addresses&quot; at all, but the instructions themselves! When a routine is entered, the entire routine is dumped onto the top of the return stack, and execution proceeds with the top item of this stack. Since routines are generally very short, the transfer of an entire routine is about the same amount of work as transferring a complete cache line in present architectures. Furthermore, an instruction stack-cache-buffer is normally accessed sequentially, and therefore can be implemented using shift register technology. Since a shift register can be shifted faster than a RAM can be accessed, the &quot;access time&quot; of this instruction stack-cache-buffer will not be a limiting factor in a machine&#039;s speed. Executing a loop in an instruction stack-cache-buffer is essentially the making of connections necessary to create a cyclic shift register which literally cycles the instructions of the loop around the cyclic shift register.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Imagine that!&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/10">Paradigms</category>
 <pubDate>Sat, 07 Mar 2009 16:50:40 -0500</pubDate>
</item>
</channel>
</rss>

