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.

WaveScript 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.

This came up in the discussion group and since it is cool (both the project and the language), and the other editors are mostly MIA, I thought I'd bring it to the attention of those who only follow the home page.

To get a taste of the language click here.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Very domain specific

(from what I gather from the paper I skimmed) in that it requires the events you want to process to be isochronus - which lets them do away with a lot of cruft that 'commercial' variants apparently get weighted down by, leading to fun things like sometimes a 1000x performance improvement. Interesting to think about when you might be willing to do something so possibly drastic.

Yes, domain specific, but not very.

It optimizes for the isochronous case, but certainly works for arbitrary event streams as well.

For a stream-processing language, it's pretty general. Some are restricted to synchronous dataflow, some only allow *one* stream filter that operates in a data-parallel way (Brook), some require static memory allocation (StreamIT).

However, there are certainly more general models. For example, we stay away from dataflow graphs that change at runtime (such as result from higher order streams).

Streaming is appropriate for a suprising range of applications, for example, I've got a parallel implementation of a genetic algorithm implemented in WaveScript.

By the way, here's a more current publication on WaveScript (a recent tech report). It describes the compiler in more detail, and some of the optimizations we perform.