<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://lambda-the-ultimate.org">
<channel>
 <title>Lambda the Ultimate - Parallel/Distributed</title>
 <link>http://lambda-the-ultimate.org/taxonomy/term/16/0</link>
 <description></description>
 <language>en</language>
<item>
 <title>Local Rely-Guarantee Reasoning</title>
 <link>http://lambda-the-ultimate.org/node/3036</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://ttic.uchicago.edu/~feng/research/publications/LRG.html&quot;&gt;Local Rely-Guarantee Reasoning&lt;/a&gt;, Xinyu Feng. Accepted for publication at POPL 2009.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Rely-Guarantee reasoning is a well-known method for verification of shared-variable concurrent programs. However, it is difficult for users to define rely/guarantee conditions, which specify threads&#039; behaviors over the whole program state. Recent efforts to combine Separation Logic with Rely-Guarantee reasoning have made it possible to hide thread-local resources, but the shared resources still need to be globally known and specified. This greatly limits the reuse of verified program modules.&lt;/p&gt;
&lt;p &gt;In this paper, we propose LRG, a new Rely-Guarantee-based logic that brings local reasoning and information hiding to concurrency verification. Our logic, for the first time, supports a frame rule over rely/guarantee conditions so that specifications of program modules only need to talk about the resources used locally, and the certified modules can be reused in different threads without redoing the proof. Moreover, we introduce a new hiding rule to hide the resources shared by a subset of threads from the rest in the system. The support of information hiding not only improves the modularity of Rely-Guarantee reasoning, but also enables the sharing of dynamically allocated resources, which requires adjustment of rely/guarantee conditions.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;In the beginning there was Hoare logic, which taught us how to reason about sequential, imperative programs. Then, Owicki and Gries extended Hoare logic with some additional rules that enabled reasoning about some concurrent imperative programs. This was good, but there were a lot of &quot;obviously correct&quot; concurrent programs that it couldn&#039;t handle. So Owicki-Gries logic begat two children. &lt;/p&gt;
&lt;p &gt;The elder child was Jones&#039;s introduction of the rely-guarantee method. The intuition here is that if you have two subprograms M1 and M2, and M1 will work in an environment with a working M2, and M2 will work in an environment with a working M1, then when you put the two together you have a working M1 and M2. This is a really powerful reasoning method, but unfortunately it&#039;s not terribly modular. &lt;/p&gt;
&lt;p &gt;The younger child of Owicki-Gries was concurrent separation logic. The intuition behind it is that if you can divide the heap into disjoint (logical) pieces, and only let one  process access each chunk at a time, then you can&#039;t have any race conditions. This is a very simple principle, and permits modular, compositional reasoning about concurrent programs -- even pointer programs. But there are programs that can&#039;t be proven in this style. &lt;/p&gt;
&lt;p &gt;So the obvious thing to want is the ability to combine these two styles of reasoning. Unfortunately, this is hard -- there have been several logics proposed to do this, each of which does a bit better than the last. Feng&#039;s is the latest, and the best I&#039;ve seen so far. (Though concurrency is not really my area.) &lt;/p&gt;
&lt;p &gt;An interesting point is that these kinds of reasoning principles, while invented for the concurrent world, are also interesting for reasoning about modular &lt;em &gt;sequential&lt;/em&gt; programs. This is because when you create imperative abstractions, it&#039;s helpful to be able to give up knowledge about exactly when state changes can happen. So you need the same sorts of techniques to handle this kind of conceptual nondeterminism that you need for the actual nondeterminism of parallel hardware.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/19">Theory</category>
 <pubDate>Sun, 05 Oct 2008 13:17:15 -0400</pubDate>
