Seite 1 von 1

Ruby - Code in Python?

Verfasst: Donnerstag 10. April 2008, 22:28
von paddy2706
Hallo,

ich muss für ein Programm, das ich entwickle auf ein Ruby - Script zurückgreifen (flvtool2), da das python-modul (kaa.metadata) leider gelegentlich ein Problem mit flv-Videos hat.

Daher meine Frage: Gibt es eine Ruby-Bridge? Oder muss das script mit einem system call aufrufen und die rückgabe parsen?

Für Ruby kenne ich Python Bridges, leider nichts umgekehrtes.

Über einen Tipp würde ich mich sehr freuen :)
Gruß,

paddy

Re: Ruby - Code in Python?

Verfasst: Donnerstag 10. April 2008, 23:15
von Leonidas
paddy2706 hat geschrieben:Für Ruby kenne ich Python Bridges, leider nichts umgekehrtes.
Wie machen die es denn?

Wenn du nicht Subprozesse starten willst, kannst du auch mittels JRuby und Jython oder IronRuby und IronPython Ruby-Code innerhalb von Python-Code ausführen.

Verfasst: Freitag 11. April 2008, 06:58
von paddy2706
Danke für die Antwort. Ich habe keine ambitionen das ganze in einer Java-Anwendung laufen zu lassen oder solche Späße. Ich suche ganz einfach einen Interpreter, der Ruby - Code in Python nutzbar macht (Objekteigenschaften etc.)

Das Ruby/Python Projekt macht das für Ruby (http://raa.ruby-lang.org/project/ruby-python/). Ähnliche Projekte gibt es einige. Leider kann ich keine für Python finden, die dieser Aufgabe gerecht würden.

Verfasst: Freitag 11. April 2008, 10:49
von Leonidas
Mir ist nichts dieser Art bekannt, aber ein C-Modul zu schreiben, dass Ruby embedded müsste eigentlich schon möglich sein. Das es sowas nicht gibt, liegt sicher unter anderem auch daran, dass es wenige Ruby-Bibliotheken gibt, die man in Python vermissen würde.

Verfasst: Samstag 12. April 2008, 09:50
von sma
Es bleibt natürlich immer noch die Möglichkeit, einen Ruby-Interpreter in Python zu schreiben. Entweder "from scratch" wie JRuby oder ähnlich wie HotRuby es macht. Dieses Projekt nutzt die Tatsache, dass Ruby 1.9 von einem rekursiven AST-Interpreter zu einem Bytecode-Interpreter mutiert ist und implementiert diese Bytecodes jetzt in Action- bzw. JavaScript. Witzigerweise ist der dort aufgeführte Benchmark sogar schneller als das Original-Ruby.

Ich weiß nicht, wie vollständig HotJava ist, aber die 1500 Zeilen sollten sich relativ schnell portieren lassen. Vielleicht läuft flvtool2 damit ja ;)

Stefan

Verfasst: Montag 14. April 2008, 08:42
von mitsuhiko
sma hat geschrieben:Es bleibt natürlich immer noch die Möglichkeit, einen Ruby-Interpreter in Python zu schreiben. Entweder "from scratch" wie JRuby oder ähnlich wie HotRuby es macht. Dieses Projekt nutzt die Tatsache, dass Ruby 1.9 von einem rekursiven AST-Interpreter zu einem Bytecode-Interpreter mutiert ist und implementiert diese Bytecodes jetzt in Action- bzw. JavaScript. Witzigerweise ist der dort aufgeführte Benchmark sogar schneller als das Original-Ruby.
Aber auch nur weil deren Benchmark kaputt ist. Mach aus der String concatenation irgendwas mit mehr Realworl Relevanz und das sieht gaaanz anders aus.

BTW ist ein eigener Bytecode Interpreter glaube ich der falsche Ansatz um Ruby in Python auszuführen. Ich denke das einfachste wäre einfach einen Proxy Datentyp mit der Python C-API zu erstellen, der ein Ruby Objekt in den Python Space weiterleitet. Ist beides C und Ruby hat nichtmal Refcounting, so schwer kann das also nicht sein.