Hi!
I'm interested in hearing what uses you and others have had of termite, in production as well as experimentally. What is your general experience? Is it mature for production use? If not, then what needs to be improved? If so, what are the areas that would benefit from further development?
By what reasons would you or would you not go with Erlang, or any other environment, to fill the same purposes? If any other environment, then what environment?
Thanks! Mikael
Afficher les réponses par date
On 29-Apr-08, at 2:13 PM, Mikael More wrote:
Hi!
I'm interested in hearing what uses you and others have had of termite, in production as well as experimentally. What is your general experience? Is it mature for production use? If not, then what needs to be improved? If so, what are the areas that would benefit from further development?
By what reasons would you or would you not go with Erlang, or any other environment, to fill the same purposes? If any other environment, then what environment?
Interesting question! I'm not aware of "production use" of Termite but if someone knows please speak up!
I would like to ask you a question... what are you trying to do with Termite or Erlang, and why do you have a specific interest in Termite?
One of the nice things about Gambit is that it can be used to implement Termite-like embedded languages relatively easily. All the infrastructure is there (networking, object serialization, efficient threads). If you want to see how, look at the example in examples/ distr-comp particularly examples/distr-comp/dc.scm . If that's not exactly what you want, go ahead and change it. Try that with Erlang!
Marc
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.
Butterfly takes a similar approach to Termite, offering both local and remote spawning of tasks across the network. In the case of both Butterfly and Termite, my own opinion is that we have a Mutex / Locking mechanism that serves perfectly well for simple thread coordination needs. Anything requiring more than one lock should probably be placed into a spawned server task. Erlang carries this to extremes, inserting even the most trivial things into autonomous threads. No doubt that helps its robustness, but we have more expensive thread switching mechanisms than Erlang, and it just seems like overkill. Your opinions could differ on this...
Our Butterfly will be used to control an interconnected series of millimeter-wave transceivers carrying data at rates 10-40 Gbps for wireless "ubiquitous computing".
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@asyrmatos.com
On Apr 29, 2008, at 4:58 PM, Marc Feeley wrote:
On 29-Apr-08, at 2:13 PM, Mikael More wrote:
Hi!
I'm interested in hearing what uses you and others have had of termite, in production as well as experimentally. What is your general experience? Is it mature for production use? If not, then what needs to be improved? If so, what are the areas that would benefit from further development?
By what reasons would you or would you not go with Erlang, or any other environment, to fill the same purposes? If any other environment, then what environment?
Interesting question! I'm not aware of "production use" of Termite but if someone knows please speak up!
I would like to ask you a question... what are you trying to do with Termite or Erlang, and why do you have a specific interest in Termite?
One of the nice things about Gambit is that it can be used to implement Termite-like embedded languages relatively easily. All the infrastructure is there (networking, object serialization, efficient threads). If you want to see how, look at the example in examples/ distr-comp particularly examples/distr-comp/dc.scm . If that's not exactly what you want, go ahead and change it. Try that with Erlang!
Marc
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
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.
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@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))
(error (string-append "usage: " (car (command-line)) " [ip-address [tcp port#]]")))(display-exception e (current-error-port))
Hi,
We are using Termite to implement a dataflow/control flow multi-actor process management system. This is experimental research but with concrete applications prototypes in the end with a testbed composed of real end-users. We plan to extend this prototype to an industrial application during next year.
From my point of view Termite is very close to be mature enough to be used in a production environment. We did not try very intensive usage. We only launch a max a couple of hundreds of processes simultenaously. What remains to be done is the packaging and some code cleanup I believe (loading Termite as a module into Gambit is quite tricky for the moment).
I would say it is a very good candidate for developing a quick prototype. The rest depends on the load you will assign to it.
For me, going with Erlang is out of question. It would be isolating the technology inside an uncontrolled environment. In the context of Gambit and Termite, you produce standard C code in the end. This is much more interoperable technology than Erlang. It is also much easyer to change the behavior of the language to adapt it to your custom needs.
If you need something from Erlang just implement it in Scheme! If it is not fast enough just do the critical part in C.
One last comment, if you want to play with Termite and Gambit with intensive network access going on. Do it on Linux or on MacOSX. On WinXP there seem to be some bug locking-up network access. I posted this to the list a while ago.
I hope it gives you some clues.
Francois Magnan
On 29-Apr-08, at 2:13 PM, Mikael More wrote:
Hi!
I'm interested in hearing what uses you and others have had of termite, in production as well as experimentally. What is your general experience? Is it mature for production use? If not, then what needs to be improved? If so, what are the areas that would benefit from further development?
By what reasons would you or would you not go with Erlang, or any other environment, to fill the same purposes? If any other environment, then what environment?
Thanks! Mikael
Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list