</item>
<item>
 <title>Intel Ct: C for Throughput Computing</title>
 <link>http://lambda-the-ultimate.org/node/3010</link>
 <description>&lt;p &gt;Intel is working on a C++ extension called &lt;a href=&quot;http://techresearch.intel.com/articles/Tera-Scale/1514.htm&quot;&gt;Ct&lt;/a&gt; to simplify multicore programming and data parallelism more properly than they did with previous library efforts like &lt;a href=&quot;http://www.intel.com/cd/software/products/asmo-na/eng/294797.htm&quot;&gt;TBB&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;One of the main challenges in scaling multi-core for the future is that of migrating programming tools, build environments, and millions of lines of existing code to new parallel programming models or compilers. To help this transition, Intel researchers are developing “Ct,” or C/C++ for Throughput Computing.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Ct is not intended to be a C++ dialect or replacement but rather a tricky integration of a runtime engine with existing C++ compiler environments. &lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;In principal, Ct works with any standard C++ compiler because it is a standards-compliant C++ library (with a lot of runtime behind the scenes). When one initializes the Ct library, one loads a runtime that includes the compiler, threading runtime, memory manager — essentially all the components one needs for threaded and/or vectorized code generation.&lt;/p&gt;&lt;/blockquote&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Sun, 21 Sep 2008 04:15:36 -0400</pubDate>
</item>
<item>
 <title>The Transactional Memory / Garbage Collection Analogy</title>
 <link>http://lambda-the-ultimate.org/node/2990</link>
 <description>&lt;p &gt;Courtesy of my shiny new commute, I have been listing to various podcasts, including &lt;a href=&quot;http://www.se-radio.net/&quot;&gt;Software Engineering Radio&lt;/a&gt;.  A while back, they had an &lt;a href=&quot;http://www.se-radio.net/podcast/2007-09/episode-68-dan-grossman-garbage-collection-and-transactional-memory&quot;&gt;interview with Dan Grossman&lt;/a&gt; on his OOPSLA 2007 paper, which I have not seen discussed here.&lt;/p&gt;
&lt;p &gt;&lt;a href=&quot;http://www.cs.washington.edu/homes/djg/papers/analogy_oopsla07.pdf&quot;&gt;The Transactional Memory / Garbage Collection Analogy&lt;/a&gt; is an essay comparing transactional memory with garbage collection based on the analogy:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Transactional memory (TM) is to shared-memory concurrency&lt;br &gt;
as&lt;br &gt;
garbage collection (GC) is to memory management.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Grossman presents the analogy as a word-for-word transliteration of a discussion of each of the technologies.  (Hence the &quot;fun&quot; category.)&lt;/p&gt;
&lt;p &gt;(As an aside, Grossman does not address message-passing, but says, &lt;quote &gt;&quot;Assuming that shared memory is one model we will continue to use for the foreseeable future, it is  worth improving,&quot;&lt;/quote&gt; which is probably a correct assumption.)&lt;/p&gt;
&lt;p &gt;One point that he does make is that&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
[This essay] will lead us to the balanced and obvious-once-you-say-it conclusion that transactions make it easy to define critical sections (which is a huge help in writing and maintaining shared-memory programs) but provide no help in identifying where a critical section should begin or end (which remains an enormous challenge).
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The one serious weakness of the analogy, to me, is that GC does not require (much) programmer input to work, while TM does.&lt;/p&gt;
&lt;p &gt;Although some parts of the analogy are strained, there are some interesting correspondences.&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/16">Parallel/Distributed</category>
 <pubDate>Wed, 17 Sep 2008 11:37:21 -0400</pubDate>
</item>
<item>
 <title>Twilight of the GPU</title>
 <link>http://lambda-the-ultimate.org/node/2988</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://arstechnica.com/articles/paedia/gpu-sweeney-interview.ars/&quot;&gt;This interview&lt;/a&gt; with Tim Sweeney discusses his prediction that graphic rendering will move from special purpose GPUs back to the CPU:&lt;/p&gt;

&lt;blockquote &gt;I expect that in the next generation we&#039;ll write 100 percent of our rendering code in a real programming language—not DirectX, not OpenGL, but a language like C++ or CUDA. A real programming language unconstrained by weird API restrictions. Whether that runs on NVIDIA hardware, Intel hardware or ATI hardware is really an independent question. You could potentially run it on any hardware that&#039;s capable of running general-purpose code efficiently.&lt;/blockquote&gt;

