Tuesday, November 04, 2003

New Declarative Programming Language 

Mercury is a new logic/functional programming language, which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features. Its highly optimized execution algorithm delivers efficiency far in excess of existing logic programming systems, and close to conventional programming systems. Mercury addresses the problems of large-scale program development, allowing modularity, separate compilation, and numerous optimization/time trade-offs.
Mercury on .NET
Around 18 months ago, Microsoft approached the Mercury researchers at the University of Melbourne regarding an opportunity to participate in a research and development effort involving a multi-language platform, under the banner "Project 7". As well as offering access to early development tools, Microsoft offered a substantial grant to fund researchers, an opportunity to stay at Microsoft at Redmond for 3 months to learn the technology (alongside researchers representing other efforts), visits to other implementors working on other languages (e.g. Haskell), and ongoing support, technical conferences, and a stream of snapshots of ongoing work. This work was to remain secret (under a Non-Disclosure Agreement) until they were willing to announce their new platform and reveal its details. They asked for no special intellectual property rights, and indeed except for NDAs no contracts were signed. However, they requested that we provide feedback on what would make the platform better for Mercury, and what criticism (or praise) we (as language designers and implementors) could give on their work. We decided to accept their offer, for two main reasons. First, we have always tried to make Mercury available to the largest possible number of programmers compatible with our means. Distributing implementations on Unix-family platforms reaches large numbers of people, but there are even larger numbers whom it does not reach. The overwhelming majority of these people work on Microsoft platforms and need an implementation that works natively on that platform (i.e. not via systems such as Cygwin). By building a backend that targets .NET we can reach this audience. Second, we have long planned to implement a new backend that generated higher level imperative code than the existing backend (which basically generates assembler in C syntax), and have had fairly detailed designs for this backend. Unfortunately, we had no money for implementing this design, because this kind of work is very hard to get research funding for. The grant from Microsoft has allowed us to build a generic backend that can generate high level C code as well as code for the .NET platform. We expect that in the future it will also generate code for the JVM. (We have received a significant number of requests for a JVM backend.) The vast majority of the work for this project was conducted by Tyson Dowd and Fergus Henderson. Several other people at the University of Melbourne had signed the NDA, however many of the Mercury researchers did not as we saw no point in encumbering the entire group with such legal restrictions. As of the Microsoft Professional Developers Conference last week, this NDA has been lifted, and we can now talk about what we have been working on and the status of this project. This doesn't mean Microsoft is going to ship a product right now -- the development kits that have been distributed are pre-beta releases. But we can talk about it and people using the pre-betas can try out our work.

Links to this post:


Comments: Post a Comment

This page is powered by Blogger. Isn't yours?