stringtranslate.com

JRuby

JRuby es una implementación del lenguaje de programación Ruby sobre la máquina virtual Java , escrito principalmente en Java . Es un software libre publicado bajo una licencia tripartita EPL / GPL / LGPL . JRuby está estrechamente integrado con Java para permitir la incorporación del intérprete en cualquier aplicación Java con acceso bidireccional completo entre el código Java y el código Ruby (similar a Jython para el lenguaje Python).

Los desarrolladores principales de JRuby son Charles Oliver Nutter y Thomas Enebo, y muchos de los colaboradores actuales y pasados ​​incluyen a Ola Bini y Nick Sieger. En septiembre de 2006, Sun Microsystems contrató a Enebo y Nutter para trabajar en JRuby a tiempo completo. [2] En junio de 2007, ThoughtWorks contrató a Ola Bini para trabajar en Ruby y JRuby. [3]

En julio de 2009, los desarrolladores de JRuby dejaron Sun para continuar el desarrollo de JRuby en Engine Yard . [4] En mayo de 2012, Nutter y Enebo dejaron Engine Yard para trabajar en JRuby en Red Hat . [5]

Historia

JRuby fue creado originalmente por Jan Arne Petersen en 2001. En ese momento y durante varios años, el código era un puerto directo del código C de Ruby 1.6 . Con el lanzamiento de Ruby 1.8.6, se inició un esfuerzo para actualizar JRuby a las características y la semántica de 1.8.6. Desde 2001, varios colaboradores han colaborado en el proyecto, lo que ha dado lugar al equipo central actual (2012) de unos seis miembros.

JRuby 1.1 agregó los modos de compilación Just-in-time y Ahead-of-time a JRuby y ya era más rápido en la mayoría de los casos que la implementación de referencia Ruby 1.8.7 vigente en ese momento. [6]

Los paquetes JRuby están disponibles para la mayoría de las plataformas; Fedora 9 fue uno de los primeros en incluirlo como paquete estándar en JRuby 1.1.1. [7] [8]

En julio de 2009, los desarrolladores principales de JRuby en Sun Microsystems, Charles Oliver Nutter, Thomas Enebo y Nick Sieger, se unieron a Engine Yard para continuar con el desarrollo de JRuby. [4] [9] En mayo de 2012, Nutter y Enebo dejaron Engine Yard para trabajar en JRuby en Red Hat . [5]

JRuby ha admitido la compatibilidad con las versiones 1.6 a 1.9.3 de Ruby MRI . JRuby 1.0 admitía Ruby 1.8.6, y JRuby 1.4.0 actualizó esa compatibilidad con Ruby 1.8.7. JRuby 1.6.0 agregó compatibilidad simultánea con Ruby 1.9.2, y JRuby 1.7.0 convirtió a Ruby 1.9.3 en el modo de ejecución predeterminado (la compatibilidad con Ruby 1.8.7 está disponible mediante una bandera de línea de comandos). JRuby 9.0.0.0 agregó compatibilidad con Ruby 2.2.

La versión actual de JRuby (9.4.3.0) apunta a Ruby 3.1, aunque algunas características de 3.1 todavía están en desarrollo. [10]

Ruby on Rails

JRuby ha sido capaz de ejecutar el framework web Ruby on Rails desde la versión 0.9 (mayo de 2006), [11] [12] con la capacidad de ejecutar RubyGems y WEBrick . Desde que Sun contrató a los dos desarrolladores principales, la compatibilidad y velocidad de Rails han mejorado enormemente. La versión 1.0 de JRuby pasó con éxito casi todos los casos de prueba de Rails. [13] Desde entonces, los desarrolladores han comenzado a utilizar JRuby para aplicaciones Rails en entornos de producción. [14]

Colaboración entre múltiples máquinas virtuales

El 27 de febrero de 2008, Sun Microsystems y la Universidad de Tokio anunciaron un proyecto de investigación conjunto para implementar una máquina virtual capaz de ejecutar más de una aplicación Ruby o JRuby en un intérprete. [15]

Invocación dinámica en máquinas virtuales Java

JSR 292 ( Compatibilidad con lenguajes tipados dinámicamente en la plataforma JavaTM ) [16] propone:

El proyecto de código abierto Multi Language Virtual Machine de Sun tiene como objetivo crear un prototipo de este JSR. [17] El primer prototipo funcional, desarrollado como un parche en OpenJDK , se anunció y se puso a disposición a fines de agosto de 2008. [18] [19]

El equipo de JRuby ha implementado la invocación dinámica en su código base. La invocación dinámica se entregó inicialmente con la versión 1.1.5 en una forma primitiva. [20] La versión 1.7.0 la habilitó de manera predeterminada en las compilaciones de Java 8. [21]