&lt;p &gt;This is driven by the development of cheap multi-core CPUs.  Consumers might still buy graphics boards, but they&#039;ll be fully programmable multi-core devices:&lt;/p&gt;

&lt;blockquote &gt;Intel&#039;s forthcoming Larrabee product will be sold as a discrete GPU, but it is essentially a many-core processor, and there&#039;s little doubt that forthcoming Larrabee competitors from NVIDIA and ATI will be similarly programmable, even if their individual cores are simpler and more specialized.&lt;/blockquote&gt;

&lt;p &gt;How are we going to program these devices?  NVIDIA showed the data-parallel paradigm was practical with &lt;a href=&quot;http://lambda-the-ultimate.org/node/2476&quot;&gt;CUDA (LtU discussion)&lt;/a&gt;.  Now, Tim asks:&lt;/p&gt;

&lt;blockquote &gt;...can we take CUDA&#039;s restricted feature set—it doesn&#039;t support recursion or function pointers—and can we make that into a full C++ compatible language?... From my point of view, the ideal software layer is just to have a vectorizing C++ compiler for every architecture.&lt;/blockquote&gt;

&lt;p &gt;The FP lover is me says that data-parallel + C++ = the horror!  However, I can appreciate it is a practical solution to a pressing problem.  What do you think?  Is Tim right?  Is a data-parallel extension to C++ the right way to go?  Or is the next version of Unreal going to be written in FRP?&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Tue, 16 Sep 2008 06:53:03 -0400</pubDate>
</item>
<item>
 <title>A Framework for Comparing Models of Computation</title>
 <link>http://lambda-the-ultimate.org/node/2982</link>
 <description>&lt;a href=&quot;http://ptolemy.eecs.berkeley.edu/papers/98/framework/ieeeVersion.pdf&quot;&gt;A Framework for Comparing Models of Computation&lt;/a&gt; by Edward A. Lee and Alberto Sangiovanni-Vincentelli, 1998.
&lt;blockquote &gt;
We give a denotational framework (a “meta model”)
within which certain properties of models of computation can be
compared. It describes concurrent processes in general terms as
sets of possible behaviors. A process is determinate if, given the
constraints imposed by the inputs, there are exactly one or exactly
zero behaviors. Compositions of processes are processes with
behaviors in the intersection of the behaviors of the component
processes. The interaction between processes is through signals,
which are collections of events. Each event is a value-tag pair,
where the tags can come from a partially ordered or totally
ordered set. Timed models are where the set of tags is totally
ordered. Synchronous events share the same tag, and synchronous
signals contain events with the same set of tags. Synchronous
processes have only synchronous signals as behaviors. Strict
causality (in timed tag systems) and continuity (in untimed tag
systems) ensure determinacy under certain technical conditions.
The framework is used to compare certain essential features of
various models of computation, including Kahn process networks,
dataflow, sequential processes, concurrent sequential processes
with rendezvous, Petri nets, and discrete-event systems.
&lt;/blockquote&gt;
The generality of the approach looks very impressive.
Can anyone share first-hand experience with this framework?
Would be great to see E compared to Oz!</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/29">Semantics</category>
 <pubDate>Thu, 11 Sep 2008 11:02:49 -0400</pubDate>
</item>
<item>
 <title>Clojure&#039;s Approach to Identity and State</title>
 <link>http://lambda-the-ultimate.org/node/2978</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; has been &lt;a href=&quot;http://lambda-the-ultimate.org/node/2547&quot;&gt;discussed here before&lt;/a&gt;.  It fits in the Lisp family with S-expressions, macros, and functions as values.  Like most Lisps, it&#039;s dynamically typed and impure.  But its target focus is concurrency so symbols are defined immutably by default; its standard library&#039;s &lt;a href=&quot;http://clojure.org/data_structures#toc38&quot;&gt;collection structures&lt;/a&gt; are immutable and persistent; and its various mutable concepts are threadsafe except, of course, for the back doors implied by I/O and JVM library interoperability.  See &lt;a href=&quot;http://clojure.org/vars&quot;&gt;vars&lt;/a&gt;, &lt;a href=&quot;http://clojure.org/refs&quot;&gt;refs&lt;/a&gt;, and &lt;a href=&quot;http://clojure.org/agents&quot;&gt;agents&lt;/a&gt;.&lt;/p&gt;
