Можно ли интегрировать Python или Perl с Ruby?

Можно ли интегрировать Python (и/или Perl) и Ruby? Я посмотрел на http://www.goto.info.waseda.ac.jp/~fukusima/ruby/python/doc/ и http://code.google.com/p/ruby-perl/, но оба они выглядят довольно устаревшими.

Кто-нибудь создал интерфейс Ruby для API Python C?

Изменить: Python может быть интегрирован со многими другими языками в соответствии с http://wiki.python.org/moin/IntegratingPythonWithOtherLanguages. Однако этот список не включает Ruby.

Ответ 1

Интеграция динамических языков является одной из целей проекта Parrot. Это виртуальная машина, на которую нацелены динамические компиляторы языка. После компиляции на ту же виртуальную машину вы должны иметь возможность использовать форму "объект" на любом из языков независимо от источника объекта.

Однако проблема в настоящий момент заключается в стабилизации виртуальной машины и завершении большинства компиляторов. Однако это было долгое время.:)

Ответ 2

Моя школа (Georgia Tech) вместе с Bryn Mawr и Microsoft Research делает проект, который сейчас называется Pyjama. В основном, он использует Microsoft DLR, чтобы вы могли свободно смешивать Python и Ruby. Я не пробовал, но это звучит довольно круто.

Вот пример с сайта. Вы вводите класс в "Python mode". Затем он компилируется, и вы запускаете команду в "Ruby mode".

class PythonClass:
     def hello(self, value):
         print "Python says hello to", value

pc = python_class().new
pc.hello "Ruby"

Что создает "Python приветствует Ruby".

Ответ 3

Это может быть возможно, но не очень практично. Было бы значительно проще переносить любые модули, которые вам нужны, от одного к другому, чем было бы встраивание одного из интерпретаторов в другое.

Если вам абсолютно необходимо использовать оба языка в проекте, лучшим вариантом будет комбинация Jython и Jruby, IronPython и IronRuby. Я не уверен, что вы можете заставить их говорить друг с другом, но по крайней мере вы можете разместить их на одной виртуальной машине.

Ответ 4

Для исследовательского проекта я хотел использовать сказочный matplotlib, доступный для Python. Я также нашел эту библиотеку, о которой вы говорили. Однако это не похоже на что-то популярное и хорошо протестированное. Поэтому я решил написать script, который создал графики с использованием чистого Python и вызвал его из Ruby через popen. Это работало очень хорошо для меня.

Ответ 5

Вы можете писать расширения для Ruby в C.

Итак, если у Python есть API C, вы можете написать расширение C для Ruby, которое использует этот API.

Я ничего не знаю о API Python или о том, насколько большой компонент вы хотите интегрировать, но если он не слишком большой, это может (возможно) дать вам возможность запускать код Python из Ruby.

Ответ 6

Другая стратегия, используемая Facebook, заключается в том, чтобы выставлять API через Thrift. Вы определяете легкие сервисные API, а RPC - межпроцессные процессы.