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!

Reply via email to