I spent much of today looking at Hunchentoot and here is my plan for
refactoring:
Immediate high level goals:
- Make threading optional on threaded platforms
- Prepare for SERVE-EVENT based buffering
- Clean up and refactor for better hackability
In the longer term, I would like to make more of Hunchentoots data
structures into classes that can be subclassed by applications.
Requests, sessions and handlers come to mind, all of which currently
exist, but they can't easily be extended in an object oriented
fashion. Maybe it is good like that and an object oriented framework
should be made optional. Also, there should be a logging API.
Short term hacking plan:
- Use USOCKET instead of private compatibility library. Currently,
threading and socket I/O is intermixed because COMM:START-UP-SERVER
from Lispworks is emulated by all platforms. Also, timeouts will be
provided through USOCKET.
- Use BORDEAUX-THREADS for threading. Currently, threads are assumed
to be processes as in Lispworks. I particularily dislike the use of
PROCESS-KILL to shutdown the server.
- Clean up and refactor to reduce the number of special variables
- Move platform specific code into subdirectory
- Once we have decided whether we want to keep mod_lisp: Refactor so
that mod_lisp specific code is isolated or remove it altogether.
If you think anything of this is terrible and/or a bad idea, speak up.
-Hans