[gambit-list] What are your experiences of Termite?
David McClain
dbm at asyrmatos.com
Wed Apr 30 09:36:01 EDT 2008
Hello Christian,
I will apply your patches to see if that makes a difference. The
problems I ran into were (pulling from memory about 1 month ago...):
1. Attempt to spawn a thread as per Web examples, in the same running
Gambit image -- works fine.
2. Bring up two independent terminal sessions running Gambit with
Termite and attempt to remote spawn to LocalHost on the same machine.
That worked about 1 time in 10, with the first one working well and
encouraging me to persist, as per intermittent positive reinforcement
(i.e., gambling). The errors were unidentified, but caused the Gambit
images to abort. This was on Mac OS X 10.4.? (one month ago). I did
not try on PC / Windows.
Being under time pressure, I found the sources to Termite very helpful
in granting an initial understanding of how such things work. Between
than and my understanding of Erlang, I was able to sit down and do a
clean-sheet development of something very similar (and beyond) using
Lispworks over the course of about 4-6 days. I already had an ML
Pattern Matcher from prior projects, and that helped save a lot of time.
I like Scheme, but knowing what I do about it and what I now know
about the needs of a Termite-like program, I expect that there have
been many special additions to the Gambit core to handle exception
trapping, socket I/O, and the REPL reader - not to mention macros and
the ML Pattern Matching. These things will take more time to delve
into and gain familiarity with them. And at the time, after browsing
the mail threads on Gambit, it wasn't at all clear that Termite would
be supported going forward. It appeared to be a graduate thesis
project and that person has since moved on.
Dr. David McClain
Sr. VP, Embedded Systems
Asyrmatos Inc.
Boston & Tucson
phone: 520-529-2437
cell: 520-390-3995
web: www.asyrmatos.com
email: dbm at asyrmatos.com
On Apr 29, 2008, at 8:34 PM, Christian Jaeger wrote:
> David McClain wrote:
>> Hi,
>>
>> While not a production use of Termite, my recent reading of the
>> sources led me to write our Butterfly system in Common Lisp. My
>> initial attempts at using Termite let to this, as its performance
>> seemed sporadic (more often failing than succeeding -- can't be
>> sure why). But it became increasingly clear that in order to track
>> down the difficulty, I would have to delve deeper into the
>> threading mechanism of Gambit. I'd love to do that someday, but
>> not now.
>
> It would probably be helpful if you could tell more about the kind
> of failures you have seen. The currently released version has a
> problem with generation of uuid's making you run out of memory
> (they've been interned symbols and Gambit doesn't GC those).
> Guillaume told me that he fixed that for the next release.
>
> Other possible problems coming to mind are:
>
> - FFI calls blocking other threads
> - the Gambit keyword argument GC bug which has been mentioned on the
> list a few times
>
> BTW I've attached a patch to Termite to make it run on the current
> Gambit release; note that (to be sure it's compiled in safe mode and
> for not having to modify Gambit itself) I'm compiling it like this:
>
> * unpack Termite somewhere else, not inside Gambit tree
> * cd termite; patch -p1 < thepatchfile
> * cd ..; gsc termite/termite.scm
>
> then run Termite user code with
>
> gsi /path/to/termite/termite path/to/usercode -
>
> Christian.
>
> diff -rN -u old-termite/termite.scm new-termite/termite.scm
> --- old-termite/termite.scm 2008-04-30 03:31:41.000000000 +0200
> +++ new-termite/termite.scm 2008-04-30 03:31:41.000000000 +0200
> @@ -4,7 +4,7 @@
>
> ;; this is the main file for the Termite system
>
> -(declare (block))
> +(declare (block) (standard-bindings) (extended-bindings))
>
> ;;
> ----------------------------------------------------------------------------
>
> @@ -154,7 +154,7 @@
> (make-upid service-name node))
>
> (define (base-exception-handler e)
> - (##continuation-capture
> + (continuation-capture
> (lambda (k)
> (let ((log-crash
> (lambda (e)
> @@ -163,11 +163,11 @@
> (call-with-output-string ""
> (lambda (port)
> (display "#|\n" port)
> - (##display-exception-in-context
> + (display-exception-in-context
> e
> k
> port)
> - (##cmd-b 0 k port)
> + (##cmd-b k port 0) ;; todo offer safe access?
> (display "|#\n" port)))))))
> (cond
> ;; Propagated Termite exception?
> @@ -934,7 +934,7 @@
> (define (init-from-shell-script)
> (with-exception-catcher
> (lambda (e)
> - (##display-exception e (current-error-port))
> + (display-exception e (current-error-port))
> (error (string-append "usage: "
> (car (command-line))
> " [ip-address [tcp port#]]")))
>
More information about the Gambit-list
mailing list