Ruby (lenguaje de programación)

Lenguaje de programación de propósito general
Rubí
ParadigmaMultiparadigma : funcional , imperativo , orientado a objetos , reflexivo
Diseñado porYukihiro Matsumoto
ReveladorYukihiro Matsumoto, et al.
Apareció por primera vez1995 ; hace 29 años ( 1995 )
Versión estable
3.3.5 [1] / 3 de septiembre de 2024 ; hace 45 días ( 3 de septiembre de 2024 )
Disciplina de mecanografíaPato , dinámico , fuerte.
AlcanceLéxico, a veces dinámico.
Lenguaje de implementacióndo
Sistema operativoMultiplataforma
LicenciaLicencia Ruby
Extensiones de nombre de archivo.rb, .ru
Sitio webruby-lang.org
Implementaciones principales
Ruby MRI , TruffleRuby , YARV , Rubinius , JRuby , RubyMotion , mruby
Influenciado por
Ada , [2] Básico , [3] C++ , [2] CLU , [4] Dylan , [4]
Eiffel , [2] Lisp , [4] Lua , Perl , [4] Python , [4] Smalltalk [4]
Influenciado
Clojure , CoffeeScript , Crystal , D , Elixir , Groovy , Julia , [5] Mirah , Nu , [6] Ring , [7] Rust , [8] Swift [9]
  • Programación en Ruby en Wikilibros

Ruby es un lenguaje de programación interpretado , de alto nivel y de propósito general . Fue diseñado con énfasis en la productividad y la simplicidad de la programación. En Ruby, todo es un objeto , incluidos los tipos de datos primitivos . Fue desarrollado a mediados de la década de 1990 por Yukihiro "Matz" Matsumoto en Japón .

Ruby tiene tipado dinámico y utiliza recolección de elementos no utilizados y compilación en tiempo real . Admite múltiples paradigmas de programación, incluidos la programación procedimental , la orientada a objetos y la funcional . Según su creador, Ruby recibió influencias de Perl , Smalltalk , Eiffel , Ada , BASIC , Java y Lisp . [10] [3]

Historia

Concepto inicial

Matsumoto ha dicho que Ruby fue concebido en 1993. En una publicación de 1999 en la lista de correo ruby-talk , describe algunas de sus primeras ideas sobre el lenguaje:

Estaba hablando con mi colega sobre la posibilidad de un lenguaje de programación orientado a objetos. Conocía Perl (Perl4, no Perl5), pero no me gustaba mucho porque tenía el olor de un lenguaje de juguete (todavía lo tiene). El lenguaje orientado a objetos parecía muy prometedor. En ese entonces conocía Python , pero no me gustaba porque no creía que fuera un lenguaje verdaderamente orientado a objetos; las características orientadas a objetos parecían ser complementos del lenguaje. Como maníaco de los lenguajes y fanático de la orientación a objetos durante 15 años, realmente quería un lenguaje de programación orientado a objetos genuino y fácil de usar. Busqué pero no pude encontrar uno. Así que decidí hacerlo.

Matsumoto describe el diseño de Ruby como 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. [11]

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 hubiera escrito ningún código para el lenguaje. [12] Inicialmente se propusieron dos nombres: " Coral " y " Ruby ". Matsumoto eligió este último en un correo electrónico posterior a Ishitsuka. [13] Matsumoto señaló más tarde un factor en la elección del nombre "Ruby": era la piedra de nacimiento de uno de sus colegas. [14] [15]

Lanzamientos tempranos

El primer lanzamiento público de Ruby 0.95 se anunció en grupos de noticias nacionales japoneses el 21 de diciembre de 1995. [16] [17] Posteriormente, se lanzaron tres versiones más de Ruby en dos días. [12] 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 presentes en esta etapa de desarrollo estaban muchas de las características familiares en versiones posteriores de Ruby, incluyendo diseño orientado a objetos , clases con herencia, mixins , iteradores , cierres , manejo de excepciones y recolección de basura . [18]

Después del lanzamiento de Ruby 0.95 en 1995, se lanzaron varias versiones estables de Ruby en estos años:

  • Rubí 1.0: 25 de diciembre de 1996 [12]
  • Ruby 1.2: diciembre de 1998
  • Ruby 1.4: agosto de 1999
  • Ruby 1.6: septiembre de 2000

En 1997 se publicó el primer artículo sobre Ruby en la Web. Ese mismo año, Matsumoto fue contratado por netlab.jp para trabajar en Ruby como desarrollador a tiempo completo. [12]

