ACM Queue: A Conversation with Alan Kay

A few choice quotes from this interview:

So I think the lack of a real computer science today, and the lack of real software engineering today, is partly due to this pop culture.

Yes, that was the big revelation to me when I was in graduate school—when I finally understood that the half page of code on the bottom of page 13 of the Lisp 1.5 manual was Lisp in itself. These were “Maxwell’s Equations of Software!”

I fear — as far as I can tell — that most undergraduate degrees in computer science these days are basically Java vocational training.

Even if you’re designing for professional programmers, in the end your programming language is basically a user-interface design. You will get much better results regardless of what you’re trying to do if you think of it as a user-interface design.

Perl6 vs Java vs Python, or, Java sucks! and the NIH Fallacy

I recently wrote a book that deals with doing things (using features and ideas) in Perl invented and popularized by other languages. People react to that statement in fascinating ways - "what? Why would you want to do something in Perl that another language does? Perl is better so using things from Java and Python is pointless" they say.

I'm going to show first why quoted (paragraphased, actually) statement is dumb and then secondarily why it's a fallacy.

Yes, arguments of this sort still go on.

The Church Project

http://types.bu.edu or http://www.church-project.org

The Church Project investigates the foundations, design principles and implementation techniques of programming languages and related systems. The overall goal is the development of software technology that performs better and is more reliable. The project is named in honor of Alonzo Church, the inventor of the lambda calculus.

Four major research efforts (supported by various funding bodies including EC, EPSRC, and NSF) are presently undertaken by project participants:

  • Compiling with Flow Types
  • Compositional Analysis
  • Programming with Dependent Types (DML) (Xanadu)
  • Linear Naming and Computation

We previously linked to a document on this site, but not the site itself.

Workshop on Scripting for the Semantic Web

"SFSW" - focussing on languages such as Python, PHP, Perl, Ruby, JavaScript, ASP, JSP, ActionScript and ColdFusion. May 30, 2005, Heraklion, Greece. Co-located with 2nd European Semantic Web Conference (ESWC2005). Call for Papers (PDF).

PS. A Developers Guide to Semantic Web Toolkits for different Programming Languages has now been posted, with feature matrices of toolkits for: C, Haskell, Java, JavaScript, Lisp, .Net/Mono, Perl, PHP, Prolog, Python, Ruby.

Python Optimization Surprises

This weekend, I took another crack at trimming microseconds off the common-case path for generic function execution, and succeeded in dropping the excution time from 13.2 microseconds to just over 9.8. (Which is about 9 microseconds overhead added relative to a hand-optimized Python version of the same trivial function.) Along the way, however, I realized a couple of surprising things about Python performance tuning.

An amusing story that tells you something about Python's implementation.

The discussion of closures is of particular interest...

Comparing the Expressive Power of the Synchronous and the Asynchronous pi-calculus

Comparing the Expressive Power of the Synchronous and the Asynchronous pi-calculus
The Asynchronous pi-calculus, as recently proposed by Boudol and, independently, by Honda and Tokoro, is a subset of the pi-calculus which contains no explicit operators for choice and output-prefixing. The communication mechanism of this calculus, however, is powerful enough to simulate output-prefixing, as shown by Boudol, and input-guarded choice, as shown recently by Nestmann and Pierce. A natural question arises, then, whether or not it is possible to embed in it the full pi-calculus. We show that this is not possible, i.e. there does not exist any uniform, parallel-preserving, translation from the pi-calculus into the asynchronous pi-calculus, up to any “reasonable” notion of equivalence. This result is based on the incapablity of the asynchronous pi-calculus of breaking certain symmetries possibly present in the initial communication graph. By similar arguments, we prove a separation result between the pi-calculus and CCS.
Quite an important result for those who care about pi.

The others may just enjoy the use of symmetry in the proof.

As CiteSeer is down this weekend, I used a link to CiteBase.

[on edit: CiteSeer is back]

CTM wiki

Dominic's CTM wiki deserves more attention than it seems to be getting.

The wiki doesn't have much content at the moment, but you guys can help fix that!

More textbooks should have wikis. It's a great way to enhance the reading experience. Don't you think so?

Amazon Web Services in Scheme

Phil Windley is having fun with Scheme and XML (SSAX). His latest set of examples show how to use Amazon Web Services from DrScheme, and how to write DrScheme servlets.

Continuations must be next, right? :-)

Region Streams: Functional Macroprogramming for Sensor Networks

This paper presents the design of a functional macroprogramming language for sensor networks, called Regiment. The essential data model in Regiment is based on region streams, which represent spatially distributed,time-varying collections of node state. A region stream might represent the set of sensor values across all nodes in an area or the aggregation of sensor values within that area. Regiment is a purely functional language, which gives the compiler considerable leeway in terms of realizing region stream operations across sensor nodes and exploiting redundancy within the network.

The operations on region streams include fold and map. The language uses monads to represent time varying values.

I know nothing about sensor networks (this paper is from DMSN 2004: the First Workshop on Data Management for Sensor Networks) so I can't judge how useful this project really is.

Notice that Regiment isn't implemented yet. Only a highly restricted (dynamically typed) subset is.

OpenSpice

OpenSpice is an openly available specification of the Spice language - a modern programming language with some nice XML processing features. It is designed with the needs of part-time or occasional programmers in mind. The language features are properly separated and their corner cases have been eliminated. This design means that if you only use Spice occasionally, you're likely to find it easy to come back to despite the breaks.

The most similar well-known language is probably Common LISP together with CLOS. But Spice has a rich Algol-like external syntax, an XML transport form, and makes multiple values a key feature. The way Spice deals with multiple values is, we think, the feature that will strike most programmers as special.

I am not sure how interesting this really is, but the language seems to have some amusing features that you may want to explore.