&lt;p &gt;What I wanted to highlight is position paper of sorts that Rich Hickey has posted on &lt;a href=&quot;http://clojure.org/state&quot;&gt;Clojure&#039;s Approach to Identity and State&lt;/a&gt;.  An excerpt:&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;While some programs are merely large functions, e.g. compilers or theorem provers, many others are not - they are more like working models, and as such need to support what I&#039;ll refer to in this discussion as identity. By identity I mean a stable logical entity associated with a series of different values over time. Models need identity for the same reasons humans need identity - to represent the world.&lt;br &gt;
...&lt;br &gt;
In Clojure&#039;s model, value calculation is purely functional. Values never change. New values are functions of old, not mutations. But logical identity is well supported, via atomic references to values (Refs and Agents). Changes to references are controlled/coordinated by the system - i.e. cooperation is not optional and not manual.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;Hickey also addresses the choice to not follow Erlang&#039;s model.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;There are other ways to model identity and state, one of the more popular of which is the message-passing actor model, best exemplified by the quite impressive Erlang. ... It is important to understand that the actor model was designed to address the problems of distributed programs. And the problems of distributed programs are much harder ... Clojure may eventually support the actor model for distributed programming, paying the price only when distribution is required, but I think it is quite cumbersome for same-process programming. YMMV of course.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The essay is worth a read on a couple of levels of interest to LtU. At an abstract level, it&#039;s a good example of a well-articulated design justification.  Agree or not, it&#039;s clear that Hickey gave thought to his decisions. Too many language designers fall into the trap of blindly inheriting semantics from a favorite language and end up putting new lipstick on the same pig.  Any language designer would do well to write an essay or two like this before jumping into their venture.&lt;/p&gt;
&lt;p &gt;At the specific level, the core approach is certainly worthy of discussion and alternative designs.  Is mutable state really the best way to deal with &quot;working models&quot;?  Are there things that the pure functional camp can do to make &quot;working models&quot; more convenient, e.g. do Clean&#039;s uniqueness types fit the bill at least for sequential programming, or are they too restrictive?  Are there things that can make Erlang style actors less cumbersome to use especially when distribution isn&#039;t necessary?&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/16">Parallel/Distributed</category>
 <pubDate>Sun, 07 Sep 2008 20:23:27 -0400</pubDate>
</item>
<item>
 <title>Communicating Scala Objects</title>
 <link>http://lambda-the-ultimate.org/node/2970</link>
 <description>&lt;p &gt;I wouldn&#039;t normally think a library is LtU material, but since this one lives at the intersection of embedded DSLs, process calculi, and a spotlight language, I think it fits: &lt;a href=&quot;http://users.comlab.ox.ac.uk/bernard.sufrin/CSO/cpa2008-cso.pdf&quot;&gt;Communicating Scala Objects&lt;/a&gt;, Bernard Sufrin, Communicating Process Architectures 2008.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;In this paper we introduce the core features of CSO (Communicating Scala Objects) – a notationally convenient embedding of the essence of occam in a modern, generically typed, object-oriented programming language that is compiled to Java Virtual Machine (JVM) code.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;If you would like to play with it, the library can be downloaded &lt;a href=&quot;http://users.comlab.ox.ac.uk/bernard.sufrin/CSO/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/24">DSL</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/32">Scala</category>
 <pubDate>Wed, 03 Sep 2008 18:47:28 -0400</pubDate>