En 1998, Matsumoto lanzó el Archivo de aplicaciones Ruby, junto con una página de inicio sencilla en inglés para Ruby. [12]

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. [19] En este mismo año, Matsumoto y Keiju Ishitsuka escribieron el primer libro sobre Ruby, The Object-ceived Scripting Language Ruby (オブジェクト指向スクリプト言語 Ruby), que se publicó en Japón en octubre de 1999. Le seguirían a principios de 2000 por alrededor de 20 libros sobre Ruby publicados en japonés. [12]

En el año 2000, Ruby era más popular que Python en Japón. [20] En septiembre de 2000, se imprimió el primer libro en inglés, Programming Ruby , que luego se lanzó gratuitamente al público, ampliando aún más la adopción de Ruby entre los hablantes de inglés. A principios de 2002, la lista de correo en inglés ruby-talk recibía más mensajes que la lista en japonés ruby-list , lo que demostraba la creciente popularidad de Ruby en el mundo de habla no japonesa.

Ruby 1.8 y 1.9

Ruby 1.8 se lanzó inicialmente en agosto de 2003, fue estable durante mucho tiempo y se retiró en junio de 2013. [21] Aunque está obsoleto, todavía hay 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 de la industria. Las especificaciones del lenguaje para 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 del gobierno japonés ) para su presentación al Comité de Estándares Industriales Japoneses (JISC) y luego a la Organización Internacional de Normalización (ISO). Fue aceptado como Estándar Industrial Japonés (JIS X 3017) en 2011 [22] y como estándar internacional (ISO/IEC 30170) en 2012. [23] [24]

Logotipo de Ruby on Rails

Alrededor de 2005, el interés por el lenguaje Ruby surgió a la par de Ruby on Rails , un framework web escrito en Ruby. A Rails se le atribuye con frecuencia el aumento del conocimiento sobre Ruby. [25]

A partir de Ruby 1.9.3, publicada el 31 de octubre de 2011, [26] Ruby pasó de tener una licencia dual bajo la Licencia Ruby y la GPL a tener una licencia dual bajo la Licencia Ruby y la licencia BSD de dos cláusulas. [27] La ​​adopción de 1.9 se vio frenada por los cambios de 1.8 que requirieron que se reescribieran muchas gemas populares de terceros. Ruby 1.9 introduce muchos cambios significativos con respecto a la serie 1.8. Algunos ejemplos incluyen: [28]

  • variables locales de bloque (variables que son locales al bloque en el que se declaran)
  • una sintaxis lambda adicional :f = ->(a,b) { puts a + b }
  • Una sintaxis literal Hash adicional que utiliza dos puntos para claves de símbolo:{symbol_key: "value"} == {:symbol_key => "value"}
  • Se admiten codificaciones de caracteres por cadena
  • Nueva API de socket [ soporte IPv6 ]
  • require_relativeseguridad de importación

Rubí 2

Ruby 2.0 fue diseñado para ser totalmente compatible con Ruby 1.9.3. A partir del lanzamiento oficial de la versión 2.0.0 el 24 de febrero de 2013, solo se conocían cinco incompatibilidades (menores). [29] Ruby 2.0 agregó varias características nuevas, entre ellas:

  • Argumentos de palabras clave del método
  • Un nuevo método, Module#prepend, para extender una clase
  • Un nuevo literal para crear una matriz de símbolos
  • Nueva API para evaluación diferida de enumerables
  • Una nueva convención de uso de #to_h para convertir objetos en Hashes [30]

A partir de la versión 2.1.0, la política de versiones de Ruby cambió para ser más similar a la versión semántica . [31]

Ruby 2.2.0 incluye mejoras de velocidad, correcciones de errores y actualizaciones de bibliotecas, y elimina algunas API obsoletas. En particular, 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, [32] se mejoró el rendimiento de Ruby MRI en PowerPC64 . [33] [34] [35] 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. [36]

