Io (lenguaje de programación)
Io es un lenguaje de programación del tipo orientada a
objetos inspirado en Smalltalk, Self, Lua, Lisp, Act1, y
Io
NewtonScript.1
Io usa un paradigma de objetos basada en prototipos tal
como lenguajes como Self y NewtonScript, eliminando
las diferencias entre clases e instancias.
Tal como Smalltalk, absolutamente todo es un objeto y
como en el caso de Lisp, los programas son árboles de
datos. Io también usa actores para la concurrencia.
También es destacable que Io corre sobre una ligera y
portable Máquina virtual.
Índice Desarrollador(es)
Historia Steve Dekorte, Jonathan Wright, Jeremy
Tregunna
Filosofía
https://iolanguage.org/
Características Información general
Sintaxis Paradigma POO, basada en prototipos
Métodos y Bloques
Apareció en 2002
Ejemplos
Diseñado por Steve Dekorte
Referencias Sistema de tipos Tipado duro o fuerte,
Enlaces externos Estático y dinámico
Implementaciones Io (http://www.iolanguage.co
m/) Io.NET (http://web.archiv
Historia e.org/web/http://synrc.com/i
o/index.htm) Acute (https://gi
Este lenguaje fue creado por Steve Dekorte el 7 de thub.com/acutelanguage/ac
marzo de 2002, después de intentar ayudar a un amigo, ute)
Dru Nelson, con en lenguaje Cel. Él se encontró con
Dialectos Europa (https://github.com/je
que sabía mucho de como funcionaban los lenguajes y
remytregunna/europa) Metis
decicio escribir un pequeño lenguaje para entender
(https://github.com/jeremytre
mejor los problemas.
gunna/metis)
Influido por Smalltalk, NewtonScript,
Filosofía Self, Lua, Lisp
Ha influido a Ioke, Restricted Io, Fancy,
Io intenta explorar la unificación conceptual y el
Luna
dinamismo del lenguaje, priorizando la simplicidad y
flexibilidad sobre el rendimiento. Licencia BSD
Características
Lenguaje basado en objetos puro, del tipo prototipado
Evaluación perezosa de parámetros de funciones
Manejo de excepciones
Expresiones regulares del tipo Perl
Recolector de basura con soporte para referencia débil
Altamente portable
Carga dinámica de DLL y bibliotecas compartidas en la mayoría de las plataformas
introspección, reflexión y metraprogramación
Concurrencia basada en Actores (Informática)
Corrutinas
Máquina virtual ligera
Funciones de orden superior
Sintaxis
En su forma más simple, un programa Io está compuesto por un identificador simple:
hacerAlgo
Si hacerAlgo es un método, está siendo invocado con cero argumentos, y por ser cero, los paréntesis explícitos
no son necesarios.
Si hacerAlgo recibiera argumentos, se vería así:
hacerAlgo(42)
Io es un lenguaje de paso de mensajes, y como todo en Io es un mensaje (excepto los comentarios), cada
mensaje es enviado a un recipiente. El ejemplo de arriba lo demuestra bien, pero no por completo. Para
describir este punto mejor, aquí hay otro ejemplo:
System version
Este ejemplo demuestra el paso de mensajes en Io: el mensaje version es enviado al objeto System.
Los operadores son un caso especial en donde la sintaxis no es "simple y llana" como en los ejemplos
anteriores. El parser de Io detecta un conjunto de operadores definidos por el intérprete, y los convierte en
invocación de métodos. Por ejemplo:
1 + 5 * 8 + 1
traduce a:
1 + (5 *(8)) +(1)
Como se puede observar, hay precedencia de operadores de la que el parser se encarga. Los niveles de
precedencia son los mismos que en C.
Los operadores también se convirtieron en invocación de métodos. De hecho, todos los operadores son
métodos, el hecho de que no necesitan paréntesis es solo por conveniencia.
Métodos y Bloques
En Io hay dos formas de crear funciones anónimas: métodos y bloques. Son casi idénticos excepto por el
contexto en que se ejecutan, los bloques tienen un contexto léxico y los métodos un contexto dinámico.
Ambos, métodos y bloques, son funciones de primera clase.
Ejemplos
El clásico Hola Mundo:
"Hola Mundo!" println
Nuevos objetos son creados clonando otros objetos. Específicamente en Io, cuando un nuevo objeto vacío se
crea, lo único que se guarda en el objeto son sus diferencias con sus padres. Este comportamiento se conoce
como herencia diferencial. El siguiente ejemplo demuestra este comportamiento:
A := Object clone // crea un nuevo objeto vacío, llamado "A"
Una función factorial simple, no recursiva:
factorial := method(n,
: if(n == 0, return 1)
: res := 1
: Range 1 to(n) foreach(i, res = res * i)
)
Como la última acción es la asignación de res * i a la variable res, la función implícitamente devuelve el
valor asignado, de modo que no hace falta un return explícito. Este ejemplo también demuestra el uso de
rangos (en vez de usar bucles for, que pueden ser más rápidos).
Referencias
1. Io Programming Guide (http://iolanguage.com/scm/io/docs/IoGuide.html)
Enlaces externos
Io (http://iolanguage.com/) Página oficial (en inglés)
Io Notes (https://web.archive.org/web/20120204202552/http://iota.flowsnake.org/) (en inglés)
Io at Synrc Research Center (https://web.archive.org/web/20110716175739/http://synrc.com/io/i
ndex.htm) (en inglés)
Io (http://dmoztools.net/Computers/Programming/Languages/Io) en Open Directory Project.
Obtenido de «https://es.wikipedia.org/w/index.php?title=Io_(lenguaje_de_programación)&oldid=125248892»
Esta página se editó por última vez el 16 abr 2020 a las 23:18.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; pueden aplicarse cláusulas
adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.