Historial de versiones

Esta tabla presenta solo las versiones que representan avances significativos en la historia de JRuby, además de las versiones que principalmente corrigieron errores y mejoraron el rendimiento. Las mejoras de rendimiento tampoco se muestran en la tabla siguiente, ya que cada versión generalmente ha traído consigo dichas mejoras.

Diseño

Desde principios de 2006, el equipo central actual de JRuby se ha esforzado por hacer que JRuby fuera más que un simple port de C, para ofrecer un mejor rendimiento y facilitar la compilación final a bytecode de Java . Para lograr este fin, el equipo se fijó un objetivo ambicioso: poder ejecutar Ruby on Rails sin modificaciones utilizando JRuby. En el proceso de alcanzar este objetivo, el conjunto de pruebas de JRuby se expandió hasta tal punto que el equipo ganó confianza en la "corrección" de JRuby. Como resultado, hacia finales de 2006 y principios de 2007, comenzaron a realizar rediseños y refactorizaciones mucho más complicados de los subsistemas centrales de JRuby.

JRuby está diseñado para funcionar como una máquina virtual de modo mixto para Ruby, donde el código puede ser interpretado directamente, compilado justo a tiempo en tiempo de ejecución a bytecode Java, o compilado con anticipación a bytecode Java antes de la ejecución. Hasta octubre de 2007, solo el modo interpretado admitía todas las construcciones de Ruby, pero desde la versión 1.1 está disponible un compilador AOT/JIT completo. [22] El diseño del compilador permite que el código interpretado y compilado se ejecuten en paralelo, así como la descompilación para reoptimizar y generar el bytecode generado como archivos de clase Java.

Soporte de marcos

JRuby tiene soporte integrado para Rails, RSpec, Rake y RubyGems. Incorpora un subsistema FFI para permitir el uso de bibliotecas C incluidas como gemas. También permite ejecutar Interactive Ruby Shell (irb) como lo hace Ruby MRI.

El Netbeans Ruby Pack , disponible en NetBeans 6, permite el desarrollo de IDE con Ruby y JRuby, así como Ruby on Rails para las dos implementaciones de Ruby. [42] [43] Ya no está incluido en NetBeans 7.0 y versiones posteriores.

Programación

Ruby se encuentra con Java

JRuby es similar al intérprete estándar de Ruby, excepto que está escrito en Java . JRuby presenta algunos de los mismos conceptos, incluida la programación orientada a objetos y el tipado dinámico de Ruby. La diferencia clave es que JRuby está estrechamente integrado con Java y se puede llamar directamente desde programas Java. [44] Java tiene una base importante en el desarrollo de aplicaciones web.

JRuby llamando a Java

Una característica poderosa de JRuby es su capacidad de invocar las clases de la plataforma Java . Para ello, primero se debe cargar el soporte de Java de JRuby, llamando a "require 'java'". El siguiente ejemplo crea un JFrame de Java con un JLabel:

requiere 'java' frame = javax . swing . JFrame . new frame . getContentPane . add javax . swing . JLabel . new ( '¡Hola, mundo!' ) frame . setDefaultCloseOperation javax . swing . JFrame :: EXIT_ON_CLOSE frame . pack frame . set_visible true     

JRuby también permite al usuario llamar al código Java utilizando el método de denominación de guión bajo más parecido al de Ruby y hacer referencia a las propiedades de JavaBean como atributos: [ dudosodiscutir ]

frame . content_pane . agregar etiqueta frame . visible = true   

Llamar a JRuby desde Java

JRuby se puede llamar con la misma facilidad desde Java, utilizando el marco de trabajo JSR 223 [45] Scripting para Java 6 o Apache Bean Scripting .

//Ejemplo que utiliza JSR 233 Scripting para Java 6 ScriptEngineManager mgr = new ScriptEngineManager (); ScriptEngine rbEngine = mgr . getEngineByExtension ( "rb" ); try { rbEngine . eval ( "puts 'Hello World!'" ); } catch ( ScriptException ex ) { ex . printStackTrace (); }              

Actuación

Según algunos puntos de referencia, JRuby es más rápido que las alternativas. Dado que las implementaciones varían en la cantidad de código que se carga antes de la ejecución, los diferentes métodos de medición de la velocidad pueden dar lugar a interpretaciones sesgadas de las ventajas de rendimiento. El tiempo que tarda una máquina virtual Java en cargarse suele excluirse de los tiempos de ejecución al calcular los puntos de referencia.

JRuby tiene la importante ventaja arquitectónica de poder aprovechar los subprocesos de JVM sin estar restringido por un bloqueo de intérprete global (de manera similar a Rubinius ), logrando así un paralelismo total dentro de un proceso, algo que Ruby MRI no puede lograr a pesar de aprovechar los subprocesos del sistema operativo.

