Towards a Functional Programming Language for Baseband Signal Processing
Developing software for resource constrained embedded systems is a daunting task. In addition to getting the functionality right, a programmer must consider several non-functional properties, including data layout, the target memory hierarchy, concurrency and parallelism. The programmer has to decide on a specific and reasonable solution on these properties upfront during development However, these decisions are necessarily based on incomplete information, since the optimial solution depends on the actual deployment on the target hardware.
In this thesis we explore a generative approach, with a staged functional domain specific language, to postpone many of these decisions to a much later stage of the development process.
The staged approach gives the progammer explicit control over much of the code generation by using combinators to build the application from reusable components and skeletons.
Currently, Feldspar is focused on the data processing part of signal processing in embedded systems. The Feldspar compiler generates single C functions that can be integrated into existing systems. The Feldspar language is based on a combination of shallow and deep embedding, which makes it modular both for the language developer and the end user. This modularity made it easy to add monadic expressions to support mutable updates and deterministic parallelism. Future work includes generation, deployment and orchestration of systems of data processing functions and control processing.
Additionally, this thesis presents a technique, and supporting library that allows the programmer to test, profile and analyze compiled Feldspar programs from the host language environment.
domain specific languages