</item>
<item>
 <title>Partial vectorisation of Haskell programs</title>
 <link>http://lambda-the-ultimate.org/node/2905</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://research.microsoft.com/~simonpj/papers/ndp/partial-vect.pdf&quot;&gt;Partial vectorisation of Haskell programs&lt;/a&gt;. Manuel M. T. Chakravarty, Roman Leshchinskiy, Simon Peyton Jones, and Gabriele Keller, Proc ACM Workshop on Declarative Aspects of Multicore Programming, San Francisco, Jan 2008.&lt;br &gt;
&lt;blockquote &gt;&lt;p &gt;
Vectorisation for functional programs, also called the flattening transformation, relies on drastically reordering computations and restructuring the representation of data types. As a result, it only applies to the purely functional core of a fully-fledged functional language, such as Haskell or ML. A concrete implementation needs to apply vectorisation selectively and integrate vectorised with unvectorised code. This is challenging, as vectorisation alters the data representation, which must be suitably converted between vectorised and unvectorised code. In this paper, we present an approach to partial vectorisation that selectively vectorises sub-expressions and data types, and also, enables linking vectorised with unvectorised modules.&lt;br &gt;
&lt;/blockquote&gt;
&lt;p &gt;
The idea is fairly simple, and utilizes conversion between vectorized and unvectorized representations of the datatypes. A formal translation scheme is provided.&lt;p &gt;
Data Parallel Haskell papers are &lt;a href=&quot;http://research.microsoft.com/~simonpj/papers/ndp/index.htm&quot;&gt;here&lt;/a&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/16">Parallel/Distributed</category>
 <pubDate>Sun, 20 Jul 2008 12:05:14 -0400</pubDate>
</item>
<item>
 <title>Why Multi-Core is Easy and Internet is Hard</title>
 <link>http://lambda-the-ultimate.org/node/2874</link>
 <description>&lt;p &gt;I was recently invited to be on the panel &lt;i &gt;Reinventing Audio and Music Computation for Many-Core Processors&lt;/i&gt; at the &lt;A href=&quot;http://www.icmc2008.net/&quot;&gt;International Computer Music Conference (ICMC 2008)&lt;/A&gt;, Belfast, Ireland, Aug. 2008.  In my position statement, &lt;A href=&quot;http://www.info.ucl.ac.be/~pvr/vanroy-mc-panel.pdf&quot;&gt;The Challenges and Opportunities of Multiple Processors: Why Multi-Core Processors are Easy and Internet is Hard&lt;/A&gt;, I explain why programming multi-core processors is basically a sociological problem (the technical problems were solved long ago) and why programming loosely coupled systems (like the Internet) still has a lot of technical challenges.  I am curious to hear what the LtU community thinks about this.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Thu, 26 Jun 2008 11:41:17 -0400</pubDate>
</item>
<item>
 <title>LASER Summerschool on Concurrency</title>
 <link>http://lambda-the-ultimate.org/node/2863</link>
 <description>Bertrand Meyer yet again has lined up a fantastic set of speakers for this year&#039;s &lt;a href=&quot;http://se.inf.ethz.ch/laser/2008/index.php&quot;&gt;LASER summerschool&lt;/a&gt; that targets some very relevant and timely topics in our field:
