It’s been a busy few months! I just finished off my Master’s and submitted the final version of a paper for the Implementation of Functional Languages. For those of you reading because of my iPhone apps, my Ph.D. studies are why I don’t push Apple too hard. I’m of course going to take free money that they give me, but ultimately I don’t have time or energy to argue with them.
For those interested in reading, there are fun things in my Master’s paper. The first is a very gentle introduction to the different forms of control-flow analysis used in modern functional languages as well as an easy-to-implement (as these things go!) collecting analysis that dramatically improves precision without killing runtime.
The second is an overview of how you can remove boxing and extraneous datatypes within your functional language compiler. I have a nifty way of combining the two that results in some pretty wonderful speedups and dramatic removal of allocations.
Both of these topics are relevant for my research group, which is working on Manticore, a dialect of Standard ML that supports both explicit (thread-based and concurrency) and implicit (parallel comprehensions, parallel choice, etc.) parallel language features. But they’re also relevant for languages like Python, Ruby, and Java. It’s really unfortunate there are no whole-program optimizing Java or .NET runtimes out there, as there are serious limits to what you can do when you assume there’s both an open system (so you can’t fudge signatures of functions) and are just compiling small units at a time (so you can’t see large-scale flow analysis). It’s the kind of thing that would be fun to fiddle with, but it’s not exactly going to generate any NSF money or serious publications