Hi everyone, I'm announcing the availability of a new package for cross-language interoperability called "Polyglot", already available as a registered package: https://github.com/wavexx/Polyglot.jl
Polyglot allows to call a remote function in a supported language with automatic serialization of basic types. It also allows to export local Julia functions to the remote system with the same method (that is, the remote system can call back Julia with regular functions). Local/remote functions can also call each-other recursively without any limitation. For a brief example, please see: http://www.thregr.org/~wavexx/software/Polyglot.jl#overview The currently supported languages are PHP, Perl, Python (2/3/PyPy) and JavaScript (Node.js). A Common Lisp (sbcl/clisp) and Julia backends are also in the works. I'm actively looking for feedback, especially about the interface of the module. I'd love to introduce some uniformity and reuse generic method names if possible. Please keep that in mind: the package is stable, but I'll shuffle things around in the beginning if needed. For those interested, "Polyglot" spawns long-lived coprocesses which communicate through a simple serial protocol. While not being as efficient as a dl-opened interpreter, this method allows to have multiple interpreters running at the same time, with different versions and potentially running on different systems. When the Julia backend will be ready, Polyglot will have many similarities to current's Julia parallel/multiprocessing interface in both API and design. Polyglot is almost a direct port of the Python "Bond" package (https://pypi.python.org/pypi/python-bond). In fact, it shares the same driver infrastructure and I currently recommend to read through it's practical examples and language support section (at least until I finish writing the remaining documentation). Please share your ideas!
