Currently supported languages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The first column is the language (in alphabetic order), the second column is the GPMI module you need to load. Language Module name Working Instance Memory version Safe (2) leak (1) awk (5) mawk yes yes todo 0.9.1 bash cli yes yes no * lua lua yes yes no 5.1, 5.2 scheme guile yes yes 650k 1.8 stutter (4) stutter yes yes 3k todo pascal ghli yes ?? ?? todo perl perl yes with ithreads (3) 120k 5.* php php no? (6) no ?? todo python python yes no 800k 2.5 ruby ruby yes no 670k 1.8 (7) ruby mruby yes yes 200 bytes 1.0.0 tcl tcl yes yes 210k 8.4 (1) We estimated the bytes of memory that is leaking by using example-scripts with the given language together with valgrind. GPMI itself is not leaking, we can estabilsh that by trying lua (which is very well programmed, memory-wise) and the cli module which runs the actual script in a separate process. Of course the memory it is 'leaking' most of the time is just memory that isn't free'd after we requested a destroy. Still we consider this as a bad thing, although the memory is automaticly freed by the system after the program shuts down. So those numbers are just indications how good a language is in cleaning up after itself. (2) If a language is instance safe, we mean we can launch multiple instances of the same language at the same time, without messing around with the other instances. For example, I can have 2 variables 'foo' in both instances, with different values. They never know of eachother that the other is running. If it is known a language doesn't support it, we protected the code against multiple instances being active at the same time. (3) You can compile Perl with or without ithreads. When you do it without ithreads, perl isn't instance safe. When you do it with ithreads, it is no problem at all. (4) A lisp dialect. (5) since libmawk is licensed under the GPL, using this module may affect licensing of the host application's. (6) php doesn't really support embedding the way GPMI requires. The module is there, should work, but not tested for some time. (7) there were API changes in 1.9 and the dispatcher C function (dynamic commands) wouldn't port. It's probably better to use mruby, which is instance-safe as well.