[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