Functional Nets are a new way to think about
programs and computation, born from a fusion of the essential ideas of
functional programming and Petri nets. As in functional programming,
the basic computation step in a functional net rewrites function applications
to function bodies. As in Petri-Nets, a rewrite step can require the combined
presence of several inputs (where in this case inputs are function applications).
This fusion of ideas from two different areas results in a style of programming
which is at the same time very simple and very expressive.
- An Overview of Functional Nets.
Martin Odersky. Lecture notes,
APPSEM Summer School, Caminha, Portugal,
- Functional Nets.
Martin Odersky. Invited paper at
European Symposium on
Lecture Notes in Computer Science, Springer Verlag, 2000.
Functional Nets combine key ideas of functional programming and Petri
nets to yield a simple and general programming notation. They have their
theoretical foundation in Join calculus. This paper presents functional
nets, reviews Join calculus, and shows how the two relate.
- A Functional View of Join.
Gang Chen, Martin Odersky, Christoph Zenger, Matthias Zenger.
Technical Report ACRC-99-016, University of South Australia, 1999.
Join calculus, usually presented as a process calculus, is suitable as
a foundation of both sequential and concurrent programming. We give a
new operational semantics of join calculus, expressed as a reduction
system with a single reduction rule similar to beta reduction in
lambda calculus. We also introduce a new Hindley/Milner style type
system for join calculus. Compared to previous work, the type system
gives more accurate types of composite and mutually recursive
definitions. The type system's soundness is established by showing
that our reduction rule keeps typings invariant. We present an
algorithm for type inference and show its soundness and completeness.
- Functional Nets.
Colloque d'Informatique at EPFL, Oct 19, 1999..
Foundational work on programming has been based traditionally on some
variant of lambda calculus. This approach, while ideally suited to
sequential programming, is increasingly at odds with modern programs
which are reactive in their interfaces and concurrent in their
implementation. Standard process calculi, on the other hand, model
nothing but the concurrent aspects of systems, and are ill-suited to
express sequential behavior.
This talk will show how nets consisting of functions and rewrite
rules can serve as a uniform foundation of both sequential and
concurrent programming. These nets have close relationships to Petri
nets; in fact Petri nets can be regarded as a graphical notation for a
a subset of functional nets. Functional nets have been formalized by
Gonthier et al. under the name of join calculus.
This talk will show how functional nets can be seen as a natural
extension of sequential functional programming, and how they can model
imperative, concurrent, and object-oriented programming styles.
Currently we are developing Funnel, a small programming
language based on Functional Nets. You can download a copy of our
Funnel compiler and runtime environment from our