2009-08-21 15 views
7

Puede compilar una aplicación Java y ejecutarla en cualquier máquina donde esté ubicada la máquina virtual Java, independientemente del hardware subyacente.¿Es Ruby tan multiplataforma como Java?

Dado que Ruby on Rails se construyó sobre Ruby, me preocupa si la construcción de software en Ruby en cualquier entorno es la misma o no. Existen versiones de Ruby para Windows, Linux y Mac al menos.

Entonces, ¿podría hacer lo mismo con una aplicación Ruby y con una aplicación Java? En otras palabras, ¿cuán multiplataforma es Ruby?

EDIT: Quiero decir Ruby por sí mismo, no Ruby corriendo en otra máquina virtual como en jRuby. ¿Debo esperar más desarrollo de pronósticos multiplataforma en Ruby que en Java o ambos son casi iguales?

+3

en realidad se debe mencionar que se refiere a los sistemas embebidos, nunca pensado en ello antes de leer los comentarios sobre la primeras respuestas (que parecen haber pasado por alto estas plataformas de destino también) – Jean

+0

Tienes razón Jean, he votado dos veces porque la pregunta no menciona los sistemas integrados y respondí de acuerdo con la pregunta. +1 por tu comentario. ¿Te refieres a sistemas integrados? –

Respuesta

13

Ruby es un lenguaje de scripting y es interpretado en el tiempo de ejecución por el intérprete de Ruby, el código de Ruby es interpretado y convertido a lenguaje a nivel de máquina, es decir, código de ensamblaje. Hablando de la plataforma Independence, puede ejecutar código Ruby en cualquiera de las plataformas como Linux, Windows o Mac si tiene Ruby Interpreter instalado en la plataforma.

Donde, como en Java, se compila y convierte a una clase de byte intermedio y esta clase de bytes es interpretada por JVM dependiente de plataforma (Java Virtual Machine).

De esta forma, puede pensar en el archivo fuente de Ruby como clase de bytes que se puede ejecutar en cualquier plataforma, con una clase de byte diferente ya compilada pero el archivo fuente de ruby ​​se compilará en tiempo de ejecución.

+4

¿Por qué se votó este voto dos veces? La pregunta es, en el mejor de los casos, vaga y, en el peor de los casos, un iniciador de llama. Esta respuesta es buena. (Te rescaté un poco con un +1.) – jdl

+0

Los idiomas interpretados (como Ruby) generalmente funcionan igual en una multitud de plataformas diferentes. Todo el trabajo pesado específico de la plataforma se realiza cuando se transporta el intérprete, y las secuencias de comandos pueden funcionar de la misma manera en cualquier plataforma donde esté disponible un intérprete. La gran advertencia es las bibliotecas. Algunas bibliotecas pueden no estar disponibles para todas las mismas plataformas que Ruby. Por lo tanto, si utiliza una biblioteca (por ejemplo) solo Linux e intenta ejecutar su código en un cuadro de Windows, su código no será verdaderamente "multiplataforma" (aunque esto no es culpa del lenguaje en sí). – bta

+0

Cualquier referencia, por favor? –

0

Si nada más, puede ejecutar JRuby, un intérprete de Ruby escrito en Java.

+1

JRuby no se ejecutará en muchos sistemas integrados que usan una versión anterior e incompatible del bytecode de Java. – Imagist

5

Ruby se une bastante estrechamente a la plataforma subyacente. Este es especialmente el caso cuando se trata de mecanismos de proceso/enhebrado y varias formas de IPC. Estos son desafíos más importantes que superar, en comparación con los "triviales" como separador de directorio, y así sucesivamente. Estoy bastante seguro de que no hay paridad entre, por ejemplo, el tiempo de ejecución de Windows Ruby y el tiempo de ejecución de Linux Ruby.

Con Java, el modelo de proceso/IPC/hilo es el mismo en todas las plataformas que ejecuta la JVM.

3

Siempre y cuando no toque hardware o subprocesos, Ruby debería trabajar en los tres principales sistemas operativos. Para el desarrollo web, Ruby funcionará de la misma manera en todas partes. Para aplicaciones más avanzadas, no, porque no ofrece las abstracciones de la JVM (que probablemente tenga en mente).

2

Java es una plataforma cruzada. Ruby no lo es. Se siente como una idea de último momento, "oh, tenemos usuarios de Windows, intentemos que funcione".

En Java he experimentado menos de 10 problemas de plataforma cruzada en años de uso intensivo. Las áreas en las que se encontraba esto eran obviamente áreas que serían difíciles. Sistema/Sistema de archivos específicos.

En ruby, he tenido problemas incluso al hacer el primer tutorial de rieles como tienen otros (https://github.com/twbs/bootstrap-sass/issues/696). No consideraría la plataforma cruzada de rubíes. La plataforma se basa en una gran cantidad de dependencias, que cada vez que una de ellas utiliza algo específico de la plataforma, todo se rompe. es decirvea este error: ExecJS::RuntimeError on Windows trying to follow rubytutorial

También heredé un proyecto de rubíes de gran tamaño y se basó en capistrano, webkit, bcrypt y estos necesitaban un kit de compilación dev y compilaciones nativas. No solo funcionó. Ver las personas que tienen problemas aquí: https://github.com/codahale/bcrypt-ruby/issues/116 Es curioso, en un punto que sugieren que alguien sigue un post japonés :)

Cuestiones relacionadas