Sunday, February 19, 2006

Hedgehog-2.1 and thoughts about programming language ecosystems

I finally made version 2.1 of Hedgehog, a small tactical Lisp system for low-end embedded systems. The most significant additions in this version are the SHA-256 cryptographic hash function, a beefed up version of XXTEA cipher, and a 256-bit shared secret between the interpreter and compiler (or rest of the host system).

Hedgehog is a programming environment deliberately and rather single-mindedly targeted for a small niche market: very small, remotely controlled and updated M2M-boxes and telematics applications. In general purpose programming languages C is the assembler, Java the COBOL, and Python the Basic of this era. They and their equivalents in other systems all have a strong position and it seems it will take some time, perhaps a decade, before significant new revolutions can happen. Therefore I predict that in the near future various niches is where we will see most of new practical programming language development. Mainstream general-purpose programming systems, such as Java, take a few hundred person-years to develop when you include not only the core language but also libraries, tools and documentation, and ten times more if you consider marketing, community building and piloting. Yet they don't fit every machine and every programming task. There one often needs to design something very uncompromising and occasionally the outcome is something elegant and interesting.

The Hedgehog Lisp dialect was designed by Lars Wirzenius, and my role has merely been to (re)implement his design. Ten years ago the position was reversed. I had come across the idea that if one removed in-place mutation entirely from the programming language, one can find significantly improved solutions for generational garbage collection, persistence (backing up to computation and heap disk), and replication (backing up and cross-checking the computation among several machines). On top of that we (a group of researchers including Lars) implemented a number of index structures and a more modern functional programming language. Technically I think we succeeded in most of criteria, specifically in reaching good performance, but eventually IPR problems killed the possibility to continue with the work. But persistent programming languages and fail-safe computing is an interesting niche I someday hope to return to.

Future computational devices, such as mixtures of FPGA and normal CPUs, GPU computing, and of course massively multicore chips will also offer potential for new programming language designs. XML processing languages, Links, Javascript and other examples of languages that have a niche.


Post a Comment

<< Home