&lt;ul &gt;
&lt;li &gt;Tryggve Fossum, Intel Fellow and Director of Microarchitecture Development, Intel Corporation on Chip level Multi Processors&lt;/li&gt;
&lt;li &gt;Maurice Herlihy, Brown University on The Art of Multiprocessor Programming&lt;/li&gt;
&lt;li &gt;Bertrand Meyer, ETH Zurich and Eiffel Software on Correct Contract-Covered Concurrent Computation&lt;/li&gt;
&lt;li &gt;Robin Milner, Cambridge University on Bigraphs: a space for mobile interaction&lt;/li&gt;
&lt;li &gt;Peter O&#039;Hearn, Queen Mary University of London on Proof Techniques for Concurrent Programs&lt;/li&gt;
&lt;li &gt;Daniel A. Reed, Microsoft Research and UNC Chapel Hill on Living in the Multicore Computing Clouds&lt;/li&gt;
&lt;/ul&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Fri, 20 Jun 2008 14:38:09 -0400</pubDate>
</item>
<item>
 <title>Map-reduce-merge: simplified relational data processing on large clusters</title>
 <link>http://lambda-the-ultimate.org/node/2836</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://portal.acm.org/citation.cfm?doid=1247480.1247602&quot;&gt;Map-reduce-merge: simplified relational data processing on large clusters&lt;/a&gt; (&lt;a href=&quot;http://cs.baylor.edu/~speegle/5335/2007slides/MapReduceMerge.pdf&quot;&gt;freely-accessible slides&lt;/a&gt;). Hung-chih Yang, Ali Dasdan, Ruey-Lung Hsiao, D. Stott Parker. 2007 ACM SIGMOD conference.&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;
Map-Reduce is a programming model that enables easy development of scalable parallel applications to process a vast amount of data on large clusters of commodity machines. Through a simple interface with two functions, map and reduce, this model facilitates parallel implementation of many real-world tasks such as data processing jobs for search engines and machine learning.&lt;/p&gt;
&lt;p &gt;However,this model does not directly support processing multiple related heterogeneous datasets. While processing relational data is a common need, this limitation causes difficulties and/or inefficiency when Map-Reduce is applied on relational operations like joins.&lt;/p&gt;
&lt;p &gt;We improve Map-Reduce into a new model called Map-Reduce-Merge. It adds to Map-Reduce a Merge phase that can efficiently merge data already partitioned and sorted (or hashed) by map and reduce modules. We also demonstrate that this new model can express relational algebra operators as well as implement several join algorithms.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;They seem to add a third phase &amp;ndash; merge: ((k1, [v1]), (k2, [v2])) → (k3, [v3]) &amp;ndash; which combines the outputs of two separate, parallel MapReduce tasks.&lt;/p&gt;
&lt;p &gt;This makes it possible to do things like joins and build cartesian products.&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>Wed, 04 Jun 2008 09:38:04 -0400</pubDate>
</item>
<item>
 <title>DryadLINQ</title>
 <link>http://lambda-the-ultimate.org/node/2805</link>
 <description>&lt;blockquote &gt;&lt;p &gt;The goal of &lt;a href=&quot;http://research.microsoft.com/research/sv/DryadLINQ/&quot;&gt;DryadLINQ&lt;/a&gt; is to make distributed computing on large compute cluster simple enough for ordinary programmers. DryadLINQ combines two important pieces of Microsoft technology: the Dryad distributed execution engine and the .NET Language Integrated Query (LINQ).&lt;/blockquote&gt;
&lt;p &gt;
I don&#039;t think this project was mentioned here before.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Thu, 08 May 2008 20:19:43 -0400</pubDate>
</item>
<item>
 <title>A located lambda calculus</title>
 <link>http://lambda-the-ultimate.org/node/2798</link>
 <description>&lt;p &gt;&lt;a href=&quot;http://homepages.inf.ed.ac.uk/wadler/papers/located-lambda/located-lambda.pdf&quot;&gt;A located lambda calculus&lt;/a&gt;. Ezra Cooper and Philip Wadler. Submitted to ICFP 2008.&lt;br &gt;