Ruby 2.3.0 incluye muchas mejoras de rendimiento, actualizaciones y correcciones de errores, incluidos cambios en Proc#call, uso de palabras clave de excepción en Socket y IO, manejo de Thread#name, conexiones Net::FTP pasivas predeterminadas y la eliminación de Rake de la biblioteca estándar. [37] Otros cambios notables incluyen:

  • La capacidad de marcar todos los literales de cadena como congelados de forma predeterminada con un aumento consecuentemente grande del rendimiento en las operaciones de cadena. [38]
  • Comparación de hash para permitir la verificación directa de pares clave/valor en lugar de solo claves.
  • Un nuevo operador de navegación segura &. que puede facilitar el manejo de nil (por ejemplo, en lugar de , podemos utilizar ).if obj && obj.foo && obj.foo.barif obj&.foo&.bar
  • La gema did_you_mean ahora está incluida de manera predeterminada y es necesaria al inicio para sugerir automáticamente coincidencias de nombres similares en un NameError o NoMethodError .
  • Hash#dig y Array#dig para extraer fácilmente valores profundamente anidados (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 características nuevas.

Ruby 2.4.0 incluye mejoras de rendimiento en la tabla hash, Array#max, Array#min y el acceso a variables de instancia. [39] Otros cambios notables incluyen:

  • Binding#irb: Iniciar una sesión REPL similar a binding.pry
  • Unificar Fixnum y Bignum en la clase Integer
  • String 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 bloqueos de subprocesos ahora muestra los subprocesos con su seguimiento y dependencia

Algunos cambios notables en Ruby 2.5.0 incluyen declaraciones de rescate y garantía que usan automáticamente un bloque do-end circundante (menos necesidad de bloques begin-end adicionales ), encadenamiento de métodos con yield_self , soporte para cobertura de ramas y medición de cobertura de métodos, y transformaciones 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), Mutexes más rápidos, plantillas ERB más rápidas y mejoras en algunos métodos de concatenación.

Algunos cambios notables en Ruby 2.6.0 incluyen un compilador just-in-time (JIT) experimental y RubyVM::AbstractSyntaxTree (experimental).

Algunos cambios notables en Ruby 2.7.0 incluyen coincidencia de patrones (experimental), mejoras en REPL, un GC de compactación y separación de argumentos posicionales y de palabras clave.

Rubí 3

Ruby 3.0.0 se lanzó el día de Navidad de 2020. [40] Se 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. [41] 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 de forma predeterminada (habilitados por banderas en tiempo de ejecución).

Otro objetivo de Ruby 3.0 es mejorar la concurrencia y dos utilidades más, Fibre Scheduler y el experimental Ractor, facilitan el objetivo. [40] Ractor es liviano y seguro para subprocesos, ya que se logra intercambiando 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 . [40] Está separado de los programas Ruby generales.

También hay algunas mejoras de sintaxis y cambios en la biblioteca en Ruby 3.0. [40]

Ruby 3.1 se lanzó el 25 de diciembre de 2021. [42] Incluye YJIT, un nuevo compilador Just-In-Time experimental desarrollado por Shopify para mejorar el rendimiento de las aplicaciones comerciales del mundo real. También se incluye un nuevo depurador . Hay algunas mejoras de sintaxis y otras mejoras en esta versión. Las bibliotecas de red para FTP , SMTP , IMAP y POP se trasladaron de gemas predeterminadas a gemas incluidas. [43]

Ruby 3.2 se lanzó el 25 de diciembre de 2022. [44] Brinda soporte para ejecutarse dentro de un entorno WebAssembly a través de una interfaz WASI. Las expresiones regulares también reciben algunas mejoras, incluido un algoritmo de coincidencia más rápido y memorizado para proteger contra ciertos ataques ReDoS y tiempos de espera configurables para la coincidencia de expresiones regulares. Esta versión también incluye funciones de depuración y sintaxis adicionales, que incluyen sugerencias de sintaxis y resaltado de errores. El compilador MJIT se ha vuelto a implementar 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. [1] Ruby 3.3 presenta mejoras significativas y mejoras de rendimiento en el lenguaje. Las características clave incluyen la introducción del analizador Prism para un análisis portátil y fácil de mantener, la incorporación del compilador JIT puro de Ruby RJIT y mejoras importantes en el rendimiento del compilador YJIT. Además, las mejoras en el uso de la memoria, la introducción de un programador de subprocesos M:N y las actualizaciones de la biblioteca estándar contribuyen a un ecosistema Ruby más eficiente y amigable para los desarrolladores.

Semántica y filosofía

Yukihiro Matsumoto , el creador de Ruby

Matsumoto ha dicho que Ruby está diseñado para la productividad y la diversión de los programadores, siguiendo los principios del buen diseño de la interfaz de usuario . [45] En una charla tecnológica de Google en 2008, dijo: "Espero ver 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". [46] Destaca que el diseño de sistemas debe enfatizar las necesidades humanas, en lugar de las de las computadoras: [47]

