diff options
author | GNU Hurd wiki engine <web-hurd@gnu.org> | 2008-07-17 21:23:05 +0000 |
---|---|---|
committer | GNU Hurd wiki engine <web-hurd@gnu.org> | 2008-07-17 21:23:05 +0000 |
commit | f1487225a646ddca07a8a14a28d5b6ce52fa7142 (patch) | |
tree | 0cedda87462871de0b7cc2c4c301d2e2a9895fe5 | |
parent | 79016f7d8228c6d1fb00b76613f6ef8deff8293d (diff) |
web commit by flaviocruz
-rw-r--r-- | community/flavioc.mdwn | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/community/flavioc.mdwn b/community/flavioc.mdwn index d7aaa22c..6ef56a8b 100644 --- a/community/flavioc.mdwn +++ b/community/flavioc.mdwn @@ -22,6 +22,39 @@ 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. + + +### What needs to be done + +- Using continuations for IO blocking operations. This can be done using cl-cont. +- Support for symlinks. +- Support for stacking translators. + + +### 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 |