Portable AllegroServe is a fork of the AllegroServe webserver, adapted to work with other CL implementations, not only with Allegro CL. So far the following implementations are supported, to varying degrees:
Allegro CL users might prefer use the original AllegroServe, which can be found here; it's included in the ACL distribution as well.
As for the issue of portability of AllegroServe between Lisps that is neither a goal nor a non-goal. If portability were a goal then AllegroServe would have been written much differently: I would have written a layer to separate the Ansi from the non-Ansi parts. That layer would have had well defined semantics so that in each Lisp glue code could written to enable that lisp to plug into the interface. This is do-able but it doesn't get me to either of my goals:
[Read the entire message]
- portable programs work in the least common denominator of the capabilties of the target platforms. I have a lot of control over things I can add to ACL to make it achieve the speed/reliability goal but I have no control over the other lisp implementations. Likewise other Lisps may have special features that I can't make use of since not all other Lisps have equivalent features.
- It's easier to understand network programming for any single Lisp than for an ad hoc abstraction layer on top of a set of Lisp implementations. Thus my goal is better served by writing in the ACL network and threads interface.
We liked AllegroServe, but wanted to use it on other CL implementations as well, not just Allegro CL. For us that is more important than serving as an example of how to do network programming in Allegro CL. We are also willing to sacrifice some speed for portability.
AllegroServe is undergoing active development, and we would like to be able to incorporate the changes (new features and bug fixes) into Portable AllegroServe. Therefore, we try to change as little as possible in the AllegroServe source files; instead, we've written an ACL compatibility layer which tries to emulate ACL's networking support, multiprocessing support and so on.