Ruby es un lenguaje de programación de propósito general diseñado con énfasis en la productividad y la simplicidad. En Ruby, todo es un objeto , incluidos los tipos de datos primitivos . El desarrollo del lenguaje comenzó a mediados de la década de 1990 de la mano de Yukihiro "Matz" Matsumoto en Japón.
Ruby es un lenguaje interpretado , de alto nivel y de tipado dinámico ; su intérprete utiliza recolección de basura y compilación justo a tiempo . Admite múltiples paradigmas de programación, incluyendo programación procedimental , orientada a objetos y funcional . Según su creador, Ruby recibió influencias de Perl , Smalltalk , Eiffel , Ada , BASIC y Lisp . [ 8 ] [ 2 ]
Historia
Concepto inicial
Según Matsumoto, Ruby fue concebido en 1993. En una publicación de 1999 en la lista de correo Ruby-Talk, compartió algunas de sus primeras ideas sobre el lenguaje: [ 9 ]
Estaba hablando con un colega sobre la posibilidad de un lenguaje de scripting orientado a objetos. Conocía Perl (Perl4, no Perl5), pero no me gustaba mucho porque tenía pinta de lenguaje de juguete (y aún la tiene). El lenguaje orientado a objetos parecía muy prometedor. En aquel entonces conocía Python , pero no me convencía porque no me parecía un verdadero lenguaje orientado a objetos ; las características de la programación orientada a objetos parecían un añadido. Como apasionado de los lenguajes y fanático de la programación orientada a objetos desde hace 15 años, deseaba un lenguaje de scripting genuinamente orientado a objetos y fácil de usar. Busqué, pero no encontré ninguno. Así que decidí crearlo.
Matsumoto describió el diseño de Ruby como similar a un lenguaje Lisp simple en su núcleo, con un sistema de objetos como el de Smalltalk, bloques inspirados en funciones de orden superior y una utilidad práctica como la de Perl. [ 10 ]
El nombre "Ruby" surgió durante una sesión de chat en línea entre Matsumoto y Keiju Ishitsuka el 24 de febrero de 1993, antes de que se escribiera ningún código. [ 11 ] Inicialmente se propusieron dos nombres: "Coral" y "Ruby". Matsumoto eligió este último en un correo electrónico posterior a Ishitsuka. [ 12 ] También señaló que un factor que influyó en la elección del nombre fue que la piedra de nacimiento de un colega era el rubí . [ 13 ] [ 14 ]
Lanzamientos anticipados
El primer lanzamiento público de Ruby 0.95 se anunció en grupos de noticias nacionales japoneses el 21 de diciembre de 1995. [ 15 ] [ 16 ] Posteriormente, se lanzaron tres versiones más de Ruby en dos días. [ 11 ] El lanzamiento coincidió con el lanzamiento de la lista de correo ruby-list en idioma japonés , que fue la primera lista de correo para el nuevo lenguaje.
Ya estaban presentes en esta etapa de desarrollo muchas de las características familiares en versiones posteriores de Ruby, incluyendo el diseño orientado a objetos , clases con herencia, mixins , iteradores , cierres , manejo de excepciones y recolección de basura . [ 17 ]
Tras el lanzamiento de Ruby 0.95 en 1995, se publicaron varias versiones estables de Ruby en estos años. [ 11 ]
En 1997, se publicó el primer artículo sobre Ruby en la web. Ese mismo año, netlab.jp contrató a Matsumoto para trabajar en Ruby como desarrollador a tiempo completo. [ 11 ]
En 1998, Matsumoto lanzó el Archivo de Aplicaciones Ruby, junto con una página web sencilla en inglés para Ruby. [ 11 ]
En 1999, comenzó la primera lista de correo en inglés, Ruby-Talk , lo que señaló un creciente interés en el idioma fuera de Japón. [ 18 ] En este mismo año, Matsumoto y Keiju Ishitsuka escribieron el primer libro sobre Ruby, El lenguaje de secuencias de comandos orientado a objetos Ruby (オブジェクト指向スクリプト言語 Ruby), que se publicó en Japón en octubre de 1999. A principios de la década de 2000 le seguirían alrededor de 20 Libros sobre Ruby publicados en japonés. [ 11 ]
Para el año 2000, Ruby era más popular que Python en Japón. [ 19 ] En septiembre de 2000, se publicó el primer libro en inglés, Programming Ruby , que posteriormente se distribuyó gratuitamente al público, lo que contribuyó a ampliar aún más la adopción de Ruby entre los angloparlantes. A principios de 2002, la lista de correo ruby-talk en inglés recibía más mensajes que la lista ruby-list en japonés , lo que demostraba la creciente popularidad de Ruby en el mundo no japonés.
Rubí 1.8 y 1.9
Ruby 1.8 se lanzó inicialmente en agosto de 2003, se mantuvo estable durante mucho tiempo y se retiró en junio de 2013. [ 20 ] Aunque está obsoleto, todavía existe código basado en él. Ruby 1.8 solo es parcialmente compatible con Ruby 1.9.
Ruby 1.8 ha sido objeto de varios estándares industriales. Las especificaciones del lenguaje Ruby fueron desarrolladas por el Centro de Promoción de Estándares Abiertos de la Agencia de Promoción de Tecnologías de la Información (una agencia gubernamental japonesa ) para su presentación al Comité Japonés de Estándares Industriales (JISC) y posteriormente a la Organización Internacional de Normalización (ISO). Fue aceptado como estándar industrial japonés (JIS X 3017) en 2011 [ 21 ] y como estándar internacional (ISO/IEC 30170) en 2012. [ 22 ] [ 23 ]

