Thursday, January 20, 2005

Abstraction without losing the Details

In the recent proliferation of programming languages to handle the many specific internet domains, there have been languages that provide abstract ways to represent and manupulate computers for a variety of purposes. For example, Java has provided the virtual machine abstraction, allowing programmers to write a program that runs on a large number of platforms. The virtual machine abstraction reduces the control the programmer has over the machine however, and complex algorithms or data intensive processing fail in Java because of the memory and speed processing control constraints. The general trend toward more abstract languages points out an important need in the programming community: C (the language that major operating systems are written in these days) is too "low level" to quickly, spontaneously prototype and develop operating system independent programs. The benefits of quick development in abstract languages outweigh the control/speed advantages of C/C++ for most developers. So, why don't we have langauges that allow full control of the machine with the benefits of abstraction as well? The answer for me is to write a language that combines the control and speed benefits of C++ with the clean syntax and abstraction capabilities of Lisp. I'm currently working on a language on top of Lisp that writes C++ code and perform compilation with the GNU C++ compiler. The process of compilation and execution is abstracted. I'm hoping that this will help to speed up my development time to be as fast as any other Lisp program, while having the advantage of C++ speed and control. ANSI C++ is of course operating system independent, so the programs developed could be compiled on any platform that compiles ANSI C++ code.