<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - DSL</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/24/0</link>
 <description>Domain Specific Languages</description>
 <language>en</language>
<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>ScalaModules: a DSL for bringing OSGi to Scala</title>
 <link>http://lambda-the-ultimate.org/node/3767</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://wiki.github.com/hseeberger/scalamodules&quot;&gt;ScalaModules&lt;/a&gt; is an open source project aimed at providing fluent support for OSGi to Scala developers.  It takes advantage of Scala&#039;s infix operator notation, higher order functions, and implicit conversions.  ScalaModules transparently uses the Scala compiler to wrap an OSGi BundleContext with &lt;a href=&quot;http://wiki.github.com/hseeberger/scalamodules/user-guide-03-background&quot;&gt;its own RichBundleContext model&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;This general technique is not unusual for creating DSLs in mainstream languages.  Sean McDirmid uses similar tricks for his C# &lt;a href=&quot;http://bling.codeplex.com/&quot;&gt;Bling&lt;/a&gt; library for WPF, except that Bling must overcome the &lt;a href=&quot;http://lambda-the-ultimate.org/node/3135#comment-46738&quot;&gt;lack of C# offering comparable extensions to Scala&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Mon, 11 Jan 2010 13:03:52 -0500</pubDate>
</item>
<item>
 <title>The AI Systems of Left 4 Dead</title>
 <link>http://lambda-the-ultimate.org/node/3732</link>
 <description>&lt;p &gt;There&#039;s no PL content per se in &lt;a href=&quot;http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf&quot;&gt;this presentation&lt;/a&gt;, but a PL weenie will surely think of a DSL for almost every slide, so I hope posting this is warranted.&lt;/p&gt;
