[Bese-devel] ucw and new core-server
Evrim Ulu
evrim at core.gen.tr
Sat Dec 22 13:02:19 UTC 2007
Hi Friends,
I'm authoring this email to inform you about our new progress.
The most important news is our http server is about to be ready. We've
finally take the advantage of our parser/renderer functions on monad
like streams named core-streams.
A more interesting news would be, the http server doesnt care if the
request is mod-lisp or http-request directly. Parser can differentiate
both requests and work universally. So no more :backend option neeeded
for the server to run.
It can be sad news that we've dropped the ucw and related libraries from
core-server since we've written most of the libs (about 15) and made
them small/compact.
Here is the total dependency list: (#'s are commented libs ie rewritten)
http://www.core.gen.tr/projects/core-server/src/install/lib.conf
# Core Server 1.0 Dependencies
core-server darcs http://www.core.gen.tr/projects/core-server/
#ucw_dev darcs http://common-lisp.net/project/ucw/repos/ucw_dev/
#ucw+ darcs http://www.core.gen.tr/projects/ucw+/
core-services darcs http://www.core.gen.tr/projects/core-services/
cl-prevalence darcs http://www.core.gen.tr/projects/cl-prevalence/
yaclml darcs http://www.core.gen.tr/projects/yaclml/
#trivial-garbage darcs http://common-lisp.net/~loliveira/darcs/trivial-garbage/
#local-time darcs http://common-lisp.net/project/local-time/darcs/local-time/
bordeaux-threads darcs http://common-lisp.net/project/bordeaux-threads/darcs/bordeaux-threads/
arnesi darcs http://www.core.gen.tr/projects/arnesi_dev/
parenscript darcs http://common-lisp.net/project/ucw/repos/parenscript/
#iterate darcs http://common-lisp.net/project/iterate/darcs/iterate
#rfc2388 darcs http://common-lisp.net/project/ucw/repos/rfc2388-binary/
#rfc2109 darcs http://common-lisp.net/project/rfc2109/rfc2109/
#cl-l10n darcs http://common-lisp.net/project/cl-l10n/repos/cl-l10n/
s-sysdeps darcs http://www.beta9.be/darcs/s-sysdeps
#dojo svn http://svn.dojotoolkit.org/dojo/trunk/
dojo tar http://www.core.gen.tr/projects/dojo-11132.tar.gz
fckeditor tar http://dfn.dl.sourceforge.net/sourceforge/fckeditor/FCKeditor_2.5b.tar.gz
s-xml cvs common-lisp.net:/project/s-xml/cvsroot
slime cvs common-lisp.net:/project/slime/cvsroot
cl-ppcre tar http://weitz.de/files/cl-ppcre.tar.gz
cl-fad tar http://weitz.de/files/cl-fad.tar.gz
#split-sequence tar http://common-lisp.net/project/ucw/ucw-boxset/split-sequence.tar.gz
#trivial-sockets darcs http://common-lisp.net/project/bese/repos/trivial-sockets_until-i-can-merge-with-the-mainline
#puri tar http://files.b9.com/puri/puri-latest.tar.gz
#detachtty darcs http://common-lisp.net/project/bese/repos/detachtty/
#net-telent-date tar http://common-lisp.net/project/ucw/ucw-boxset/net-telent-date.tar.gz
#parse-number tar http://common-lisp.net/project/asdf-packaging/parse-number-latest.tar.gz
asdf-binary-locations darcs http://common-lisp.net/project/cl-containers/asdf-binary-locations/darcs/asdf-binary-locations
rt tar http://files.b9.com/rt/rt.tar.gz
The question that may arise is, what we've written to replace ucw and
friends?
This question was actually the pain we've facing last 2 years. We've
used ucw in several projects and did evaluated several other frameworks
in other languages like gambit, plt etc.
Since our aim is to make small/compact and reusable web applications,
we've pushed ucw to it's limits to make everthing resusable. The main
problem we've faced is definitely the mop based backtracking . I must
admin it leaks as the project grows.
The only control operator ucw has is the action/action-href macro which
saves the k to some slot which allows ucw to backtrack component tree.
Our new web framework is like the PLT's. We did want small/compact and
easily testable web framework.
http://www.core.gen.tr/projects/core-server/src/applications/http.lisp
Here is the example application to demonstrate control operators of our
new web framework: http://www.core.gen.tr/projects/core-server/t/http.lisp
It has send/suspend, action/url, function/url and answer control operators.
* send/suspend is the same as the PLT's which escapes from call/cc at
the end of its' progn.
* action/url, function/url are similar to action-href in ucw which
saves the continuation.
* answer is the same as in ucw which returns from the last send/suspend
point.
Of course, we'r open to questions and advices that may make the control
operators solid. Our aim is now just to open a discussion about those
control operators and make them universal.
It was a problem for us when using ucw to make send/suspends only via
calling components. This disallows us to combine several components in
one send/suspend so, the component api is not enough. So, this operator
now allows us to combine without doing IoC everwhere.
Core-serveR actually has template applications to start a new project:
(defparameter *a-project* (make-darcs-application "www.newproject.com" ;; fqdn
"newproject" ;; project name
"aycan at core.gen.tr")) ;; admin-email
(serialize *a-project*)
(evaluate *a-project*)
;;(share *a-project*)
Serialize generates source code from template application here:
http://www.core.gen.tr/projects/core-server/src/applications/darcs.lisp
This application can be overriden of course for other application tepmlates, but that does the most of the work for us now. Once you've put the applica
More information about the bese-devel
mailing list