Professional Documents
Culture Documents
Desarrollador(es)
Comunidad de desarrolladores de Ruby
http://www.ruby-lang.org/
Informacin general
Extensiones
comunes
.rb, .rbw
Paradigma
multiparadigma: orientado a
objetos, reflexivo
Apareci en
1995
Diseado por
Yukihiro Matsumoto
ltima versin
estable
ltima versin en
pruebas
Tipo de dato
Implementaciones
Influido por
Ha influido a
D, Groovy, Falcon
Sistema operativo
Multiplataforma
meses y 25 das))
meses y 29 das))
ndice
1 Historia
2 Filosofa
3 Semntica
4 Caractersticas
o 4.1 Interaccin
5 Sintaxis
6 Licencia
7 Vase tambin
8 Referencias
9 Enlaces externos
Historia
El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empez a trabajar en
Ruby el 24 de febrero de 1993, y lo present al pblico en el ao 1995. En el crculo de
amigos de Matsumoto se le puso el nombre de "Ruby" (en espaol rub) como broma
aludiendo al lenguaje de programacin "Perl" (perla). La ltima versin estable de la
rama 1.8 es la 1.8.7_p248, de la rama 1.9 es la 1.9.2_p180 . La versin en 1.9 que
incorpora mejoras sustanciales en el rendimiento del lenguaje, que se espera queden
reflejadas en la prxima versin estable de produccin del lenguaje, Ruby 1.9.0.1
Diferencias en rendimiento entre la actual implementacin de Ruby (1.8.6) y otros
lenguajes de programacin ms arraigados han llevado al desarrollo de varias mquinas
virtuales para Ruby. Entre sas se encuentra JRuby, un intento de llevar Ruby a la
plataforma Java, y Rubinius, un intrprete modelado basado en las mquinas virtuales
de Smalltalk. Los principales desarrolladores han apoyado la mquina virtual
proporcionada por el proyecto YARV, que se fusion en el rbol de cdigo fuente de
Ruby el 31 de diciembre de 2006, y se dio a conocer como Ruby 1.9
Filosofa
Todo el mundo tiene un pasado personal. Alguien puede venir de Python, otro de Perl, y
pueden verse sorprendidos por distintos aspectos del lenguaje. Entonces podran decir
'Estoy sorprendido por esta caracterstica del lenguaje, as que Ruby viola el principio
de la menor sorpresa.' Espera, espera. El principio de la menor sorpresa no es slo para
ti. El principio de la menor sorpresa significa el principio de 'mi' menor sorpresa. Y
significa el principio de la menor sorpresa despus de que aprendes bien Ruby. Por
ejemplo, fui programador de C++ antes de empezar a disear Ruby. Program
exclusivamente en C++ durante dos o tres aos. Y despus de dos aos de programar en
C++, todava me sorprenda.
Semntica
Ruby es orientado a objetos: todos los tipos de datos son un objeto, incluidas las clases
y tipos que otros lenguajes definen como primitivas, (como enteros, booleanos, y "nil").
Toda funcin es un mtodo. Las variables siempre son referencias a objetos, no los
objetos mismos. Ruby soporta herencia con enlace dinmico, mixins y mtodos
singleton (pertenecientes y definidos por una sola instancia ms que definidos por la
clase). A pesar de que Ruby no soporta herencia mltiple, la clases pueden importar
mdulos como mixins. La sintaxis procedural est soportada, pero todos los mtodos
definidos fuera del mbito de un objeto son realmente mtodos de la clase Object.
Como esta clase es padre de todas las dems, los cambios son visibles para todas las
clases y objetos.
Ruby ha sido descrito como un lenguaje de programacin multiparadigma: permite
programacin procedural (definiendo funciones y variables fuera de las clases
hacindolas parte del objeto raz Object), con orientacin a objetos, (todo es un objeto)
o funcionalmente (tiene funciones annimas, clausuras o closures, y continuations;
todas las sentencias tiene valores, y las funciones devuelven la ltima evaluacin).
Soporta introspeccin, reflexin y metaprogramacin, adems de soporte para hilos de
ejecucin gestionados por el intrprete. Ruby tiene tipado dinmico, y soporta
polimorfismo de tipos (permite tratar a subclases utilizando la interfaz de la clase
padre). Ruby no requiere de polimorfismo de funciones (sobrecarga de funciones) al ser
dinmicamente tipado (los parmetros de una funcin pueden ser de distinto tipo en
cada llamada, encargndose dicha funcin de determinar el tipo y actuar en
consecuencia).
De acuerdo con las preguntas frecuentes de Ruby,4 "Si te gusta Perl, te gustar Ruby y
su sintaxis. Si te gusta Smalltalk, te gustar Ruby y su semntica. Si te gusta Python, la
enorme diferencia de diseo entre Python y Ruby/Perl puede que te convenza o puede
que no."5
Caractersticas
Orientado a objetos
Manejo de excepciones
Altamente portable
continuaciones y generadores
Interaccin
La distribucin oficial de Ruby incluye irb (Interactive Ruby Shell), un intrprete
interactivo de lnea de comandos que puede ser usado para probar cdigo de manera
rpida. El siguiente fragmento de cdigo representa una muestra de una sesin usando
irb:
$ irb
irb(main):001:0> puts "Hola mundo"
Hola mundo
=> nil
irb(main):002:0> 1+2
=> 3
Sintaxis
La sintaxis de Ruby es similar a la de Perl o Python. La definicin de clases y mtodos
est definida por palabras clave. Sin embargo, en Perl, las variables no llevan prefijos.
Cuando se usa, un prefijo indica el mbito de las variables. La mayor diferencia con C y
Perl es que las palabras clave son usadas para definir bloques de cdigo sin llaves. Los
saltos de lnea son significativos y son interpretados como el final de una sentencia; el
punto y coma tiene el mismo uso. De forma diferente que Python, la indentacin no es
significativa.
Una de las diferencias entre Ruby y Python y Perl es que Ruby mantiene todas sus
variables de instancia privadas dentro de las clases y solo la expone a travs de mtodos
de acceso (attr_writer, attr_reader, etc.). A diferencia de los mtodos "getter" y
"setter" de otros lenguajes como C++ o Java, los mtodos de acceso en Ruby pueden ser
escritos con una sola lnea de cdigo. Como la invocacin de estos mtodos no requiere
el uso de parntesis, es trivial cambiar una variable de instancia en una funcin sin tocar
una sola lnea de cdigo o refactorizar dicho cdigo. Los descriptores de propiedades de
Python son similares pero tienen una desventaja en el proceso de desarrollo. Si uno
comienza en Python usando una instancia de variable expuesta pblicamente y despus
cambia la implementacin para usar una instancia de variable privada expuesta a travs
de un descriptor de propiedades, el cdigo interno de la clase necesitar ser ajustado
para usar la variable privada en vez de la propiedad pblica. Ruby elimina est decisin
de diseo obligando a todas las variables de instancia a ser privadas, pero tambin
proporciona una manera sencilla de declarar mtodos set y get. Esto mantiene el
principio de que en Ruby no se puede acceder a los miembros internos de una clase
desde fuera de esta; en lugar de esto se pasa un mensaje (se invoca un mtodo) a la clase
y recibe una respuesta.
Licencia
El intrprete y las bibliotecas estn licenciadas de forma dual (inseparable) bajo las
licencias de software libre GPL y Licencia pblica Ruby.7
A partir de la versin 1.9.3 se opta por una licencia dual bajo las licencias BSD de dos
clusulas y Licencia pblica Ruby.8
Vase tambin