[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] A call to arms
From: |
Tobia Conforto |
Subject: |
Re: [Chicken-users] A call to arms |
Date: |
Thu, 22 Jan 2009 12:40:27 +0100 |
Ok, since you asked for it... here are some random thoughts on an
"ideal web application framework"
- No database/SQL (except where truly needed) just plain S-expr file
storage
Using Git as a filesystem is clearly the best solution. I would use
it with s-expr files though, not XML (ugh!) as XML and HTML data can
always be represented with sxml if need be.
Databases can be left to their true purpose (dealing with a million
customer records, orders, products, invoices, forum posts...) while
everything else is stored in plain, versioned, s-expr files.
- Multi-tiered, component-based architecture
This is a good start:
Presuming that some hidden machinery has arranged a chain of
generators by matching the incoming url, it would call a generator,
e.g.
(lambda (next)
(html (div (h1 "some headline)
(next) ; <<
)))
But I would make it more powerful. See for example sxml's pre-post-
order transformer, where you can express arbitrary pre-order and post-
order transformations. That is, having the option to capture the
output of your (next) and process it further.
Better still, we could come up with a Scheme equivalent of Apache
Cocoon's pipelines, where you define regexp matchers on incoming URLs
and assign 'pipelines' to them. A Cocoon pipeline is a chain that
starts with one or more 'generators' (a component that generates a
flow of data in a common, abstract format), passing through zero or
more 'transformers' (components that alter the data flow in arbitrary
ways) and ending in a 'serializer'. Cocoon uses the SAX API as the
abstract data format, but we of course could use the List.
This is promising, I need to think more about it.
- Fast development turnaround time
Having the framework split into basic plumbing and a collection of
components, would mean that we could have the plumbing compiled
separately from the components, and we could keep some components
compiled and others interpreted (instant turnaround time) while we are
working on them.
Newbie question: can Chicken load and (more importantly) unload/reload
a .so at runtime? I've never tried to.
-Tobia