&lt;blockquote &gt;&lt;p &gt;
Several recent language designs have offered a unified language for programming a distributed system; we call these &quot;location-aware&quot; languages. These languages provide constructs that allow the programmer to control the location (the choice of host, for example) where a piece of code should run, which can be useful for security or performance reasons. On the other hand, a central mantra of web engineering insists that web servers should be &quot;stateless&quot;: that no &quot;session state&quot; should be maintained on behalf of individual clients---that is, no state that pertains to the particular point of the interaction at which a client program resides. Thus far, most implementations of unified location-aware languages have ignored this precept, usually keeping a process for each client running on the server, or otherwise storing state information in memory. We show how to implement a location-aware language on top of the stateless-server model.&lt;br &gt;
&lt;/blockquote&gt;
&lt;p &gt;
This paper is technical, and I assume most LtU members will mainly read sections 1, 5 &amp;amp; 6. Figure 5 is definition of the located LC. &lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/20">Lambda Calculus</category>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Sun, 04 May 2008 15:25:18 -0400</pubDate>
</item>
<item>
 <title>Erasmus: A Modular Language for Concurrent Programming</title>
 <link>http://lambda-the-ultimate.org/node/2751</link>
 <description>&lt;p &gt;&lt;b &gt;&lt;a href=&quot;http://users.encs.concordia.ca/~grogono/Erasmus/E01.pdf&quot;&gt; A Modular Language for Concurrent Programming&lt;/a&gt;, September 2006, Technical Report by Peter Grogono and Brian Shearing.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote &gt;&lt;p &gt;How will programmers respond to the long-promised concurrency revolution, which now appears both inevitable and imminent? One common answer is &quot;by adding threads to objects&quot;. This paper presents an alternative answer that we believe will reduce rather than add complexity to the software of the future. Building on the ideas of an earlier generation, we propose a modern programming language based on message passing. A module cannot invoke a method in another module, but can only send data to it. Modules may be constructed from other modules, thus permitting processes within processes. Our goal is to provide the flexibility and expressiveness of concurrent programming while limiting, as much as possible, the complexity caused by nondeterminism.&lt;/p&gt;
&lt;p &gt;The principle innovations reported in the paper derive from bringing together ideas -- some well known, but others almost forgotten -- found in the historical software literature, and combining these ideas to solve problems facing modern software developers. In addition, at least one idea reported here appears to be novel, namely the introduction of an interface hierarchy based not on data elements or methods, but on path expressions, on the actual flow of control within a module. It is more natural to classify components of a process-oriented system by control flow rather than data content.&lt;/p&gt;
&lt;p &gt;Another novel feature is the integration of unit tests into the source of each component, thus reducing the possibilities for testing to get out of step with development.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p &gt;The project &lt;a href=&quot;http://users.encs.concordia.ca/~grogono/Erasmus/erasmus.html&quot;&gt;home page is here&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Wed, 02 Apr 2008 10:44:24 -0400</pubDate>
</item>
<item>
 <title>WaveScript</title>
 <link>http://lambda-the-ultimate.org/node/2630</link>
 <description>&lt;blockquote &gt;&lt;p &gt;
WaveScope is a system for developing distributed, high-rate applications that need to process streams of data from various sources (e.g., sensors) using a combination of signal processing and database (event stream processing) operations. The execution environment for these applications ranges from embedded sensor nodes to multicore/multiprocessor servers.&lt;br &gt;
&lt;P &gt;&lt;br &gt;
&lt;a href=&quot;http://wavescope.csail.mit.edu/doku.php&quot;&gt;WaveScript&lt;/a&gt; is the programming language used to develop WaveScope applications. It is a high-level, functional, stream-processing language that aims to deliver uncompromising performance. WaveScript programs execute in parallel on multiple cores, or distributed across a network. Its compiler uses aggressive partial evaluation techniques to remove abstractions and reduce the source program to a graph of stream operators.&lt;br &gt;
&lt;/blockquote&gt;
&lt;p &gt;
This came up in the &lt;a href=&quot;http://lambda-the-ultimate.org/node/2627#comment-39592&quot;&gt;discussion group&lt;/a&gt; and since it is cool (both the project and the language), and the other editors are mostly MIA, I thought I&#039;d bring it to the attention of those who only follow the home page.&lt;p &gt;
To get a taste of the language click &lt;a href=&quot;http://regiment.us/wsman/manual.html#SECTION00210000000000000000&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
 <category domain="http://lambda-the-ultimate.org/taxonomy/term/16">Parallel/Distributed</category>
 <pubDate>Fri, 25 Jan 2008 18:43:25 -0500</pubDate>
</item>
</channel>
</rss>