&lt;p &gt;Tim Sweeney has written previously on the programming challenges raised by game development (&lt;a href=&quot;http://lambda-the-ultimate.org/node/1277&quot;&gt;The Next Mainstream Programming Languages: A Game Developer&#039;s Perspective&lt;/a&gt;), and I think this presentation is another showcase of the huge problems that need solving in game development.&lt;/p&gt;
&lt;p &gt;Finally, I wonder why anyone would use a language that doesn&#039;t allow quick and simple syntax extension for driving a game engine? Seriously, the possibilities for ad-hoc DSLs seem endless.&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/16">Parallel/Distributed</category>
 <pubDate>Tue, 22 Dec 2009 08:48:43 -0500</pubDate>
</item>
<item>
 <title>Back to the Future: Lisp as a Base for a Statistical Computing System</title>
 <link>http://lambda-the-ultimate.org/node/3726</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.stat.auckland.ac.nz/%7Eihaka/downloads/Compstat-2008.pdf&quot;&gt;Back to the Future: Lisp as a Base for a Statistical Computing System&lt;/a&gt; by Ross Ihaka and Duncan Temple Lang, and the accompanying &lt;a href=&quot;http://www.stat.auckland.ac.nz/%7Eihaka/downloads/Compstat-2008-Slides.pdf&quot;&gt;slides&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;This paper was &lt;a href=&quot;http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/3b8ccb9acabc12e2/85cd002bc538e561&quot;&gt;previously discussed&lt;/a&gt; on comp.lang.lisp, but apparently not covered on LtU before.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;The application of cutting-edge statistical methodology is limited by the capabilities of the systems in which it is implemented. In particular, the limitations of R mean that applications developed there do not scale to the larger problems of interest in practice. We identify some of the limitations of the computational model of the R language that reduces its effectiveness for dealing with large data efficiently in the modern era.&lt;/p&gt;
&lt;p &gt;We propose developing an R-like language on top of a Lisp-based engine for statistical computing that provides a paradigm for modern challenges and which leverages the work of a wider community. At its simplest, this provides a convenient, high-level language with support for compiling code to machine instructions for very significant improvements in computational performance. But we also propose to provide a framework which supports more computationally intensive approaches for dealing with large datasets and position ourselves for dealing with future directions in high-performance computing.&lt;/p&gt;
&lt;p &gt;We discuss some of the trade-offs and describe our efforts to realizing this approach. More abstractly, we feel that it is important that our community explore more ambitious, experimental and risky research to explore computational innovation for modern data analyses.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Foot note:&lt;br &gt;
Ross Ihaka co-developed the R statistical programming language with Robert Gentleman.  For those unaware, R is effectively an open source implementation of &lt;a href=&quot;http://en.wikipedia.org/wiki/S-PLUS&quot;&gt;S-PLUS&lt;/a&gt;, which in turn was based on &lt;a href=&quot;http://en.wikipedia.org/wiki/S_programming_language&quot;&gt;S&lt;/a&gt;.  R is sort of the lingua franca of statistics, and you can usually find R code provided in the back of several Springer Verlag monographs.&lt;/p&gt;
&lt;p &gt;Duncan Temple Lang is a core developer of R and has worked on the core engine for TIBCO&#039;s S-PLUS.&lt;/p&gt;
&lt;p &gt;Thanks to LtU user bashyal for providing the links.&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/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/7">History</category>
 <pubDate>Thu, 17 Dec 2009 10:01:40 -0500</pubDate>
</item>
<item>
 <title>Why API Design Matters</title>
 <link>http://lambda-the-ultimate.org/node/3720</link>
 <description>&lt;p &gt;Michi Henning,  &lt;a href=&quot;http://cacm.acm.org/magazines/2009/5/24646-api-design-matters/fulltext&quot;&gt;Why API Design Matters&lt;/a&gt;,  Communications of the ACM,  May 2009.   &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;After more than 25 years as a software engineer, I still find myself underestimating the time it takes to complete a particular programming task. Sometimes, the resulting schedule slip is caused by my own shortcomings: as I dig into a problem, I simply discover it is a lot more difficult than I initially thought, so the problem takes longer to solve—such is life as a programmer. Just as often I know exactly what I want to achieve and how to achieve it, but it still takes far longer than anticipated. When that happens, it is usually because I am struggling with an application programming interface (API) that seems to do its level best to throw rocks in my path and make my life difficult. What I find telling is that, even after 25 years of progress in software engineering, this still happens. Worse, recent APIs implemented in modern programming languages make the same mistakes as their 20-year-old counterparts written in C. There seems to be something elusive about API design that, despite years of progress, we have yet to master.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This is a rather accessible look at the consequences of bad API design.   Interestingly enough,  the main example revolves around the inappropriate use of side effects.   The last section concludes with cultural changes the author feels is necessary to improve the situation.&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/24">DSL</category>
 <pubDate>Tue, 15 Dec 2009 17:09:10 -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>Causal Commutative Arrows and Their Optimization</title>
 <link>http://lambda-the-ultimate.org/node/3659</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.cs.yale.edu/homes/hl293/download/icfp066-liu.pdf&quot;&gt;Causal Commutative Arrows and Their Optimization&lt;/a&gt;, Hai Liu. Eric Cheng. Paul Hudak. ICFP 2009.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Arrows are a popular form of abstract computation. Being more general than monads, they are more broadly applicable, and in particular are a good abstraction for signal processing and dataflow computations. Most notably, arrows form the basis for a domain specific language called Yampa, which has been used in a variety of concrete applications, including animation, robotics, sound synthesis, control systems, and graphical user interfaces.&lt;/p&gt;
&lt;p &gt;Our primary interest is in better understanding the class of abstract computations captured by Yampa. Unfortunately, arrows are not concrete enough to do this with precision. To remedy this situation we introduce the concept of commutative arrows that capture a kind of non-interference property of concurrent computations. We also add an init operator, and identify a crucial law that captures the causal nature of arrow effects. We call the resulting computational model causal commutative arrows.&lt;/p&gt;
&lt;p &gt;To study this class of computations in more detail, we define an extension to the simply typed lambda calculus called causal commutative arrows (CCA), and study its properties. Our key contribution is the identification of a normal form for CCA called causal commutative normal form (CCNF). By defining a normalization procedure we have developed an optimization strategy that yields dramatic improvements in performance over conventional implementations of arrows. We have implemented this technique in Haskell, and conducted benchmarks that validate the effectiveness of our approach. When combined with stream fusion, the overall methodology can result in speed-ups of greater than two orders of magnitude.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;One way of understanding what is going on in this paper is that in terms of dataflow programming, FRP programs correspond to programs with single-entry, single-exit dataflow graphs. This means that none of the internal dataflow nodes in an FRP program are actually necessary -- you can coalesce all those nodes into a single node while preserving the observable behavior. (They briefly touch on this point when they mention that synchronous languages try to compile to &quot;single loop code&quot;.) What&#039;s very slick is that they have a nice normal form procedure that (a) is defined entirely in terms of their high-level language, and (b) always yields code corresponding to the the coalesced dataflow graph. It&#039;s an elegant demonstration of the power of equational reasoning. &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/11">Functional</category>
 <pubDate>Wed, 28 Oct 2009 06:06:57 -0400</pubDate>
</item>
<item>
 <title>L+C Modeling Language</title>
 <link>http://lambda-the-ultimate.org/node/3608</link>
 <description>&lt;small&gt;Radoslaw Karwowski and Przemyslaw Prusinkiewicz. &lt;a href=&quot;http://algorithmicbotany.org/papers/l+c.tcs2003.html&quot;&gt;Design and implementation of the L+C modeling language&lt;/a&gt;. Electronic Notes in Theoretical Computer Science 86 (2), 19 pp.&lt;/small&gt;&lt;/p&gt;
&lt;blockquote&gt;
L-systems are parallel grammars that provide a theoretical foundation for a class of programs used in the simulation of plant development and procedural image synthesis. In particular, the formalism of L-systems guides the construction of declarative languages for specifying input to these programs. We outline key factors that have motivated the development of L-system-based languages in the past, and introduce a new language, L+C, that addresses the shortcomings of its predecessors. We also describe a simulation program, lpfg, which makes it possible to execute models specified in L+C. To this end, L+C programs are translated into C++, compiled into a DLL, and linked with lpfg at runtime. The use of this strategy simplifies the implementation of the modeling system.&lt;/blockquote&gt;&lt;p&gt;
I somehow failed to notice L+C as a demarcated language before. I am not entirely sure what one needs to download in order to use L+C directly.&lt;p&gt;
I am sure this is relevant to the great &lt;a href=&quot;http://lambda-the-ultimate.org/node/3601&quot;&gt;DSL debate&lt;/a&gt;, but I am not sure in favor of which side of the debate...&lt;p&gt;
The &lt;a href=&quot;http://algorithmicbotany.org/papers/&quot;&gt;page&lt;/a&gt; gives links to other papers about L+C. While you are there, don&#039;t miss &lt;a href=&quot;http://algorithmicbotany.org/papers/#abop&quot;&gt;The Algorithmic Beauty of Plants&lt;/a&gt;, which is great fun.
</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Thu, 10 Sep 2009 13:41:30 -0400</pubDate>
</item>
<item>
 <title>DSL goodness</title>
 <link>http://lambda-the-ultimate.org/node/3601</link>
 <description>&lt;p &gt;The site for &lt;a href=&quot;http://dsl09.blogspot.com/&quot;&gt;DSL&#039;09&lt;/a&gt;, which took place two months ago in Oxford, is a treasure trove for DSL fans. While the blog format may be a bit confusing for a conference website, you should be able to find your way around to links to slides and paper versions of the presentations. Even better, the posts include various comments people made about the papers (each talk was followed by a comment from a discussant). Apparently one can even join in and post comments!&lt;p &gt;
So tell us: What item caught your attention? Which paper should everyone here rush to read? Which DSL is downloadable and worth downloading?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Sun, 06 Sep 2009 18:02:19 -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>The End of the GPU Roadmap</title>
 <link>http://lambda-the-ultimate.org/node/3560</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://graphics.cs.williams.edu/archive/SweeneyHPG2009/TimHPG2009.pdf&quot;&gt;The slides&lt;/a&gt; from Tim Sweeney&#039;s &lt;a href=&quot;http://highperformancegraphics.org/&quot;&gt;High Performance Graphics&lt;/a&gt; 2009 keynote expand upon his &lt;a href=&quot;http://lambda-the-ultimate.org/node/1277&quot;&gt;Next Mainstream Programming Language&lt;/a&gt; talk we discussed some year back. To summarse, Tim makes the following points (in my interpretation):&lt;/p&gt;
&lt;ul &gt;
&lt;li &gt;The current GPU pipeline is too limiting and too difficult to program&lt;/li&gt;
&lt;li &gt;The CPU roadmap from Intel and others show a convergence between the CPU and GPU. We&#039;re going to see a lot of cores with vector units hanging off a shared cache. The cores are getting simpler but programming them is getting harder&lt;/li&gt;
&lt;li &gt;Programs that are purely functional can be automatically vectorised, and the new CPUs are going to extend the scope of vectorisation to general programs&lt;/li&gt;
&lt;li &gt;Economic reality demands tools to make programming this hardware easier. New languages seem the only viable way forward&lt;/li&gt;
&lt;/ul&gt;
&lt;p &gt;It&#039;s an interesting talk with a bit more detail at the bit-bashing end than previous talk. The question is: who is going to make this language?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <pubDate>Tue, 11 Aug 2009 08:41:49 -0400</pubDate>
</item>
<item>
 <title>Certiﬁed Web Services in Ynot</title>
 <link>http://lambda-the-ultimate.org/node/3548</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ynot.cs.harvard.edu/papers/wwv09.pdf&quot;&gt;Certiﬁed Web Services in Ynot&lt;/a&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
In this paper we demonstrate that it is possible to implement certiﬁed web systems in a way not much diﬀerent from writing Standard ML or Haskell code, including use of imperative features like pointers, ﬁles, and socket I/O. We present a web-based course gradebook application developed with Ynot, a Coq library for certiﬁed imperative programming. We add a dialog-based I/O system to Ynot, and we extend Ynot’s underlying Hoare logic with event traces to reason about I/O behavior. Expressive abstractions allow the modular certiﬁcation of both high level speciﬁcations like privacy guarantees and low level properties like memory safety and correct parsing.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Ynot, always ambitious, takes another serious swing: extracting a real web application from a proof development. In some respects the big news here is the additional coverage that Ynot now offers in terms of support for file and socket I/O, and the event trace mechanism. But there&#039;s even bigger news, IMHO, which is the subject of another paper that warrants a separate post.&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/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/17">Software Engineering</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/21">Type Theory</category>
 <pubDate>Thu, 06 Aug 2009 12:46:05 -0400</pubDate>
</item>
<item>
 <title>A Java Fork/Join Framework</title>
 <link>http://lambda-the-ultimate.org/node/3521</link>
 <description>&lt;p &gt;Doug Lea: &lt;a href=&quot;http://gee.cs.oswego.edu/dl/papers/fj.pdf&quot;&gt;A Java Fork/Join Framework&lt;/a&gt;, Proceedings of the ACM 2000 conference on Java Grande.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
This paper describes the design, implementation, and performance of a Java framework for supporting a style of parallel programming in which problems are solved by (recursively) splitting them into subtasks that are solved in parallel, waiting for them to complete, and then composing results. The general design is a variant of the work−stealing framework devised for Cilk.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;This work is about to be incorporated into Java 7 as &lt;a href=&quot;http://artisans-serverintellect-com.si-eioswww6.com/default.asp?W9&quot;&gt;jsr166y&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Parallel*Array (often referred to as PA) and its planned follow-ons for sets and maps, provide an easier/better way of routinely programming to take advantage of dozens to hundreds of processors/cores: If you can think about a programming problem in terms of aggregate operations on collections of elements, then we can automate parallel execution. This generally pays off if either you have lots of elements, (in which case, it works well even if the operations are small/cheap), or if each of the operations are time consuming (in which case it works well even if there are not a lot of elements). To take advantage of this though, the aggregate processing must have a regular structure, which means that you must be able to express things in terms of apply, reduce, filter, map, cumulate, sort, uniquify, paired mappings, and so on.
&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/16">Parallel/Distributed</category>
 <pubDate>Mon, 20 Jul 2009 17:06:45 -0400</pubDate>
</item>
<item>
 <title>A Reactive Model-based Programming Language for Robotic Space Explorers</title>
 <link>http://lambda-the-ultimate.org/node/3480</link>
 <description>&lt;p &gt;&lt;i &gt;Michel Ingham, Robert Ragno, and Brian Williams, &lt;a href=&quot;http://groups.csail.mit.edu/mers/papers/isairas01_rmpl.pdf&quot;&gt;A Reactive Model-based Programming Language for Robotic Space Explorers&lt;/a&gt;, Proceedings of the 6th International Symposium on Artificial Intelligence, Robotics and Automation in Space, Montreal, Canada, June 2001.&lt;/i&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;Model-based autonomous agents have emerged recently as vital technologies in the development of highly autonomous reactive systems, particularly in the aerospace domain. These agents utilize many automated reasoning capabilities, but are complicated to use because of the variety of languages employed for each capability. To address this problem, we introduce model-based programming, a novel approach to designing embedded software systems. In particular, we introduce the Reactive Model-based Programming Language (RMPL), which provides a framework for constraint-based modeling, as well as a suite of reactive programming constructs. To convey the expressiveness of RMPL, we show how it captures the main features of synchronous programming languages and advanced robotic execution languages.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Reactive programming has been discussed on LtU quite a bit in the past. Functional reactive programming, in particular, has got a lot of attention. But I don&#039;t think we&#039;ve covered reactive model-based programming before. This is an interesting approach that combines constraint-based modeling with reactive programming, and compiles programs down to hierarchical constraint automata for execution. Whereas reactive languages like Esterel focus on manipulating signals, RMPL works by manipulating (potentially hidden) system states. &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>
 <pubDate>Tue, 07 Jul 2009 00:29:51 -0400</pubDate>
</item>
<item>
 <title>Translation of Tree-processing Programs into Stream-processing Programs based on Ordered Linear Types</title>
 <link>http://lambda-the-ultimate.org/node/3335</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://www.kb.ecei.tohoku.ac.jp/~koba/papers/jfp-olt.pdf&quot;&gt;Translation of Tree-processing Programs into Stream-processing Programs based on Ordered Linear Types&lt;/a&gt;, Koichi Kodama, Kohei Suenaga, Naoki Kobayashi, JFP 2008. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
There are two ways to write a program for manipulating tree-structured data such as XML documents: One is to write a tree-processing program focusing on the logical structure of the data and the other is to write a stream-processing program focusing on the physical structure. While tree-processing programs are easier to write than stream-processing programs, tree-processing programs are less efficient in memory usage since they use trees as intermediate data. Our aim is to establish a method for automatically translating a tree-processing program to a stream-processing one in order to take the best of both worlds. &lt;/p&gt;
&lt;p &gt;We first define a programming language for processing binary trees and a type system based on ordered linear types, and show that every well-typed program can be translated to an equivalent stream-processing program. We then extend the language and the type system to deal with XML documents. We have implemented an XML stream processor generator based on our algorithm, and obtained promising experimental results.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Linear logic is what you get when you give up the structural rules of weakening and contraction -- it&#039;s logic when you cannot reuse or forget any hypothesis you make in the course of a proof. This means that every formula is used exactly once, which makes it useful (via Curry-Howard) for programming, as well: linear types give us a way of tracking resources and state in a type system. Intuitively, you can think of it as a kind of static analysis that ensures that an object&#039;s runtime reference count will always be one.&lt;/p&gt;
&lt;p &gt;However, linear logic retains the structural rule of &lt;a href=&quot;http://en.wikipedia.org/wiki/Exchange_rule&quot;&gt;exchange&lt;/a&gt;, which lets us use hypotheses in a different order than we introduced them. Ordered logic is what you get when you drop exchange, as well. (Amusingly, it was invented long before linear logic -- in the 1950s, Lambek introduced it with an eye towards applications in linguistics: he wanted to express the difference between one word occurring either before, or after, another.)&lt;/p&gt;
&lt;p &gt;This means that you can use ordered logic to express the order in your types the &lt;em &gt;order&lt;/em&gt; in which you use data, as well, which the authors here use to design a language whose typechecker statically rules out memory-inefficient programs.&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/21">Type Theory</category>
 <pubDate>Tue, 02 Jun 2009 10:12:56 -0400</pubDate>
</item>
</channel>
</rss>
