Links: The Next Thing in Functional Programming?
On 6 April 2005, I attended the
Links meeting in Edinburgh, Scotland.
It was an interesting day, and I heard
lots of interesting thoughts about future work, but
one awkwardness was that different
participants seemed to have wildly different goals.
I thought it might be useful to try to identify these goals.
Here are my candidates:
- The next functional language.
Languages we love are 15--20 years old.
We have big languages with big implementations, which are increasingly
hard to move forward.
Now could be a good time to consolidate the best ideas from
Haskell, ML, and Scheme.
- A big community effort.
What if you and I get together with all of our
favorite colleagues and do something big?
If we pick the right problem, we could not only get some nice research
results but also have a lot of fun.
- Making functional programming relevant.
We think we have great technology, but much of the world has ignored
us.
If we produce a really great artifact that reaches the
masses, we can convince the
world that our technology matters.
It worked for Unix!
- Functional programming for web applications and services.
At present, programming for the web is a mess.
As Phil has argued, functional
programming can help.
All these goals are worthy, but it seems unlikely that a single
project can accomplish them all.
And except that making ourselves relevant might require a big
community effort,
the goals seem largely unconnected.
Each goal has its own individual interest, however, and I discuss them
below.
I'm quite keen to work on the next functional language.
A consolidation, especially if it simplifies what has gone before,
could provide a new platform for the next leap forward.
It might be a good way to get a new generation of implementors to
join our community.
And at least across the Haskell and ML communities, there seems to be
unusually good agreement about fundamentals.
Such agreement is relevant because at minimum, we want something that
current functional programmers can use for their next project.
This minimum is also a good maximum: a consolidation effort is most
likely to succeed if it is aimed not at the
masses but at the ICFP community, where we know what we're
about.
Unifying current practice is difficult enough without venturing into
domains we don't understand.
How do we make functional programming relevant in the real world?
Constructing an important, useful artifact is a good
strategy.
But I have grave doubts about doing a language: I would rather build
Unix than C.
I also worry about web programming as a domain.
As Olin Shivers said, that ship has already put out to sea:
we would have to deal with a huge pile of existing standards,
middleware, entrenched practices, and who knows what else.
(No fun!)
By the time we get our act together, will the whole enterprise have
ossified to the point where it is impossible to change anything?
Will it still even be important?
As Fritz Henglein suggested, I would rather work on a new problem,
such as peer-to-peer programming or sensor-network programming.
Independent of whether we ever make functional programming relevant,
I'm game for a big community effort, primarily because I really enjoy
this community and the people in it.
Benli Pierce pointed out that the community we're talking about is a
community of researchers.
If we are going to do something, either it needs to lead to lots of
research results, or it needs to be a lot of fun.
We can't do it only because there's a chance of affecting
practice.
(Phil argues that if we do affect practice, it will have huge
benefits feeding back into everyone's research.
But to affect practice depends on so many random events that the
chance is small, so even if the potential payoff is huge, we can't
afford to invest a big effort on this chance alone.)
I would love to see a much broader discussion of what might be a big,
fun project we could do together.
I'm not convinced a new language is the right project---we might have
more fun doing something serious with the languages we already have.
For example, suppose we build a really good library with
excellent mechanisms for packaging and distribution.
Can we give functional programmers the CPAN experience, only better?
Or to take another example, sensor-network research is currently done
on top of something called TinyOS.
TinyOS is small enough that our community could replace it with
something written in a functional language---but there are many hard
problems to be solved.
Finally we come to programming with the web.
While I personally am not motivated by this goal, it seems an
honorable one.
But it also seems like a goal that doesn't require a huge group.
I bet around three senior people, working with students
and junior colleagues, could do something really interesting with a
single language that unifies the browser, server, and database
layers.
Closing thoughts
It was a pleasure to spend a day thinking about the long-term future
instead of just the next paper or the next proposal.
There are lots of interesting and exciting things
to do.
I hope we can develop mechanisms for like-minded people to find each
other, so that each of the goals articulated at the meeting can be pushed
forward.
Back to Norman Ramsey's home page.