2008-10-27 7 views
18

¿Cuál es la mejor manera de incrustar Ruby como lenguaje de scripting en C++? Usando ruby.h? ¿TRAGO? ¿Algo más? Lo que necesito es exponer algunos objetos de C++ a Ruby y hacer que el intérprete de Ruby evalúe los scripts que acceden a estos objetos. No me importa extender Ruby o acceder a él en C++.¿Cómo incrustar Ruby en C++?

He encontrado esto article on embedding Ruby in C++, y si bien es muy útil, es un poco viejo y me preguntaba si hay otros recursos sobre el tema (o implementaciones de código abierto de motores similares).

Respuesta

4

trago es probablly el camino a seguir ..... pero tampoco rubí incrustar demasiado bien ......

si quieres un lenguaje que integra perfectamente en C++, intente lua

+0

Probé lua, es un lenguaje maravilloso y fue bastante fácil de integrar. Ruby es un requisito, sin embargo, ya que tengo un montón de código de Ruby que me gustaría volver a usar. –

+1

luego, el trago es bastante bueno ... ¡y no intente con el subprocesamiento múltiple! –

+1

Sí, incluso no intente incrustar ruby ​​y utilizarlo desde un solo hilo en sus aplicaciones multiproceso. Ellos (los programas Ruby) están cambiando los manejadores de señal, variables de entorno, directorios actuales, etc. todo el tiempo. – Lothar

11

Rice se ve muy prometedor.

+4

Nota para usuarios de Windows: solo se sabe que Rice compila y ejecuta correctamente bajo Cygwin y Mingw. :( –

6

Ruby proporciona un archivo README.EXT muy útil. Tiene mucha información sobre cómo extender Ruby y convertir entre C & Ruby types.

También está este excerpt del pick axe book que prácticamente cubre la misma cosa.

En mi caso, cuando agregué el script de Ruby a mi aplicación, decidí no usar swig, porque mis necesidades eran muy simples y no quería agregar otra dependencia de compilación.

1

He estado trabajando en la rareza (https://github.com/Plaristote/Rarity), que hace dos cosas:

  • Genera enlaces de Rubí partir de una descripción YML de la API C++
  • permite la interacción con la escritura de rubíes de la manera más C++ hay

he resuelto una buena parte de la pregunta (manejo de excepciones, recolección de basura) ... no he visto en ninguna otra parte de la generación de código que la rareza utiliza para hacer sus fijaciones vienen a la vida. Tampoco he visto ninguna otra lib que permita una conversión tan fácil entre los tipos C++ y Ruby.

¡Creo que Rarity vale la pena! ¡Y me alegraría tener algunos comentarios también :)!