A menudo, la gente, especialmente los ingenieros informáticos, se centran en las máquinas. Piensan: "Haciendo esto, la máquina funcionará más rápido. Haciendo esto, la máquina funcionará con mayor eficacia. Haciendo esto, la máquina hará algo". Se centran en las máquinas, pero, de hecho, tenemos que centrarnos en los seres humanos, en cómo los seres humanos se preocupan por programar o manejar la aplicación de las máquinas. Nosotros somos los amos. Ellos son los esclavos.

Matsumoto ha dicho que su principal objetivo de diseño era crear un lenguaje que a él mismo le gustara usar, minimizando el trabajo del programador y la posible confusión. Ha dicho que no había aplicado el principio del menor asombro (POLA) al diseño de Ruby; [47] en una discusión de mayo de 2005 en el grupo de noticias comp.lang.ruby, Matsumoto intentó distanciar a Ruby de POLA, explicando que debido a que cualquier elección de diseño será sorprendente para alguien, él utiliza un estándar personal para evaluar la sorpresa. Si ese estándar personal se mantiene constante, habría pocas sorpresas para aquellos familiarizados con el estándar. [48]

Matsumoto lo definió así en una entrevista: [47]

Cada uno tiene su propia formación. Alguien puede venir de Python, alguien puede venir de Perl, y pueden sorprenderse por diferentes aspectos del lenguaje. Entonces se me acercan y me dicen: "Me sorprendió esta característica del lenguaje, por lo 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 principio de mínima sorpresa para mí . Y significa el principio de mínima sorpresa después de que aprendas Ruby muy bien. Por ejemplo, yo era programador de C++ antes de empezar a diseñar Ruby. Programé en C++ exclusivamente durante dos o tres años. Y después de dos años de programación en C++, todavía me sorprende.

Ruby está orientado a objetos : cada valor es un objeto, incluidas las clases e instancias de tipos que muchos otros lenguajes designan como primitivos (como enteros , booleanos y " null "). Debido a 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 invocan en 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 un antecesor de todas las demás clases, dichos métodos se pueden invocar en cualquier objeto. También son visibles en todos los ámbitos, sirviendo efectivamente como procedimientos "globales". Ruby admite la herencia con métodos de envío dinámico , mixins y singleton (que pertenecen a, y están definidos para, una sola instancia en lugar de estar definidos en la clase). Aunque Ruby no admite la herencia múltiple , las clases pueden importar módulos como mixins.

Ruby ha sido descrito como un lenguaje de programación multiparadigma : permite programación procedimental (definir funciones/variables fuera de las clases las hace parte de la raíz, el objeto 'propio'), con orientación a objetos (todo es un objeto) o programación funcional (tiene funciones anónimas , cierres y continuaciones ; todas las declaraciones tienen valores y las funciones devuelven la última evaluación). Tiene soporte para introspección , programación reflexiva , metaprogramación y subprocesos basados ​​en intérpretes . Ruby presenta tipado dinámico y admite polimorfismo paramétrico .

Según las preguntas frecuentes 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 en gran medida de la de Python . [49]

Características

Sintaxis

La sintaxis de Ruby es muy similar a la de Perl y Python . Las definiciones de clases y métodos se indican mediante palabras clave, mientras que los bloques de código se pueden definir mediante palabras clave o llaves. A diferencia de Perl, las variables no tienen obligatoriamente como prefijo un sigilo . Cuando se utiliza, el sigilo cambia la semántica del alcance de la variable. Para fines prácticos, no hay distinción entre expresiones y declaraciones . [57] [58] Los saltos de línea son significativos y se toman como el final de una declaración; se puede utilizar 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 a través de metaprogramación ; sin embargo, los métodos de acceso también se pueden crear de la manera tradicional de C++ y Java. Como la invocación de estos métodos no requiere el uso de paréntesis, es trivial cambiar una variable de instancia en una función completa, sin modificar una sola línea de código de llamada o tener que hacer ninguna refactorización logrando una funcionalidad similar a los miembros de propiedad de C# y VB.NET .

Los descriptores de propiedades de Python son similares, pero tienen una desventaja en el proceso de desarrollo. Si uno comienza en Python usando una variable de instancia expuesta públicamente y luego cambia la implementación para usar una variable de instancia privada expuesta a través de un descriptor de propiedad, es posible que sea necesario ajustar el código interno de la clase para usar la variable privada en lugar de la propiedad 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 sety usar getmétodos. Esto está en consonancia con la idea de que en Ruby, uno nunca accede directamente a los miembros internos de una clase desde fuera de la clase; en cambio, uno pasa un mensaje a la clase y recibe una respuesta.