En una aplicación de servidor web Mongrel real probada en 2007, el rendimiento de JRuby es mejor que el de Ruby MRI 1.8, después de haber creado una instancia de la máquina virtual Java. [46]

En una evaluación comparativa de 2007 sobre implementaciones de Ruby, JRuby fue más rápido que Ruby MRI 1.8 en algunas pruebas, pero YARV superó a ambos. [47]

A partir de abril de 2014, en The Computer Language Benchmarks Game , JRuby 1.7.4 generalmente tiene el mismo rendimiento que Ruby MRI 2.1.0, pero utiliza más memoria. [48] [49]

Véase también

Referencias

  1. ^ "Lanzamientos · jruby/jruby". github.com . Consultado el 26 de diciembre de 2023 .
  2. ^ Jacki (7 de septiembre de 2006). "Sun da la bienvenida a los desarrolladores de JRuby". En el registro. Archivado desde el original el 29 de agosto de 2012. Consultado el 7 de noviembre de 2013 .
  3. ^ Ola Bini (2007). "ThoughtWorks". En el registro.
  4. ^ ab "El equipo JRuby de Sun se embarca hacia el astillero". PCWorld . 28 de julio de 2009 . Consultado el 2 de junio de 2012 .[ enlace muerto permanente ]
  5. ^ ab "Red Hat atrae a un par de potencias en JRuby". The Register . 23 de mayo de 2012 . Consultado el 2 de junio de 2012 .
  6. ^ ab Cangiano, Antonio (12 de marzo de 2007). "The Great Ruby Shootout" . Consultado el 1 de febrero de 2008 .
  7. ^ Nutter, Charles (25 de abril de 2008). «JRuby 1.1.1 en RedHat Fedora» . Consultado el 26 de abril de 2008 .
  8. ^ "jruby". fedoraproject.org . Consultado el 26 de abril de 2008 .[ enlace muerto permanente ]
  9. ^ Nutter, Charles (28 de julio de 2009). "El futuro de JRuby en Engine Yard". Archivado desde el original el 31 de julio de 2009. Consultado el 28 de julio de 2009 .
  10. ^ "Características inacabadas de Ruby 3.1". Equipo JRuby . Consultado el 13 de junio de 2023 .
  11. ^ ab "Rails Support". Equipo JRuby. Archivado desde el original el 3 de marzo de 2008. Consultado el 17 de febrero de 2008 .
  12. ^ Nutter, Charles (24 de agosto de 2008). "De cero a producción en 15 minutos" . Consultado el 27 de agosto de 2008 .
  13. ^ El 98,6 % de los 2807 casos de prueba específicos de Rails se ejecutan correctamente; consulte JRuby 0.9.8 publicado Archivado el 22 de mayo de 2015 en Wayback Machine
  14. ^ "Historias de éxito". Wiki de JRuby en GitHub. 5 de enero de 2011. Consultado el 16 de marzo de 2011 .
  15. ^ "La Universidad de Tokio y Sun Microsystems comienzan proyectos de investigación conjuntos sobre informática de alto rendimiento y lenguajes de programación basados ​​en la Web". Sun Microsystems . 27 de febrero de 2008 . Consultado el 28 de febrero de 2008 .
  16. ^ ver JSR 292
  17. ^ "Subproyectos e investigaciones". Sun Microsystems . 2007 . Consultado el 6 de febrero de 2008 .
  18. ^ Rose, John (26 de agosto de 2008). "¡Feliz Día Internacional de la Invocación Dinámica!" . Consultado el 3 de septiembre de 2008 .
  19. ^ Lorimer, RJ (1 de septiembre de 2008). "Dynamic Invocation Runs on OpenJDK" (La invocación dinámica se ejecuta en OpenJDK). infoq.com . Consultado el 3 de septiembre de 2008 .
  20. ^ Nutter, Charles (11 de septiembre de 2008). "A First Taste of InvokeDynamic" (Una primera muestra de InvokeDynamic) . Consultado el 13 de septiembre de 2008. ¡Logré conectar InvokeDynamic directamente al proceso de envío de JRuby! ¡Qué emoción! El código ya está en el trunk de JRuby y se enviará con JRuby 1.1.5 (aunque obviamente se deshabilitará en las JVM sin InvokeDynamic).
  21. ^ ab "Lanzamiento de JRuby 1.7.0". Equipo JRuby. 22 de octubre de 2012. Archivado desde el original el 25 de octubre de 2012. Consultado el 23 de octubre de 2011 .
  22. ^ ab Nutter, Charles (27 de septiembre de 2007). "El compilador está completo" . Consultado el 12 de octubre de 2007 .
  23. ^ Enebo, Tom (28 de agosto de 2008). «Lanzamiento de JRuby 1.1.4» . Consultado el 25 de febrero de 2009 .[ enlace muerto permanente ]
  24. ^ Enebo, Tom (16 de marzo de 2009). «Lanzamiento de JRuby 1.2.0». Equipo JRuby. Archivado desde el original el 19 de marzo de 2009. Consultado el 17 de marzo de 2009 .
  25. ^ Enebo, Tom (3 de junio de 2009). «Lanzamiento de JRuby 1.3.0». Equipo JRuby. Archivado desde el original el 12 de junio de 2009. Consultado el 3 de junio de 2009 .
  26. ^ "Ya está disponible JRuby 1.4.0". Equipo JRuby. 2 de noviembre de 2009. Consultado el 3 de noviembre de 2009 .
  27. ^ "Ya está disponible JRuby 1.4.0". adtmag.com. 10 de noviembre de 2009. Archivado desde el original el 15 de noviembre de 2009. Consultado el 21 de noviembre de 2009 .
  28. ^ "Ya está disponible JRuby 1.5.0". Equipo JRuby. 12 de mayo de 2010. Archivado desde el original el 16 de mayo de 2010. Consultado el 12 de mayo de 2010 .
  29. ^ "Ya está disponible JRuby 1.6.0". Equipo JRuby. 15 de marzo de 2011. Consultado el 15 de marzo de 2011 .
  30. ^ "Ya está disponible JRuby 1.7.4". Equipo JRuby. 16 de mayo de 2013. Consultado el 19 de mayo de 2013 .
  31. ^ "Ya se lanzó JRuby 9.0.0.0". Equipo JRuby. 22 de julio de 2015. Archivado desde el original el 24 de julio de 2015. Consultado el 25 de julio de 2015 .
  32. ^ "Lanzamiento de JRuby 9.1.7.0 — JRuby.org". jruby.org . Archivado desde el original el 16 de enero de 2017 . Consultado el 13 de enero de 2017 .
  33. ^ "Ya está disponible JRuby 9.2.0.0". Archivado desde el original el 27 de mayo de 2018. Consultado el 27 de mayo de 2018 .
  34. ^ "Ya está disponible JRuby 9.2.9.0" . Consultado el 5 de noviembre de 2019 .
  35. ^ "Ya está disponible JRuby 9.3.2.0" . Consultado el 11 de enero de 2022 .
  36. ^ "Ya está disponible JRuby 9.3.3.0" . Consultado el 19 de enero de 2022 .
  37. ^ "Ya está disponible JRuby 9.3.4.0" . Consultado el 23 de marzo de 2022 .
  38. ^ "Ya está disponible JRuby 9.4.0.0" . Consultado el 1 de diciembre de 2022 .
  39. ^ "Ya está disponible JRuby 9.4.1.0" . Consultado el 15 de febrero de 2023 .
  40. ^ "Ya está disponible JRuby 9.4.2.0" . Consultado el 13 de junio de 2023 .
  41. ^ "Ya está disponible JRuby 9.4.3.0" . Consultado el 13 de junio de 2023 .
  42. ^ "Soporte para Ruby y JRuby disponible en NetBeans IDE". netbeans.org. 6 de marzo de 2007. Archivado desde el original el 19 de julio de 2011. Consultado el 4 de julio de 2009 .
  43. ^ "Ruby ilumina la plataforma NetBeans". infoworld.com. 1 de marzo de 2007. Consultado el 4 de julio de 2008 .
  44. ^ Fox, Joshua (17 de julio de 2006). «Ruby para el mundo Java». JavaWorld . Consultado el 26 de julio de 2020 .
  45. ^ JSR 223: Solicitud de especificación de secuencias de comandos para la plataforma Java
  46. ^ Sieger, Nick (25 de octubre de 2007). «JRuby on Rails: Fast Enough» (JRuby on Rails: lo suficientemente rápido) . Consultado el 28 de octubre de 2007 .
  47. ^ Cangiano, Antonio (3 de diciembre de 2007). "The Great Ruby Shootout" . Consultado el 2 de febrero de 2014 .
  48. ^ "JRuby comparado con Ruby 1.9, Computer Language Benchmarks Game (1)". Archivado desde el original el 23 de enero de 2015 . Consultado el 2 de febrero de 2014 .
  49. ^ "JRuby comparado con Ruby 1.9, Computer Language Benchmarks Game (2)". Archivado desde el original el 23 de julio de 2014 . Consultado el 2 de febrero de 2014 .

Lectura adicional

Enlaces externos