Io es una pura programación orientada a objetos lenguaje inspirado en Smalltalk , Ser , Lua , Lisp , Act1 y NewtonScript . [2] Io tiene un modelo de objeto basado en prototipos similar a los de Self y NewtonScript, eliminando la distinción entre instancia y clase . Al igual que Smalltalk, todo es un objeto y utiliza escritura dinámica . Como Lisp, los programas son solo árboles de datos. Io usa actores para la concurrencia.
Paradigma | basado en prototipos orientado a objetos |
---|---|
Diseñada por | Steve Dekorte |
Desarrollador | Steve Dekorte, Jonathan Wright y Jeremy Tregunna |
Apareció por primera vez | 2002 |
Lanzamiento estable | 20170906/11 de agosto de 2017 [1] |
Disciplina de mecanografía | dinámico , fuerte |
Sitio web | iolanguage |
Implementaciones importantes | |
Io Io.NET | |
Influenciado por | |
Smalltalk , NewtonScript , Yo , Lua , Lisp , Python , Act1 | |
Influenciado | |
Ioke , poción |
Las características notables de Io son su tamaño mínimo y su apertura al uso de recursos de código externos. [ cita requerida ] Io es ejecutado por una pequeña máquina virtual portátil .
Historia
El lenguaje fue creado por Steve Dekorte en 2002, después de intentar ayudar a un amigo, Dru Nelson, con su lenguaje, Cel. Descubrió que realmente no sabía mucho sobre cómo funcionaban los idiomas y se propuso escribir un idioma diminuto para comprender mejor los problemas. [3]
Filosofía
El objetivo de Io es explorar la unificación conceptual y los lenguajes dinámicos , por lo que las compensaciones tienden a favorecer la simplicidad y la flexibilidad sobre el rendimiento.
Características
- Orientado a objetos puro basado en prototipos
- Código como datos / homoicónico
- Evaluación perezosa de parámetros de función
- Funciones de orden superior
- Introspección, reflexión y metaprogramación
- Basado en los actores de concurrencia
- Corutinas
- Manejo de excepciones
- Recolección de basura incremental que respalda los enlaces débiles
- Altamente portátil
- Carga dinámica de DLL / biblioteca compartida en la mayoría de las plataformas
- Pequeña máquina virtual
Sintaxis
En su forma más simple, se compone de un único identificador:
hacer cosas
Suponiendo que el doStuff anterior es un método , se llama con cero argumentos y, como resultado, no se requieren paréntesis explícitos.
Si doStuff tuviera argumentos, se vería así:
cosas ( 42 )
Io es un lenguaje de transmisión de mensajes , y dado que todo en Io es un mensaje (excluidos los comentarios ), cada mensaje se envía a un receptor. El ejemplo anterior demuestra esto bien, pero no completamente. Para describir mejor este punto, veamos el siguiente ejemplo:
Versión del sistema
El ejemplo anterior demuestra el paso de mensajes en Io; el mensaje "versión" se envía al objeto "Sistema".
Los operadores son un caso especial en el que la sintaxis no es tan simple como en los ejemplos anteriores. El analizador de Io intercepta un conjunto de operadores definidos por el intérprete y los traduce a llamadas a métodos. Por ejemplo, lo siguiente:
1 + 5 * 8 + 1
se traduce en:
1 + ( 5 * ( 8 )) + ( 1 )
Como se puede ver, también hay un poco de precedencia de los operadores sucediendo aquí, y los niveles de precedencia son los mismos que con los niveles de precedencia C .
Los operadores también se convirtieron en llamadas a métodos. De hecho, todos los operadores de Io son métodos; el hecho de que no requieran paréntesis explícitos es una conveniencia.
Métodos y bloques
En Io hay dos formas de crear funciones anónimas : métodos y bloques. Entre ellos, son casi idénticos excepto por el alcance . Mientras que los bloques tienen alcance léxico , los métodos tienen alcance dinámico .
Tanto el método como el bloque son funciones de orden superior .
Ejemplos de
El omnipresente programa Hola mundo :
"¡Hola Mundo!" println
Los nuevos objetos se crean clonando objetos. En Io específicamente, se crea un nuevo objeto vacío y solo las diferencias entre él y su padre se almacenan dentro del nuevo objeto; este comportamiento se conoce como herencia diferencial . Se muestra un ejemplo de este comportamiento:
A : = Clon de objeto // crea un nuevo objeto vacío llamado "A"
Una función factorial no recursiva simple, en Io:
factorial : = método ( n , if ( n == 0 , return 1 ) res : = 1 Rango 1 a ( n ) foreach ( i , res = res * i ) )
Debido a que la asignación de res * i
a res
es la última acción realizada, la función devuelve implícitamente el resultado y, por lo tanto, no se necesita una expresión de retorno explícita. Lo anterior demuestra el uso de rangos y no usa un for()
bucle, que sería más rápido.
Ver también
- Ioke (lenguaje de programación)
Referencias
- ^ "Lanzamientos de Io" . Consultado el 6 de febrero de 2020 .
- ^ Guía de programación de Io
- ^ Tate, Bruce (2010). "Capítulo 3: Io". Siete idiomas en siete semanas: una guía pragmática para aprender lenguajes de programación (1ª ed.). Raleigh, Carolina del Norte: Pragmatic Bookshelf . pag. 60, 72 . ISBN 978-1934356593.
enlaces externos
- Página de inicio de Io
- Io en Synrc Research Center
- Io en Curlie
- Jasmine.Io BDD Testing Framework para Io