ventajas tutorial sirve rails que programar para documentacion desventajas descargar ruby

tutorial - ruby wikipedia



¿Es posible compilar código de Ruby a byte como con Python? (5)

Aunque Ruby 1.9 YARV VM es un compilador de código de bytes, no creo que pueda volcar el código de bytes en el disco. Quizás quieras ver el compilador alternativo, Rubinius , creo que tiene esta capacidad. Sin embargo, debe tener en cuenta que los archivos pyc de código de byte (y me imagino que el equivalente de ruby) se pueden "descompilar" con bastante facilidad.

En Python, si quiero distribuir una aplicación sin fuentes, puedo compilarla en bytecode .pyc, ¿hay alguna forma de hacer algo parecido en Ruby?


Escribí una respuesta mucho más detallada a esta pregunta en la pregunta " ¿Pueden Ruby, PHP o Perl crear un archivo precompilado para el código como Python? "

La respuesta es, depende. Ruby Language no tiene disposiciones para compilar en bytecode y / o ejecutar bytecode. Tampoco tiene especificación de un formato de bytecode. La razón de esto es simple: sería demasiado restrictivo para los implementadores de lenguaje si se vieran obligados a usar un formato de bytecode específico, o incluso códigos de byte en absoluto. Por ejemplo, XRuby y JRuby compilan en el bytecode JVM, Ruby.NET y IronRuby compilan en el bytecode CIL, Cardinal compila en PAST, SmallRuby compila en el bytecode Smalltalk / X, MagLev compila en GemStone / S bytecode. Para todas estas implementaciones, sería estúpido utilizar cualquier otro formato de bytecode que no sea el que usan actualmente, ya que todo su punto está interoperando con otras implementaciones de lenguaje que usan el mismo formato de bytecode.

Simlar para MacRuby: se compila en código nativo, no en bytecode. Una vez más, usar el código de bytes sería estúpido, ya que uno de los objetivos es ejecutar Ruby en el iPhone, que requiere un código nativo.

Y, por supuesto, hay MRI, que es un intérprete de script AST puro y, por lo tanto, no tiene un formato de código de bytes.

Dicho esto, hay algunas implementaciones de Ruby que permiten compilar y cargar desde el bytecode. Rubinius lo permite, por ejemplo. (De hecho, tiene que tener esa funcionalidad ya que su compilador Ruby está escrito en Ruby, y por lo tanto el compilador debe compilarse primero en el código de bytes de Rubinius, para poder resolver el Catch-22).

YARV también puede guardar y cargar el código de bytes, aunque la funcionalidad de carga actualmente está deshabilitada hasta que se implementa un verificador de códigos de bytes que evita que los usuarios carguen códigos de bytes manipulados que podrían fallar o subvertir al intérprete.

Pero, por supuesto, ambos tienen sus propios formatos de bytecode y no se entienden entre sí (ni tinyrb o RubyGoLightly o ...) Además, ninguno de esos formatos es comprendido por un JVM o un CLR y viceversa.

Sin embargo, el punto es irrelevante porque, como señala Mark, siempre se puede aplicar ingeniería inversa al código de bytes de todas formas, especialmente en casos como CPython, PyPy, Rubinius, YARV, tinyrb, RubyGoLightly, donde el formato de bytecode fue diseñado específicamente para ser muy cerca del idioma de origen.

En general, es simplemente imposible proteger el código de esa manera. El motivo es simple: desea que la máquina pueda ejecutar el código. (De lo contrario, ¿para qué escribirlo en primer lugar?) Sin embargo, para ejecutar el código, la máquina debe entender el código. Dado que las máquinas son mucho más tontas que los humanos, se deduce que cualquier código que pueda ser comprendido por una máquina puede ser entendido por un humano, sin importar si ese código está en forma de origen, código de bytes, ensamblaje, código nativo o baraja de tarjetas perforadas.

Solo hay una solución técnica viable: si controla todo el proceso de ejecución, es decir, construya su propia CPU, su propia computadora, su propio sistema operativo, su propio compilador, su propio intérprete, etc., y utilice criptografía sólida para proteger a todos Esos, entonces y solo entonces podrían proteger su código. Sin embargo, como, por ejemplo, Microsoft descubrió el modo difícil con la XBox 360, incluso haciendo todo eso y contratando a algunos de los criptógrafos y matemáticos más inteligentes del planeta, no garantiza el éxito.

La única solución real no es técnica sino social: tan pronto como haya escrito su código, quedará automáticamente protegido por la ley de derechos de autor, sin que tenga que hacer una sola cosa. Eso es. Su código está protegido.



No con el intérprete de MRI, no.

Se están trabajando en algunas máquinas virtuales más nuevas sobre dónde se encuentra esto en la mesa, pero en este punto no se utilizan ampliamente (o incluso están listas para ser utilizadas).


Si usas Jruby, puedes compilar tu código Ruby en archivos .class de Java (incluyendo tus elementos de Rails) para ejecutarlos con (abrir) jdk fuera de la caja.

Incluso puede compilar todo su material en un archivo .war para implementarlo en Apache Tomcat o Jboss con una herramienta llamada "warbler"

https://rubygems.org/gems/warbler/