summaryrefslogtreecommitdiff
path: root/community/flavioc.mdwn
diff options
context:
space:
mode:
authorarnebab <arne_bab@web.de>2008-07-24 09:28:24 +0200
committerarnebab <arne_bab@web.de>2008-07-24 09:28:24 +0200
commitf3fe7440566203c6e4a2a4936d40ecce383ec45a (patch)
tree4a85ddc5efa0157e7bef0e8c228ceda463d9de5c /community/flavioc.mdwn
parent03e750f0857e8906bd69792f1ac5bc69531230ba (diff)
parent5a21fc07c33a883d5ad08cf4947279387e92893b (diff)
Merge branch 'master' of arnebab@flubber:~wiki/wiki
Diffstat (limited to 'community/flavioc.mdwn')
-rw-r--r--community/flavioc.mdwn38
1 files changed, 38 insertions, 0 deletions
diff --git a/community/flavioc.mdwn b/community/flavioc.mdwn
index d7aaa22c..a0c0d036 100644
--- a/community/flavioc.mdwn
+++ b/community/flavioc.mdwn
@@ -22,6 +22,44 @@ hg clone http://freehg.org/u/flavioc/cl-hurd/
Creating an extensible translator library in lisp using the mig generated stubs.
+### What's done
+
+- The library for writing translators is mostly written.
+- This library is intended to implement virtual filesystems. Examples are: translators were data is located in a local file (like zipfs, tarfs, rarfs, ...), single file translators (that do content filtering, output of a command, etc), network based filesystems (ftpfs, httpfs, ...)
+- Right now, what's missing is: support for symlinks, file execution, and setting other translators on our node tree.
+- It's possible to specialize the basic translator library and implement new translator classes. This is done using CLOS.
+- There is a tree-translator class that makes the managing of a node tree very easy, doing all the work for us, through a simple directory API and implementing the directory callbacks for us.
+- There is a simple example (something like zipfs) translator that can expose the directories and file contents of a ZIP file.
+- Translator options (manipulated through fsysopts) have a simple and easy to use API.
+- All the Mach port manipulation API is available.
+- It's possible to send and receive messages. Simple example:
+<pre>
+ (let* ((spec-mixed (make-message-spec :fields '(:string :integer :char :string :integer :real)))
+ (msg-mixed (make-message :spec spec-mixed))
+ (port (port-allocate :right-receive)))
+ (send-message msg-mixed :remote port :data (list "abc" 42 #\b "cba" 314 3.14))
+ (receive-message msg-mixed :source port) ; This returns T on success.
+ (get-message msg-mixed))) ; Returns '("abc" 42 #\b "cba" 314 3.14)
+</pre>
+- New message types (like :string, :integer) can be implemented, providing a powerful extension mechanism.
+- Creation of symlinks and symlink path resolution.
+- Creation of character/block devices, fifos and sockets.
+
+
+### What needs to be done
+
+- Using continuations for IO blocking operations. This can be done using cl-cont.
+- Callbacks:
+ - file_lock, file_lock_stat (still not sure if they are really needed)
+ - file_reparent
+- Bind the client RPC calls.
+- Use the socket stubs?
+
+
+### Notes
+
+- File execution is complicated to do, because there is no multithreading support on CLisp and continuations won't do it. Maybe forking the clisp process?.
+
## To do
### Documentation