Embedded Functional Programming in Hume

Download Report

Transcript Embedded Functional Programming in Hume

Embedded Functional
Programming
Gergely Patai
[email protected]
Budapest University of Technology and Economics
Department of Control Engineering and Information Technology
RCEAS 2007, Budapest
23 November 2007
1
Outline




Functional programming in a nutshell
Motivation: desirable properties
Reasons of neglect
Real-life examples in embedded systems
development
 Further directions
RCEAS 2007, Budapest
23 November 2007
2
Functional programming
 Declarative programming paradigm
 Programs defined as series of equations
 Typical characteristics:
 Lack of side effects (a.k.a. ‘purity’)
 Strong, static typing and type inference
 Succinctness
 Some languages: Haskell, ML family,
Scheme, Clean, F#
RCEAS 2007, Budapest
23 November 2007
3
FP properties: purity
 Referential transparency
 Function return values depend only on the
explicit arguments, not the context
 Context-free expressions: easier testing and
debugging, richer static analysis possible
 No variables
 Comparatively little state space
 Safe concurrency
 Loops expressed with recursion
 I/O clearly separated from logic
RCEAS 2007, Budapest
23 November 2007
4
FP properties: type system
 Strong typing
 Protection against misinterpreting data
 Type inference
 Types don’t need to be specified explicitly
 Every subexpression has a well-defined type
 Inconsistencies detected at compile time
RCEAS 2007, Budapest
23 November 2007
5
FP properties: succinctness
 Typically little boilerplate
 Code/structure reuse possible at a small
level of granularity
 Loops are often abstracted away
 In general shorter by a factor of two to ten
RCEAS 2007, Budapest
23 November 2007
6
Why is it not widely used?
 FP originates around 1960 with LISP
 Too resource intensive for that time
(garbage collection, reflection…)
 Imperative languages pervaded the
industry
 Programmers got used to thinking
imperatively
RCEAS 2007, Budapest
23 November 2007
7
Is it really not used?
 Modern languages keep adopting features
of functional languages
 Managed memory
 Type inference
 Lambda expressions (unnamed functions)
 Why not adopt the whole paradigm?
RCEAS 2007, Budapest
23 November 2007
8
Example: Lava
 Haskell library to aid hardware design
 Generating VHDL code from functional
description
 Mary Sheeran:
Hardware Design and Functional
Programming: a Perfect Match
RCEAS 2007, Budapest
23 November 2007
9
Example: Erlang





Concurrent functional language
Asynchronous IPC (message passing)
Fault tolerance mechanism
Hotswap support
http://www.erlang.org
RCEAS 2007, Budapest
23 November 2007
10
Example: Lustre
 Synchronous dataflow language, a
declarative relative of Esterel
 Used in commercial safety critical products
(mostly avionics) since 1993
 http://www-verimag.imag.fr/SYNCHRONE
RCEAS 2007, Budapest
23 November 2007
11
Example: Hume
 Experimental language, still developing
 Programs: boxes connected with wires
 Wires: persistent state, one input and one
output each
 Boxes: buffered combination networks




Compile-time resource limit guarantees
Execution: VM, native code (C), FPGA
http://www.hume-lang.org
http://www.embounded.org
RCEAS 2007, Budapest
23 November 2007
12
Where to go from here?
 Functional languages viable in a wide
range of applications
 An underrated (or just unknown) paradigm
 Our ongoing experiments:
 Hume on embedded platforms (Tmote Sky,
Mindstorms NXT, mitmót)
 Haskell on the desktop for remote controlling
robots
 What about you? 
RCEAS 2007, Budapest
23 November 2007
13
Thank you for your attention!
RCEAS 2007, Budapest
23 November 2007
14