Alrededor de 2005, el interés por el lenguaje Ruby aumentó a la par que Ruby on Rails , un framework web escrito en Ruby. A Rails se le suele atribuir el aumento de la popularidad de Ruby. [ 24 ]
A partir de Ruby 1.9.3, publicado el 31 de octubre de 2011, [ 25 ] Ruby pasó de tener una doble licencia bajo la Licencia Ruby y la GPL a tener una doble licencia bajo la Licencia Ruby y la licencia BSD de dos cláusulas. [ 26 ] La adopción de la versión 1.9 se vio ralentizada por los cambios de la versión 1.8 que requirieron que se reescribieran muchas gemas populares de terceros .
Rubí 2
Ruby 2.0 fue diseñado para ser totalmente compatible con versiones anteriores de Ruby 1.9.3. En el momento del lanzamiento oficial de la versión 2.0.0 el 24 de febrero de 2013, solo se conocían cinco incompatibilidades. [ 27 ]
A partir de la versión 2.1.0, la política de versionado de Ruby cambió para ser más similar al versionado semántico , aunque difiere ligeramente en que los incrementos de versión menores pueden ser incompatibles con la API. [ 28 ]
Ruby 2.2.0 incluye mejoras de velocidad, correcciones de errores y actualizaciones de bibliotecas, y elimina algunas API obsoletas. Lo más notable es que Ruby 2.2.0 introduce cambios en el manejo de memoria : un recolector de basura incremental, soporte para la recolección de basura de símbolos y la opción de compilar directamente contra jemalloc. También contiene soporte experimental para usar vfork (2) con system() y spawn(), y agregó soporte para la especificación Unicode 7.0. Desde la versión 2.2.1, [ 29 ] el rendimiento de Ruby MRI en PowerPC64 mejoró. [ 30 ] [ 31 ] [ 32 ] Las características que se volvieron obsoletas o se eliminaron incluyen callcc, la biblioteca DL, Digest::HMAC, lib/rational.rb, lib/complex.rb, GServer, Logger::Application, así como varias funciones de la API de C. [ 33 ]
Ruby 2.3.0 incluye muchas mejoras de rendimiento, actualizaciones y correcciones de errores, incluyendo cambios en Proc#call, Socket y el uso de palabras clave de excepción en IO, manejo de Thread#name, conexiones Net::FTP pasivas predeterminadas y la eliminación de Rake de stdlib. [ 34 ] Otros cambios notables incluyen:
- La capacidad de marcar todos los literales de cadena como congelados por defecto, con el consiguiente gran aumento del rendimiento en las operaciones con cadenas. [ 35 ]
- Comparación de hashes para permitir la comprobación directa de pares clave/valor en lugar de solo de claves.
- Un nuevo operador de navegación segura
&.que puede facilitar el manejo nulo (por ejemplo, en lugar de , podemos usar ).ifobj&&obj.foo&&obj.foo.barif obj&.foo&.bar - La gema did_you_mean ahora viene incluida por defecto y es necesaria al iniciar para sugerir automáticamente coincidencias de nombres similares en caso de NameError o NoMethodError .
- Hash#dig y Array#dig para extraer fácilmente valores anidados profundamente (por ejemplo, dado , el valor Foo Baz ahora se puede recuperar mediante ).
profile={social:{wikipedia:{name:'Foo Baz'}}}profile.dig(:social, :wikipedia, :name) .grep_v(regexp)que coincidirá con todos los ejemplos negativos de una expresión regular dada, además de otras nuevas características.
Ruby 2.4.0 incluye mejoras de rendimiento en la tabla hash, Array#max, Array#min y el acceso a variables de instancia. [ 36 ] Otros cambios notables incluyen:
- Binding#irb: Inicia una sesión REPL similar a binding.pry
- Unificar Fixnum y Bignum en la clase Integer .
- La cadena admite asignaciones de mayúsculas y minúsculas Unicode, no solo ASCII.
- Un nuevo método, Regexp#match?, que es una versión booleana más rápida de Regexp#match.
- La detección de interbloqueos de hilos ahora muestra los hilos con su rastreo de pila y dependencia.
Algunos cambios notables en Ruby 2.5.0 incluyen que las sentencias rescue y ensure usan automáticamente un bloque do-end circundante (menos necesidad de bloques begin-end adicionales ), encadenamiento de métodos con yield_self , soporte para la medición de cobertura de ramas y cobertura de métodos, y transformaciones de Hash más fáciles con Hash#slice y Hash#transform_keys. Además de eso, vienen muchas mejoras de rendimiento, como paso de bloques más rápido (3 veces más rápido), Mutex más rápidos, plantillas ERB más rápidas y mejoras en algunos métodos de concatenación.
Algunos cambios destacables en Ruby 2.6.0 incluyen un compilador justo a tiempo (JIT) experimental y RubyVM::AbstractSyntaxTree (experimental).
Algunos cambios destacables en Ruby 2.7.0 incluyen la coincidencia de patrones (experimental), mejoras en la consola interactiva (REPL), un recolector de basura de compactación y la separación de argumentos posicionales y de palabra clave.
Rubí 3
Ruby 3.0.0 se lanzó el día de Navidad de 2020. [ 37 ] Se le conoce como Ruby 3x3, lo que significa que los programas se ejecutarían tres veces más rápido en Ruby 3.0 en comparación con Ruby 2.0. [ 38 ] y algunos ya se habían implementado en versiones intermedias en el camino de 2 a 3. Para lograr 3x3, Ruby 3 viene con MJIT, y más tarde YJIT, compiladores Just-In-Time, para hacer que los programas sean más rápidos, aunque se describen como experimentales y permanecen deshabilitados por defecto (habilitados por indicadores en tiempo de ejecución).
Otro objetivo de Ruby 3.0 es mejorar la concurrencia , y dos utilidades más, Fibre Scheduler y la experimental Ractor, facilitan este objetivo. [ 37 ] Ractor es ligero y seguro para subprocesos, ya que se logra mediante el intercambio de mensajes en lugar de objetos compartidos.
Ruby 3.0 introduce el lenguaje RBS para describir los tipos de programas Ruby para análisis estático . [ 37 ] Está separado de los programas Ruby generales.
También hay algunas mejoras de sintaxis y cambios en la biblioteca en Ruby 3.0. [ 37 ]
Ruby 3.1 se lanzó el 25 de diciembre de 2021. [ 39 ] Incluye YJIT, un nuevo compilador Just-In-Time experimental desarrollado por Shopify para mejorar el rendimiento de las aplicaciones empresariales reales. También incluye un nuevo depurador . Esta versión presenta algunas mejoras de sintaxis y otras optimizaciones. Las bibliotecas de red para FTP , SMTP , IMAP y POP se han trasladado de las gemas predeterminadas a las gemas incluidas. [ 40 ]
Ruby 3.2 se lanzó el 25 de diciembre de 2022. [ 41 ] Ofrece soporte para ejecutarse dentro de un entorno WebAssembly a través de una interfaz WASI. Las expresiones regulares también reciben algunas mejoras, incluyendo un algoritmo de coincidencia memorizado más rápido para protegerse contra ciertos ataques ReDoS , y tiempos de espera configurables para la coincidencia de expresiones regulares. Esta versión también incluye características adicionales de depuración y sintaxis, que incluyen sugerencias de sintaxis y resaltado de errores. El compilador MJIT se ha reimplementado como un módulo de biblioteca estándar, mientras que YJIT, un compilador JIT basado en Rust , ahora admite más arquitecturas en Linux.
Ruby 3.3 se lanzó el 25 de diciembre de 2023. [ 42 ] Ruby 3.3 introduce mejoras significativas y optimiza el rendimiento del lenguaje. Entre sus características clave se incluyen la introducción del analizador Prism para un análisis portátil y mantenible, la adición del compilador JIT RJIT, escrito completamente en Ruby, y mejoras importantes en el rendimiento del compilador YJIT. Además, las mejoras en el uso de la memoria, la introducción de un planificador de hilos M:N y las actualizaciones de la biblioteca estándar contribuyen a un ecosistema Ruby más eficiente y amigable para los desarrolladores.
Ruby 3.4 se lanzó el 25 de diciembre de 2024. [ 43 ] Ruby 3.4 agrega itreferencia de parámetros de bloque, cambia Prism como analizador sintáctico predeterminado, agrega soporte para Happy Eyeballs Versión 2 a la biblioteca de sockets, mejora YJIT, agrega un recolector de basura modular y demás. [ 44 ]
Rubí 4
Ruby 4.0 se lanzó el 25 de diciembre de 2025. [ 45 ] Agrega ZJIT experimental, un JIT escrito en Rust, y "Ruby Box" experimental, una característica para proporcionar separación de definiciones. Se decidió aumentar el número de versión a 4.0 en lugar de 3.5 para celebrar el 30.º aniversario de Ruby. [ 46 ]
Semántica y filosofía
Matsumoto afirmó que Ruby está diseñado para la productividad y la diversión del programador, siguiendo los principios del buen diseño de interfaz de usuario . [ 47 ] En una charla técnica de Google en 2008, dijo: "Espero que Ruby ayude a todos los programadores del mundo a ser productivos, a disfrutar de la programación y a ser felices. Ese es el propósito principal del lenguaje Ruby". [ 48 ] Subraya que el diseño de sistemas debe enfatizar las necesidades humanas, en lugar de las informáticas: [ 49 ]
A menudo, la gente, especialmente los ingenieros informáticos, se centra en las máquinas. Piensan: "Haciendo esto, la máquina funcionará más rápido. Haciendo esto, la máquina funcionará de forma más eficaz. Haciendo esto, la máquina hará algo, algo, algo". Se centran en las máquinas. Pero, en realidad, debemos centrarnos en los humanos, en cómo les importa a los humanos programar o manejar las aplicaciones de las máquinas. Nosotros somos los amos. Ellos son los esclavos.
Matsumoto ha declarado que su principal objetivo de diseño era crear un lenguaje que él mismo disfrutara usando, minimizando el trabajo del programador y la posible confusión. Ha afirmado no haber aplicado el principio de mínima sorpresa (POLA) al diseño de Ruby; [ 49 ] en una discusión de mayo de 2005 en el grupo de noticias comp.lang.ruby, Matsumoto intentó desvincular Ruby del POLA, explicando que, dado que cualquier decisión de diseño resultará sorprendente para alguien, utiliza un criterio personal para evaluar la sorpresa. Si ese criterio personal se mantiene constante, habrá pocas sorpresas para quienes estén familiarizados con él. [ 50 ]
Matsumoto lo definió de esta manera en una entrevista: [ 49 ]
Cada persona tiene una formación individual. Alguien puede venir de Python, otro de Perl, y pueden sorprenderse por diferentes aspectos del lenguaje. Entonces se acercan a mí y me dicen: "Me sorprendió esta característica del lenguaje, así que Ruby viola el principio de mínima sorpresa". Espera. Espera. El principio de mínima sorpresa no es solo para ti. El principio de mínima sorpresa significa el principio de mínima sorpresa para mí . Y significa el principio de mínima sorpresa después de aprender Ruby muy bien. Por ejemplo, yo era programador de C++ antes de empezar a diseñar Ruby. Programé exclusivamente en C++ durante dos o tres años. Y después de dos años programando en C++, todavía me sorprende.
Ruby es orientado a objetos : cada valor es un objeto, incluyendo clases e instancias de tipos que muchos otros lenguajes designan como primitivos (como enteros , booleanos y " null "). Dado que todo en Ruby es un objeto, todo en Ruby tiene ciertas capacidades integradas llamadas métodos. Cada función es un método y los métodos siempre se llaman sobre un objeto. Los métodos definidos en el ámbito de nivel superior se convierten en métodos de la clase Object. Dado que esta clase es ancestro de todas las demás clases, dichos métodos se pueden llamar sobre cualquier objeto. También son visibles en todos los ámbitos, sirviendo efectivamente como procedimientos "globales". Ruby admite herencia con despacho dinámico , mixins y métodos singleton (que pertenecen a, y se definen para, una sola instancia en lugar de estar definidos en la clase). Aunque Ruby no admite herencia múltiple , las clases pueden importar módulos como mixins.
Ruby se ha descrito como un lenguaje de programación multiparadigma : permite la programación procedimental (definir funciones/variables fuera de las clases las convierte en parte del objeto raíz, 'self'), con orientación a objetos (todo es un objeto) o programación funcional (tiene funciones anónimas , cierres y continuaciones ; todas las sentencias tienen valores y las funciones devuelven la última evaluación). Ofrece soporte para introspección , programación reflexiva , metaprogramación e hilos basados en intérprete . Ruby cuenta con tipado dinámico y admite polimorfismo paramétrico .
Según las FAQ de Ruby, la sintaxis es similar a la de Perl y la semántica es similar a la de Smalltalk , pero la filosofía de diseño difiere enormemente de la de Python . [ 51 ]
Características
- Completamente orientado a objetos con herencia , mixins y metaclases [ 52 ]
- Tipografía dinámica y tipado dinámico
- Todo es una expresión (incluso las sentencias ) y todo se ejecuta de forma imperativa (incluso las declaraciones ).
- Sintaxis concisa y flexible [ 53 ] que minimiza el ruido sintáctico y sirve como base para lenguajes específicos de dominio [ 54 ].
- Reflexión dinámica y alteración de objetos para facilitar la metaprogramación [ 55 ]
- Cierres léxicos , iteradores y generadores , con una sintaxis de bloques [ 56 ]
- Notación literal para matrices , hashes , expresiones regulares y símbolos.
- Incrustar código en cadenas ( interpolación )
- argumentos predeterminados
- Cuatro niveles de alcance de variables ( global , de clase , de instancia y local ) indicados por símbolos o su ausencia.
- Recogida de basura
- Continuaciones de primera clase
- Reglas de coerción booleana estricta (todo es verdadero excepto
falseynil) - Manejo de excepciones
- Sobrecarga del operador [ 57 ]
- Soporte integrado para números racionales , números complejos y aritmética de precisión arbitraria.
- Comportamiento de despacho personalizado (a través de
method_missingyconst_missing) - Hilos nativos y fibras cooperativas (las fibras son una característica de 1.9/ YARV )
- Compatibilidad con Unicode y múltiples codificaciones de caracteres .
- API de complementos nativos en C
- Interactive Ruby Shell, un intérprete de línea de comandos interactivo que se puede usar para probar código rápidamente ( REPL ).
- Gestión centralizada de paquetes mediante RubyGems
- Implementado en todas las plataformas principales
- Amplia biblioteca estándar, que incluye módulos para YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , curses , zlib y Tk [ 58 ]
- Compilación justo a tiempo
Sintaxis
La sintaxis de Ruby es muy similar a la de Perl y Python . Las definiciones de clases y métodos se señalan con palabras clave, mientras que los bloques de código se pueden definir con palabras clave o llaves. A diferencia de Perl, las variables no se anteponen obligatoriamente con un símbolo . Cuando se usa, el símbolo cambia la semántica del alcance de la variable. A efectos prácticos, no hay distinción entre expresiones y sentencias . [ 59 ] [ 60 ] Los saltos de línea son significativos y se consideran el final de una sentencia; se puede usar un punto y coma de forma equivalente. A diferencia de Python, la sangría no es significativa.
Una de las diferencias con Python y Perl es que Ruby mantiene todas sus variables de instancia completamente privadas para la clase y solo las expone a través de métodos de acceso ( attr_writer, attr_reader, etc.). A diferencia de los métodos "getter" y "setter" de otros lenguajes como C++ o Java , los métodos de acceso en Ruby se pueden crear con una sola línea de código mediante metaprogramación ; sin embargo, también se pueden crear de la forma tradicional de C++ y Java. Como la invocación de estos métodos no requiere el uso de paréntesis, es trivial convertir una variable de instancia en una función completa, sin modificar una sola línea de código de llamada ni tener que realizar ninguna refactorización, logrando una funcionalidad similar a la de los miembros de propiedad de C# y VB.NET .
Los descriptores de propiedades de Python son similares, pero implican una desventaja en el proceso de desarrollo. Si en Python se empieza utilizando una variable de instancia pública y posteriormente se modifica la implementación para usar una variable de instancia privada expuesta mediante un descriptor de propiedad, puede ser necesario ajustar el código interno de la clase para usar la variable privada en lugar de la pública. El diseño de Ruby obliga a que todas las variables de instancia sean privadas, pero también proporciona una forma sencilla de declarar setmétodos get. Esto concuerda con la idea de que en Ruby nunca se accede directamente a los miembros internos de una clase desde fuera de ella; en cambio, se envía un mensaje a la clase y se recibe una respuesta.
Implementaciones
Intérprete de Ruby de Matz
El intérprete original de Ruby suele denominarse Intérprete de Ruby de Matz o MRI. Esta implementación está escrita en C y utiliza su propia máquina virtual específica para Ruby .
La implementación estandarizada y retirada de Ruby 1.8 fue escrita en C , como un lenguaje interpretado de una sola pasada . [ 20 ]
A partir de Ruby 1.9, y continuando con Ruby 2.x y versiones posteriores, el intérprete oficial de Ruby ha sido YARV ("Yet Another Ruby VM"), y esta implementación ha reemplazado a la máquina virtual más lenta utilizada en versiones anteriores de MRI.
Implementaciones alternativas
A partir de 2026Existen varias implementaciones alternativas de Ruby, entre ellas JRuby , Rubinius y mruby . Cada una adopta un enfoque diferente: JRuby y Rubinius ofrecen compilación justo a tiempo , mientras que mruby también ofrece compilación anticipada .
Ruby tiene tres implementaciones alternativas principales:
- JRuby es una implementación mixta de Java y Ruby que se ejecuta en la máquina virtual de Java . Actualmente, JRuby está diseñado para Ruby 3.4.
- TruffleRuby, una implementación en Java que utiliza el marco de implementación del lenguaje Truffle con GraalVM.
- Rubinius es una máquina virtual de bytecode de C++ que utiliza LLVM para compilar a código máquina en tiempo de ejecución. El compilador de bytecode y la mayoría de las clases principales están escritas en Ruby puro. Rubinius está diseñado para Ruby 2.3.1.
Otras implementaciones de Ruby incluyen:
- MagLev , una implementación de Smalltalk que se ejecuta en la máquina virtual GemStone/S de GemTalk Systems.
- mruby , una implementación diseñada para integrarse en código C, de forma similar a Lua . Está siendo desarrollada por Yukihiro Matsumoto y otros.
- RGSS , o Ruby Game Scripting System, es una implementación propietaria utilizada por la serie de software de creación de juegos de rol RPG Maker para el diseño y la modificación del motor de juego RPG Maker.
- julializer, un transpilador (parcial) de Ruby a Julia . Puede utilizarse para obtener una gran aceleración con respecto a implementaciones como Ruby o JRuby (puede ser útil únicamente para código numérico). [ 61 ]
- Topaz, una implementación de Ruby escrita en Python.
- Opal, un intérprete web que compila Ruby a JavaScript.
Otras implementaciones de Ruby que ya no existen fueron:
- MacRuby , una implementación para Mac OS X basada en el entorno de ejecución Objective-C . Su equivalente para iOS se llama RubyMotion.
- IronRuby es una implementación en el .NET Framework.
- Cardinal, una implementación para la máquina virtual Parrot
- Ruby Enterprise Edition , a menudo abreviado como ree , es una implementación optimizada para manejar proyectos Ruby on Rails a gran escala.
- HotRuby , una implementación en JavaScript y ActionScript del lenguaje de programación Ruby.
La madurez de las implementaciones de Ruby suele medirse por su capacidad para ejecutar el framework Ruby on Rails (Rails), debido a su complejidad y al uso de numerosas características propias de Ruby. El punto en el que una implementación logra este objetivo se conoce como «la singularidad de Rails». La implementación de referencia, JRuby, y Rubinius [ 62 ] son capaces de ejecutar Rails sin modificaciones en un entorno de producción.
Soporte de plataforma
Matsumoto desarrolló originalmente Ruby en Sony NEWS-OS 3.x, basado en 4.3BSD , pero posteriormente migró su trabajo a SunOS 4.x y, finalmente, a Linux . [ 63 ] [ 64 ] Para 1999, Ruby era conocido por funcionar en muchos sistemas operativos diferentes . Las versiones e implementaciones modernas de Ruby están disponibles en todos los principales sistemas operativos de escritorio, móviles y basados en servidores. Ruby también es compatible con varias plataformas de alojamiento en la nube como Jelastic , Heroku , Google Cloud Platform y otras.
Herramientas como RVM y RBEnv facilitan la instalación y el particionamiento de múltiples versiones de Ruby y múltiples "gemsets" en una misma máquina.
Repositorios y bibliotecas
RubyGems es el gestor de paquetes de Ruby. Un paquete de Ruby se llama "gema" y se puede instalar mediante la línea de comandos. La mayoría de las gemas son bibliotecas, aunque existen algunas que son aplicaciones, como los IDE . [ 65 ] Hay más de 100 000 gemas de Ruby alojadas en RubyGems.org . [ 66 ]
Muchas bibliotecas Ruby, tanto nuevas como ya existentes, están alojadas en GitHub , un servicio que ofrece alojamiento de repositorios de control de versiones para Git .
El Ruby Application Archive, que albergaba aplicaciones, documentación y bibliotecas para la programación en Ruby, se mantuvo hasta 2013, cuando su función se transfirió a RubyGems. [ 67 ]
Véase también
Enlaces externos
- Documentación de Ruby
Referencias
- 1 2 3 Cooper, Peter (2009). Beginning Ruby: From Novice to Professional . Beginning from Novice to Professional (2.ª ed.). Berkeley: APress. p. 101. ISBN 978-1-4302-2363-4
En menor medida, Python, LISP, Eiffel, Ada y C++ también han influido en Ruby
. - 1 2 "Razones detrás de Ruby" . Conferencia Ruby 2008. Confreaks (YouTube). 15 de abril de 2013.
- 1 2 3 4 5 6 Bini, Ola (2007). Proyectos prácticos de JRuby on Rails Web 2.0: Llevando Ruby on Rails a Java . Berkeley: APress. pág . 3. ISBN 978-1-59059-881-8
Se basa principalmente en características de Perl, Smalltalk, Python, Lisp, Dylan y CLU
. - ↑ "Documentación de Julia 1.0: Introducción" . Archivado del original el 16 de agosto de 2018. Consultado el 6 de octubre de 2018 .
- ↑ Burks, Tim. "Acerca de Nu™" . Programación de Nu™ . Neon Design Technology, Inc. Archivado del original el 25/12/2018 . Consultado el 21/07/2011 .
- ↑ "Influencias - The Rust Reference" . The Rust Reference . Archivado del original el 26 de enero de 2019. Consultado el 18 de abril de 2023 .
- ↑ Lattner, Chris (2014-06-03). "Página web de Chris Lattner" . Chris Lattner. Archivado del original el 25-12-2018 . Recuperado el 03-06-2014 .
El lenguaje Swift es el producto del esfuerzo incansable de un equipo de expertos en lenguajes, gurús de la documentación, ninjas de la optimización de compiladores y un grupo interno de pruebas increíblemente importante que proporcionó retroalimentación para ayudar a refinar y probar ideas. Por supuesto, también se benefició enormemente de las experiencias ganadas con esfuerzo por muchos otros lenguajes en el campo, tomando ideas de Objective-C, Rust, Haskell, Ruby, Python, C#, CLU y demasiados otros para enumerar.
- ↑ "Acerca de Ruby" . Archivado del original el 9 de octubre de 2014. Consultado el 15 de febrero de 2020 .
- ↑ Shugo Maeda (17 de diciembre de 2002). "Preguntas frecuentes oficiales de Ruby" .
- ↑ Matsumoto, Yukihiro (13 de febrero de 2006). "Re: Características de Lisp de Ruby" . Archivado del original el 27 de octubre de 2018. Recuperado el 15 de febrero de 2020 .
- 1 2 3 4 5 6 "Historia de Ruby" . Archivado del original el 14 de julio de 2011. Recuperado el 14 de agosto de 2008 .
- ↑ " [ FYI: histórico ] El momento decisivo del nombre del lenguaje Ruby. (Re: [ ANN ] ruby 1.8.1)" (Correo electrónico de Hiroshi Sugihara a ruby-talk). Archivado del original el 17 de julio de 2011. Recuperado el 14 de agosto de 2008 .
- ↑ "1.3 ¿Por qué el nombre 'Ruby'?" . Preguntas frecuentes oficiales de Ruby .
- ↑ Yukihiro Matsumoto (11 de junio de 1999). "Re: ¿el nombre de Ruby?" . Ruby-Talk (Lista de correo). Archivado del original el 25 de diciembre de 2018. Recuperado el 10 de abril de 2012 .
- ↑ "Más arqueolingüística: desenterrando el proto-rubí" . Archivado del original el 6 de noviembre de 2015. Consultado el 2 de mayo de 2015 .
- ↑ " [ ruby-talk:00382 ] Re: historia de ruby" . Archivado del original el 16 de julio de 2011 . Recuperado el 2 de mayo de 2015 .
- ↑ " [ ruby-list:124 ] TUTORIAL — características de ruby" . Archivado del original el 24 de mayo de 2003. Recuperado el 2 de mayo de 2015 .
- ↑ "Una entrevista con el creador de Ruby" . Archivado del original el 8 de febrero de 2008. Consultado el 11 de julio de 2007 .
- ↑ Yukihiro Matsumoto (octubre de 2000). "Programación en Ruby: Adelante" . Archivado del original el 25 de diciembre de 2018. Recuperado el 5 de marzo de 2014 .
- 1 2 "Retiramos Ruby 1.8.7" . Archivado del original el 6 de junio de 2015. Recuperado el 2 de mayo de 2015 .
- ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語RubyのJIS規格(JIS X 3017)制定について" . Archivado desde el original el 2 de febrero de 2015 . Consultado el 2 de mayo de 2015 .
- ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語Ruby、国際規格として承認" . Archivado desde el original el 1 de febrero de 2015 . Consultado el 2 de mayo de 2015 .
- ↑ "ISO/IEC 30170:2012" . Archivado del original el 12 de marzo de 2017. Consultado el 10 de marzo de 2017 .
- ↑ Desarrollo web: Ruby on Rails. Archivado el 24 de febrero de 2009 en Wayback Machine . Devarticles.com (22 de marzo de 2007). Consultado el 17 de julio de 2013.
- ↑ "Se ha publicado Ruby 1.9.3 p0" . ruby-lang.org. 31 de octubre de 2011. Archivado del original el 14 de enero de 2013. Consultado el 20 de febrero de 2013 .
- ↑ "v1_9_3_0/NEWS" . Repositorio de código fuente de Ruby Subversion . ruby-lang.org. 17 de septiembre de 2011. Archivado del original el 6 de noviembre de 2015. Recuperado el 20 de febrero de 2013 .
- ↑ Endoh, Yusuke. (24-02-2013) Se publica Ruby 2.0.0-p0. Archivado el 27-02-2013 en Wayback Machine . Ruby-lang.org. Consultado el 17-07-2013.
- ↑ "Versionamiento semántico a partir de Ruby 2.1.0" . 21 de diciembre de 2013. Archivado del original el 13 de febrero de 2014. Consultado el 27 de diciembre de 2013 .
- ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). "Ruby 2.2.1 Released" . Archivado del original el 16 de mayo de 2016. Recuperado el 12 de julio de 2016 .
{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Gustavo Frederico Temple Pedrosa, Vítor de Lima, Leonardo Bianconi (2015). "Registro de cambios v2.2.1" . Archivado desde el original el 26 de febrero de 2017 . Consultado el 12 de julio de 2016 .
{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Especificación de registros no volátiles para aumentar el rendimiento en ppc64" . Archivado del original el 17 de septiembre de 2016. Recuperado el 12 de julio de 2016 .
{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Especificación de MACRO para aumentar el rendimiento en ppc64" . Archivado del original el 17 de septiembre de 2016. Recuperado el 12 de julio de 2016 .
{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace ) - ↑ "ruby/NEWS en v2_2_0 · ruby/ruby" . GitHub . Archivado del original el 1 de enero de 2015. Consultado el 2 de mayo de 2015 .
- ↑ "Ruby/NEWS en v.2_3_0 - ruby/ruby" . GitHub . Archivado del original el 1 de marzo de 2017. Recuperado el 25 de diciembre de 2015 .
- ↑ "Cambios y características de Ruby 2.3.0" . Running with Ruby . dev.mensfeld.pl. 14 de noviembre de 2015. Archivado del original el 5 de enero de 2016. Consultado el 27 de diciembre de 2015 .
- ↑ "Ruby 2.4.0 lanzado" . www.ruby-lang.org . Archivado del original el 17 de febrero de 2017. Consultado el 30 de diciembre de 2016 .
- 1 2 3 4 "Ruby 3.0.0 lanzado" . Lenguaje de programación Ruby . 2020-12-25. Archivado del original el 2020-12-25 . Recuperado el 2020-12-25 .
- ↑ Scheffler, Jonan (10 de noviembre de 2016). "Ruby 3x3: Matz, Koichi y Tenderlove sobre el futuro de Ruby Performance" . Ruby . Archivado del original el 10 de mayo de 2019. Recuperado el 18 de mayo de 2019 .
- ↑ "Ruby 3.1.0 lanzado" . ruby-lang.org . Archivado del original el 25 de diciembre de 2021. Consultado el 25 de diciembre de 2021 .
- ↑ "Ruby 3.1.0 lanzado" . Archivado del original el 26/12/2021 . Consultado el 26/12/2021 .
- ↑ "Ruby 3.2.0 lanzado" . Archivado del original el 25/12/2022 . Consultado el 25/12/2022 .
- ↑ "Ruby 3.3.0 lanzado" . Archivado del original el 25/12/2023 . Consultado el 25/12/2023 .
- ↑ "Ruby 3.4.0 lanzado" . 25/12/2024 . Consultado el 12/04/2025 .
- ↑ "NOTICIAS - Documentación para Ruby 3.4" . Consultado el 12 de abril de 2025 .
- ↑ "Ruby 4.0.0 lanzado" . 25/12/2025 . Consultado el 02/06/2026 .
- ↑ Jeffery Morhous (14 de enero de 2026). "Todo lo que necesitas saber sobre Ruby 4.0" . Consultado el 2 de junio de 2026 .
- ↑ "El lenguaje de programación Ruby" . Archivado del original el 18 de enero de 2020. Consultado el 2 de mayo de 2015 .
- ↑ Charlas técnicas de Google : Ruby 1.9 en YouTube
- 1 2 3 Bill Venners. "La filosofía del rubí" . Archivado del original el 5 de julio de 2019. Recuperado el 2 de mayo de 2015 .
- ↑ "Bienvenido a RUBYWEEKLYNEWS.ORG" . 4 de julio de 2017. Archivado del original el 4 de julio de 2017.
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ "Preguntas frecuentes sobre el lenguaje Ruby: ¿Cómo se compara Ruby con...?" . Archivado del original el 8 de mayo de 2015. Recuperado el 2 de mayo de 2015 .
- ↑ Bruce Stewart (29 de noviembre de 2001). "Una entrevista con el creador de Ruby" . O'Reilly Media. Archivado del original el 6 de mayo de 2015. Recuperado el 2 de mayo de 2015 .
- ↑ Bill Venners. "Productividad dinámica con Ruby" . Archivado del original el 5 de septiembre de 2015. Consultado el 2 de mayo de 2015 .
- ↑ "Entornos de trabajo de lenguajes: ¿La aplicación definitiva para lenguajes específicos de dominio?" . martinfowler.com . Archivado del original el 2 de mayo de 2021 . Consultado el 2 de mayo de 2015 .
- ↑ "Ruby – Agregar métodos de clase en tiempo de ejecución" . Archivado del original el 22/09/2007 . Consultado el 01/11/2007 .
- ↑ Bill Venners. "Bloques y cierres en Ruby" . Archivado del original el 18 de abril de 2015. Consultado el 2 de mayo de 2015 .
- ↑ "Métodos" . Preguntas frecuentes oficiales de Ruby . Archivado del original el 28/06/2022 . Consultado el 20/06/2021 .
- ↑ "Biblioteca estándar de Ruby" .
- ↑ " [ ruby-talk:01120 ] Re: El valor de while..." Archivado del original el 17-07-2011 . Recuperado el 06-12-2008 .
En la sintaxis de Ruby, statement es solo un caso especial de una expresión que no puede aparecer como argumento (por ejemplo, asignación múltiple).
- ↑ " [ ruby-talk:02460 ] Re: Pregunta sobre precedencia" . Archivado del original el 22-07-2004 . Recuperado el 06-12-2008 .
La instrucción [...] no puede formar parte de una expresión a menos que esté agrupada entre paréntesis.
- ↑ "remove/virtual_module: Nacido para hacer que tu código Ruby sea más de 3 veces más rápido. Con suerte" . GitHub . 21 de febrero de 2020. Archivado del original el 1 de marzo de 2017. Recuperado el 29 de agosto de 2016 .
- ↑ Peter Cooper (18 de mayo de 2010). "El porqué, el qué y el cómo del lanzamiento de Rubinius 1.0" . Archivado del original el 24 de mayo de 2010. Consultado el 23 de mayo de 2010 .
- ↑ Maya Stodte (febrero de 2000). "IBM developerWorks – Ruby: un nuevo lenguaje" . Archivado del original el 18 de agosto de 2000. Consultado el 3 de marzo de 2014 .
- ^ Yukihiro Matsumoto (agosto de 2002). "lang-ruby-general: Re: pregunta sobre el desarrollo inicial de Ruby" . Archivado desde el original el 3 de marzo de 2014 . Consultado el 3 de marzo de 2014 .
- ↑ "The Ruby Toolbox" . Archivado del original el 3 de abril de 2015. Consultado el 4 de abril de 2015 .
- ↑ "Estadísticas RubyGems.org, tu comunidad de alojamiento de gemas" . rubygems.org . Archivado del original el 10 de diciembre de 2021. Consultado el 10 de diciembre de 2021 .
- ↑ "Retiramos raa.ruby-lang.org" . 8 de agosto de 2013. Archivado del original el 31 de diciembre de 2015. Consultado el 3 de enero de 2016 .
Lecturas adicionales
- Black, David; Leo, Joseph (15 de marzo de 2019), The Well-Grounded Rubyist (Tercera ed.), Manning Publications , pág. 584, ISBN 978-1617295218
- Metz, Sandi (22 de agosto de 2018), Diseño práctico orientado a objetos: una introducción ágil con Ruby (segunda edición), Addison-Wesley Professional , pág. 288, ISBN 978-0-13-445647-8Archivado del original el 13 de febrero de 2020 , consultado el 13 de febrero de 2020.
- Cooper, Peter (12 de julio de 2016), Beginning Ruby: From Novice to Professional (Tercera ed.), Apress , pág. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (3 de abril de 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (Segunda edición), O'Reilly Media , pág. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2 de marzo de 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Tercera ed.), Addison-Wesley Professional , pág. 816, ISBN 978-0-321-71463-3Archivado del original el 13 de febrero de 2020 , consultado el 13 de febrero de 2020.
- Thomas, Dave; Fowler, Chad; Hunt, Andy (7 de julio de 2013), Programación en Ruby 1.9 y 2.0: Guía práctica para programadores (Cuarta edición), Pragmatic Bookshelf , pág. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (28 de marzo de 2009), Ruby in Practice (Primera ed.), Manning Publications , pág. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (25 de enero de 2008), The Ruby Programming Language (Primera ed.), O'Reilly Media , p. 446 , ISBN 978-0-596-51617-8
- Baird, Kevin (8 de junio de 2007), Ruby by Example: Concepts and Code (Primera ed.), No Starch Press , pág. 326, ISBN 978-1593271480Archivado del original el 13 de enero de 2020 , consultado el 13 de febrero de 2020.
- Fitzgerald, Michael (14 de mayo de 2007), Aprendiendo Ruby (Primera ed.), O'Reilly Media , pág. 255 , ISBN 978-0-596-52986-4
Enlaces externos
- Sitio web oficial
- Documentación de Ruby
- Ruby (lenguaje de programación)
- Lenguajes de programación basados en clases
- Lenguajes de programación dinámicos
- Lenguajes de programación de tipado dinámico
- Intérpretes de código abierto y libre
- Lenguajes funcionales
- Software libre programado en C
- normas ISO
- Inventos japoneses
- Lenguajes de programación multiparadigma
- Lenguajes de programación orientados a objetos
- Lenguajes de programación creados en 1995
- Lenguajes de programación con un estándar ISO
- Lenguajes de scripting
- Software que utiliza la licencia BSD.
- Lenguajes de programación orientados a texto