NetLisp Home

They are relatively good but absolutely terrible. -- Alan Kay, commenting on Apollos

NetLisp

Introduction | History | Design | IDE | Download

Introduction

NetLisp is a language similar to Scheme or LISP. It's both interpreted and compiled, targetting the .NET framework. It includes three interfaces -- an embeddable .DLL, a command-line interactive shell/compiler, and a rudimentary IDE.

History

This project is the successor to the Boa language. As such, most of the back history can be found on the Boa page, and I won't duplicate it here. Boa was a nice scripting language, but it wasn't a big enough leap over the rest. What it lacked was the feature that makes LISP the most powerful programming language: macros. Many languages have a feature called a macro, but none come close to the power of the LISP macro system.

The reason I didn't just use one of the already-existing and excellent LISP/Scheme systems is the same as the reason I didn't use straight Python instead of writing Boa. That is, a lack of .NET support. So I started writing NetLisp. At first, I copied the Boa source and began to modify it, but eventually decided to start from scratch. In doing so, I came up with far superior solutions to many problems. The result is that NetLisp is much faster than Boa in many ways, and the ways in which it's currently slower are that way simply because I haven't optimized them yet.

Recently I've undertaken the task of refactoring both NetLisp and Boa into two languages that both target a framework designed to simplify the creation of dynamic languages for .NET. This will allow most optimizations to be automatically included in NetLisp, Boa, and any other languages I create due to them both being implemented in terms of the underlying dynamic language framework. Another goal of the refactoring is to allow languages implemented using the underlying framework to interoperate easily, so that a function or class written in NetLisp can be easily used from code written in Boa, and vice versa.

Design

I had intended to create a modified version of Scheme, but continuations have proved difficult to implement efficiently. So it's like Scheme except that there's currently no support for manipulable continuations. Tail-call optimization is supported, though. For the standard library, I'd been following R5RS and the SRFI documents, for maximum compatibility. However, I recently started putting moving many standard library calls into modules, so as to reduce the number of global symbols.

IDE

The IDE has essentially been lifted from the Boa project, with minimal changes required to interoperate with NetLisp. I'd like to develop an IDE like the excellent DrScheme, but that'll be a tremendous amount of work, so currently it's very rudimentary. There are no screenshots available at the moment, but you can look at the Boa page for screenshots of the Boa IDE. It's basically the same thing.

Unfortunately, the IDE is not documented. Specifically, there are a number of undocumented keyboard commands to do autocompletion, code evaluation, object help, window switching, etc. (Currently, you'll have to look at the source code to discover them all.) The IDE is also somewhat bare. It doesn't provide any support for project files or similar things. It provides "support" for compiling an executable, and many other features, but the lesser-important features are just stubbed out right now.

I'll be improving the IDE as I use it more.

Download

The latest version of NetLisp can be downloaded here, and an older and less sophisticated but more functional version is available here. Alternately, if you can't figure out how to build it from source but still want to try it out, feel free to contact me.