Implementaciones

El intérprete Ruby de Matz

El intérprete original de Ruby se conoce a menudo como Matz's Ruby Interpreter o MRI. Esta implementación está escrita en C y utiliza su propia máquina virtual específica de Ruby .

La implementación estandarizada y retirada de Ruby 1.8 se escribió en C , como un lenguaje interpretado de una sola pasada . [21]

A partir de Ruby 1.9 y continuando con Ruby 2.x y superiores, 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 2018 [actualizar], existen varias implementaciones alternativas de Ruby, entre las que se incluyen JRuby , Rubinius y mruby . Cada una adopta un enfoque diferente: JRuby y Rubinius brindan compilación en tiempo real y mruby también brinda compilación anticipada .

Ruby tiene tres implementaciones alternativas principales:

  • JRuby , una implementación mixta de Java y Ruby que se ejecuta en la máquina virtual Java . JRuby actualmente apunta a Ruby 3.1.x.
  • TruffleRuby, una implementación de Java que utiliza el marco de implementación del lenguaje Truffle con GraalVM
  • Rubinius , una máquina virtual de bytecode de C++ que utiliza LLVM para compilar en código de 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 actualmente apunta a 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 ser incorporada en código C, de manera similar a Lua . Actualmente, Yukihiro Matsumoto y otros la están desarrollando.
  • RGSS , o Ruby Game Scripting System, una implementación patentada que utiliza la serie de software RPG Maker para el diseño de juegos y la modificación del motor RPG Maker.
  • julializer, un transpilador (parcial) de Ruby a Julia . Se puede utilizar para una gran aceleración con respecto a las implementaciones de Ruby o JRuby (puede ser útil solo para código numérico). [59]
  • Topaz, una implementación de Ruby escrita en Python
  • Opal, un intérprete basado en web que compila Ruby a JavaScript

Otras implementaciones de Ruby ahora obsoletas fueron:

La madurez de las implementaciones de Ruby suele medirse por su capacidad para ejecutar el marco Ruby on Rails (Rails), ya que es complejo de implementar y utiliza muchas características específicas de Ruby. El momento en que una implementación particular logra este objetivo se denomina "la singularidad de Rails". La implementación de referencia, JRuby, y Rubinius [60] pueden ejecutar Rails sin modificaciones en un entorno de producción.

Soporte de plataforma

Matsumoto desarrolló originalmente Ruby en el SO Sony NEWS-OS 3.x basado en 4.3BSD , pero luego migró su trabajo a SunOS 4.x y, finalmente, a Linux . [61] [62] En 1999, se sabía que Ruby funcionaba 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 servidor. 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 partición de múltiples versiones de Ruby y múltiples "conjuntos de gemas" en una máquina.

Repositorios y bibliotecas

RubyGems es el gestor de paquetes de Ruby. Un paquete de Ruby se denomina "gema" y se puede instalar a través de la línea de comandos. La mayoría de las gemas son bibliotecas, aunque existen algunas que son aplicaciones, como los IDE . [63] Hay más de 100.000 gemas de Ruby alojadas en RubyGems.org. [64]

Muchas bibliotecas Ruby nuevas y existentes están alojadas en GitHub , un servicio que ofrece alojamiento de repositorios de control de versiones para Git .

El Archivo de Aplicaciones Ruby, que albergaba aplicaciones, documentación y bibliotecas para la programación Ruby, se mantuvo hasta 2013, cuando su función fue transferida a RubyGems. [65]

Véase también

