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