Referencias

  1. ^ ab "Lanzamiento de Ruby 3.3.0". Archivado desde el original el 25 de diciembre de 2023. Consultado el 25 de diciembre de 2023 .
  2. ^ abc Cooper, Peter (2009). Beginning Ruby: From Novice to Professional (Comenzando desde principiante hasta profesional). Beginning from Novice to Professional (2.ª ed.). Berkeley: APress. pág. 101. ISBN 978-1-4302-2363-4En menor medida , Python, LISP, Eiffel, Ada y C++ también han influido en Ruby.
  3. ^ ab "Razones detrás de Ruby". Conferencia Ruby 2008. Confreaks (YouTube).
  4. ^ abcdef Bini, Ola (2007). Proyectos prácticos de JRuby on Rails Web 2.0: Llevando Ruby on Rails a Java. Berkeley: APress. p. 3. ISBN 978-1-59059-881-8Se basa principalmente en características de Perl, Smalltalk, Python, Lisp, Dylan y CLU .
  5. ^ "Documentación de Julia 1.0: Introducción". Archivado desde el original el 16 de agosto de 2018 . Consultado el 6 de octubre de 2018 .
  6. ^ Burks, Tim. "Acerca de Nu™". Programación de Nu™ . Neon Design Technology, Inc. Archivado desde el original el 2018-12-25 . Consultado el 2011-07-21 .
  7. ^ Ring Team (3 de diciembre de 2017). «Ring y otros idiomas». ring-lang.net . ring-lang. Archivado desde el original el 25 de diciembre de 2018 . Consultado el 3 de diciembre de 2017 .
  8. ^ "Influencias - La referencia de Rust". La referencia de Rust . Archivado desde el original el 26 de enero de 2019. Consultado el 18 de abril de 2023 .
  9. ^ Lattner, Chris (3 de junio de 2014). "La página de inicio de Chris Lattner". Chris Lattner. Archivado desde el original el 25 de diciembre de 2018. Consultado el 3 de junio de 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 internas increíblemente importante que brindó comentarios 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 muchos otros para enumerarlos.
  10. ^ "Acerca de Ruby". Archivado desde el original el 9 de octubre de 2014. Consultado el 15 de febrero de 2020 .
  11. ^ Matsumoto, Yukihiro (13 de febrero de 2006). «Re: Características de Ruby en Lisp». Archivado desde el original el 27 de octubre de 2018. Consultado el 15 de febrero de 2020 .
  12. ^ abcdef «Historia de Ruby». Archivado desde el original el 14 de julio de 2011. Consultado el 14 de agosto de 2008 .
  13. ^ "[FYI: histórico] El momento decisivo del nombre de lenguaje Ruby. (Re: [ANN] ruby ​​1.8.1)" (Correo electrónico de Hiroshi Sugihara a ruby-talk). Archivado desde el original el 17 de julio de 2011. Consultado el 14 de agosto de 2008 .
  14. ^ "1.3 ¿Por qué el nombre 'Ruby'?". Preguntas frecuentes sobre el lenguaje Ruby . Ruby-Doc.org. Archivado desde el original el 28 de mayo de 2012. Consultado el 10 de abril de 2012 .
  15. Yukihiro Matsumoto (11 de junio de 1999). «Re: ¿El nombre de Ruby?». Ruby-Talk (lista de correo). Archivado desde el original el 25 de diciembre de 2018. Consultado el 10 de abril de 2012 .
  16. ^ "Más arqueolingüística: desenterrando el proto-Ruby". Archivado desde el original el 6 de noviembre de 2015 . Consultado el 2 de mayo de 2015 .
  17. ^ "[ruby-talk:00382] Re: Historia de Ruby". Archivado desde el original el 16 de julio de 2011 . Consultado el 2 de mayo de 2015 .
  18. ^ "[ruby-list:124] TUTORIAL — características de ruby". Archivado desde el original el 24 de mayo de 2003. Consultado el 2 de mayo de 2015 .
  19. ^ "Entrevista con el creador de Ruby". Archivado desde el original el 8 de febrero de 2008. Consultado el 11 de julio de 2007 .
  20. Yukihiro Matsumoto (octubre de 2000). «Programación en Ruby: hacia adelante». Archivado desde el original el 25 de diciembre de 2018. Consultado el 5 de marzo de 2014 .
  21. ^ ab «Retiramos Ruby 1.8.7». Archivado desde el original el 6 de junio de 2015. Consultado el 2 de mayo de 2015 .
  22. ^ "IPA 独立行政法人 情報処理推進機構: プレス発表 プログラム言語Ruby のJIS規格(JIS X 3017)制定について". Archivado desde el original el 2 de febrero de 2015 . Consultado el 2 de mayo de 2015 .
  23. ^ "IPA 独立行政法人 情報処理推進機構:プレス発表 プログラム言語Ruby、国際規格として承認". Archivado desde el original el 1 de febrero de 2015 . Consultado el 2 de mayo de 2015 .
  24. ^ "ISO/IEC 30170:2012". Archivado desde el original el 12 de marzo de 2017. Consultado el 10 de marzo de 2017 .
  25. ^ 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.
  26. ^ "Se ha publicado Ruby 1.9.3 p0". ruby-lang.org. 31 de octubre de 2011. Archivado desde el original el 14 de enero de 2013. Consultado el 20 de febrero de 2013 .
  27. ^ "v1_9_3_0/NEWS". Repositorio de código fuente de Ruby Subversion . ruby-lang.org. 17 de septiembre de 2011. Archivado desde el original el 6 de noviembre de 2015 . Consultado el 20 de febrero de 2013 .
  28. ^ Ruby 1.9: Qué esperar Archivado el 4 de marzo de 2016 en Wayback Machine . slideshow.rubyforge.org. Consultado el 17 de julio de 2013.
  29. ^ Endoh, Yusuke. (24 de febrero de 2013) Se publica Ruby 2.0.0-p0 Archivado el 27 de febrero de 2013 en Wayback Machine . Ruby-lang.org. Consultado el 17 de julio de 2013.
  30. ^ Endoh, Yusuke. (24 de febrero de 2013) Se publica Ruby 2.0.0-p0 Archivado el 17 de enero de 2016 en Wayback Machine . Ruby-lang.org. Consultado el 17 de julio de 2013.
  31. ^ "Versiones semánticas a partir de Ruby 2.1.0". 21 de diciembre de 2013. Archivado desde el original el 13 de febrero de 2014. Consultado el 27 de diciembre de 2013 .
  32. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2015). «Lanzamiento de Ruby 2.2.1». Archivado desde el original el 16 de mayo de 2016. Consultado el 12 de julio de 2016 .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  33. Gustavo Frederico Temple Pedrosa, Vitor 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 )
  34. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Especificación de registros no volátiles para aumentar el rendimiento en ppc64". Archivado desde el original el 17 de septiembre de 2016 . Consultado el 12 de julio de 2016 .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  35. ^ Gustavo Frederico Temple Pedrosa, Vitor de Lima, Leonardo Bianconi (2014). "Especificación de MACRO para aumentar el rendimiento en ppc64". Archivado desde el original el 17 de septiembre de 2016 . Consultado el 12 de julio de 2016 .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  36. ^ "ruby/NEWS at v2_2_0 · ruby/ruby · GitHub". GitHub . Archivado desde el original el 1 de enero de 2015 . Consultado el 2 de mayo de 2015 .
  37. ^ "Ruby/NEWS en v.2_3_0 - ruby/ruby". GitHub . Archivado desde el original el 1 de marzo de 2017 . Consultado el 25 de diciembre de 2015 .
  38. ^ "Cambios y características de Ruby 2.3.0". Ejecutando con Ruby . dev.mensfeld.pl. 14 de noviembre de 2015. Archivado desde el original el 5 de enero de 2016 . Consultado el 27 de diciembre de 2015 .
  39. ^ "Lanzamiento de Ruby 2.4.0". www.ruby-lang.org . Archivado desde el original el 17 de febrero de 2017 . Consultado el 30 de diciembre de 2016 .
  40. ^ abcd "Lanzamiento de Ruby 3.0.0". Lenguaje de programación Ruby . 25 de diciembre de 2020. Archivado desde el original el 25 de diciembre de 2020. Consultado el 25 de diciembre de 2020 .
  41. ^ Scheffler, Jonan (10 de noviembre de 2016). «Ruby 3x3: Matz, Koichi y Tenderlove sobre el futuro de Ruby Performance». Ruby . Archivado desde el original el 10 de mayo de 2019 . Consultado el 18 de mayo de 2019 .
  42. ^ "Lanzamiento de Ruby 3.1.0". ruby-lang.org . Archivado desde el original el 25 de diciembre de 2021 . Consultado el 25 de diciembre de 2021 .
  43. ^ "Lanzamiento de Ruby 3.1.0". Archivado desde el original el 26 de diciembre de 2021. Consultado el 26 de diciembre de 2021 .
  44. ^ "Lanzamiento de Ruby 3.2.0". Archivado desde el original el 25 de diciembre de 2022. Consultado el 25 de diciembre de 2022 .
  45. ^ "El lenguaje de programación Ruby". Archivado desde el original el 18 de enero de 2020. Consultado el 2 de mayo de 2015 .
  46. ^ Google Tech Talks – Ruby 1.9 en YouTube
  47. ^ abc Bill Venners. «La filosofía de Ruby». Archivado desde el original el 5 de julio de 2019. Consultado el 2 de mayo de 2015 .
  48. ^ "Bienvenido a RUBYWEEKLYNEWS.ORG". 4 de julio de 2017. Archivado desde el original el 4 de julio de 2017.{{cite web}}: CS1 maint: bot: estado de URL original desconocido ( enlace )
  49. ^ "Preguntas frecuentes sobre el lenguaje Ruby: ¿Cómo se compara Ruby con...?". Archivado desde el original el 8 de mayo de 2015 . Consultado el 2 de mayo de 2015 .
  50. Bruce Stewart (29 de noviembre de 2001). «Una entrevista con el creador de Ruby». O'Reilly Media. Archivado desde el original el 6 de mayo de 2015. Consultado el 2 de mayo de 2015 .
  51. ^ Bill Venners. «Productividad dinámica con Ruby». Archivado desde el original el 5 de septiembre de 2015. Consultado el 2 de mayo de 2015 .
  52. ^ "Language Workbench: ¿la aplicación definitiva para lenguajes de dominio específico?". martinfowler.com . Archivado desde el original el 2 de mayo de 2021. Consultado el 2 de mayo de 2015 .
  53. ^ "Ruby – Agregar métodos de clase en tiempo de ejecución". Archivado desde el original el 22 de septiembre de 2007. Consultado el 1 de noviembre de 2007 .
  54. ^ Bill Venners. «Bloqueos y cierres en Ruby». Archivado desde el original el 18 de abril de 2015. Consultado el 2 de mayo de 2015 .
  55. ^ "Métodos". Preguntas frecuentes oficiales de Ruby . Archivado desde el original el 28 de junio de 2022. Consultado el 20 de junio de 2021 .
  56. ^ Britt, James. "Documentación de la biblioteca estándar de Ruby 2.0.0". Archivado desde el original el 13 de noviembre de 2013. Consultado el 9 de diciembre de 2013 .
  57. ^ "[ruby-talk:01120] Re: El valor de while..." Archivado desde el original el 2011-07-17 . Consultado el 2008-12-06 . 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).
  58. ^ "[ruby-talk:02460] Re: Pregunta de precedencia". Archivado desde el original el 22 de julio de 2004. Consultado el 6 de diciembre de 2008. La declaración [...] no puede ser parte de una expresión a menos que esté agrupada entre paréntesis.
  59. ^ "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 desde el original el 1 de marzo de 2017 . Consultado el 29 de agosto de 2016 .
  60. ^ Peter Cooper (18 de mayo de 2010). "El porqué, el qué y el cómo del lanzamiento de Rubinius 1.0". Archivado desde el original el 24 de mayo de 2010. Consultado el 23 de mayo de 2010 .
  61. ^ Maya Stodte (febrero de 2000). «IBM developerWorks – Ruby: a new language». Archivado desde el original el 18 de agosto de 2000. Consultado el 3 de marzo de 2014 .
  62. ^ 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 .
  63. ^ "La caja de herramientas de Ruby". Archivado desde el original el 3 de abril de 2015. Consultado el 4 de abril de 2015 .
  64. ^ "Estadísticas de RubyGems.org, el servidor de gemas de tu comunidad". rubygems.org . Archivado desde el original el 10 de diciembre de 2021 . Consultado el 10 de diciembre de 2021 .
  65. ^ "Retiramos raa.ruby-lang.org". 8 de agosto de 2013. Archivado desde el original el 31 de diciembre de 2015. Consultado el 3 de enero de 2016 .

Lectura adicional

  • Black, David; Leo, Joseph (15 de marzo de 2019), The Well-Grounded Rubyist (tercera edición), 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 a Agile con Ruby (segunda edición), Addison-Wesley Professional , pág. 288, ISBN 978-0-13-445647-8, archivado 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 edición), 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 edición), Addison-Wesley Professional , pág. 816, ISBN 978-0-321-71463-3, archivado 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 de Ruby 1.9 y 2.0: Guía del programador pragmático (cuarta edición), Pragmatic Bookshelf , pág. 888, ISBN 978-1937785499
  • McAnally, Jeremy; Arkin, Assaf (28 de marzo de 2009), Ruby in Practice (Primera edición), 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 edición), No Starch Press , pág. 326, ISBN 978-1593271480, archivado del original el 13 de enero de 2020 , consultado el 13 de febrero de 2020
  • Fitzgerald, Michael (14 de mayo de 2007), Learning Ruby (Primera edición), O'Reilly Media , pág. 255, ISBN 978-0-596-52986-4
  • Sitio web oficial
  • Documentación de Ruby
Obtenido de "https://es.wikipedia.org/w/index.php?title=Ruby_(lenguaje_de_programación)&oldid=1251940387"