Icono (lenguaje de programación)

icono
Semántica multi- paradigma : imperativo , lógico
clase de idioma lenguaje de programación
tipo de ejecución Interprete
Apareció en 1974
Autor Ralph E. Griswold
Liberar
sistema de tipos dinámica
Implementaciones principales Icono, Jcon, Unicon
sido influenciado Snobol , Algol
influenciado Pitón
Sitio web cs.arizona.edu/icono
icono

Captura de pantalla de WinIcon v.9.3.2 ejecutando el ejemplo VQUEENS.ICN, parte de IPL.
Tipo de Traductor
Desarrollador Ralph E. Griswold , Gregg Townsend
Sistema operativo Unix ( se están probando compilaciones de Linux y BSD ), MacOS y Microsoft Windows con Cygwin
Primera edición 1977
ultima versión 9.5.1 ( 6 de junio de 2013 )
Licencia GNU GPL
Sitio web cs.arizona.edu/icono/
Unicon

Captura de pantalla UniconIDE v.12.0.2
Tipo de Traductor
Desarrollador clint jeffery
Sistema operativo Linux y Microsoft Windows
Primera edición 1977
ultima versión 12.1.0 [3] ( 27 de agosto de 2012 )
Licencia GNU GPL
Sitio web unicon.sf.net

Icon  es un lenguaje de programación que heredó la ideología de un lenguaje anterior del mismo autor, Snobol . El nombre del idioma no tiene nada que ver con "iconos", sino que es una abreviatura de la palabra inglés.  iconoclasta (iconoclasta), utilizado en el sentido de combatir el conformismo en el desarrollo de lenguajes de programación.

Es un lenguaje de programación de muy alto nivel que integra la coincidencia de patrones y el backtracking , acercándolo a los lenguajes de programación lógicos .

El lenguaje se escribe dinámicamente y tiene potentes tipos de datos incorporados. Los procedimientos en Icon son valores de primera clase , lo que significa que a las variables se les pueden asignar los valores de los propios procedimientos, y no los resultados de su ejecución .  Hay un mecanismo de coexpresión que te permite crear rutinas .  

Sintaxis básica

La sintaxis de Icon se hereda de la familia de lenguajes de programación Algol y se asemeja a la sintaxis de C o Pascal . Icon es más como Pascal, usa el signo :=, la palabra clave procedure, etc.

Los procedimientos son el componente básico de los programas de Icon; sin embargo, a diferencia de los procedimientos de Pascal, ellos (como las funciones de C y Pascal) pueden devolver valores; no hay ninguna palabra clave functionen Icon.

procedure doSomething(aString) write(aString) end

Ejecución intencionada

Cualquier oración (operador) del lenguaje Icon es en realidad una expresión y puede devolver valores. Las expresiones en Icon, además de sus valores de retorno reales, que pueden ser cualquier número, producen uno de dos estados: éxito Eng.  exito o fracaso ingl.  fracaso _ Las estructuras de control Icon utilizan las expresiones de éxito o fracaso en lugar de valores booleanos. Gracias a esto, podemos escribir construcciones como:

if a := read() then write(a)

Además, dado que el estado "fallido" tiende a emerger de las llamadas a funciones anidadas como resultado de una función externa, se pueden usar incluso modismos más cortos, como:

while write(read())

para leer el flujo de entrada y duplicarlo en el flujo de salida (eco).

Las operaciones de comparación como >y <pueden tener éxito y producir un resultado igual al valor de su segundo argumento, o fallar y no producir ningún resultado. if a < b < c thenGracias a esto, en Icon se pueden escribir expresiones como ….

El concepto asociado con el éxito y el fracaso se denomina ejecución con propósito en Icon .  ejecución dirigida a un objetivo . Es una forma en la que un cálculo puede continuar hasta que se alcanza un objetivo determinado. En el ejemplo de eco anterior, el objetivo es leer todo el contenido del archivo de entrada hasta encontrar el final del archivo. El objetivo se establece directamente, no con comprobaciones adicionales de códigos de retorno ni nada por el estilo. El cómputo intencional se implementa mediante el retroceso , que es un mecanismo muy poderoso.

Generadores

Una gran innovación del lenguaje son los generadores que generalizan el mecanismo de los iteradores [4] . Fue a partir de ikon que la idea de los generadores encontró su camino hacia lenguajes como Python [5] .

Thomas W. Christopher, autor del Manual del lenguaje de programación de Icon escribe: "La mayor diferencia entre Icon y otros lenguajes de programación es que las expresiones en Icon son generadores".

Un ejemplo de uso de un generador:

procedimiento principal() L:=["1","22","333"] # Lista de cadenas cada escribe(" ",! L) final ---- Salida: 1 22 333

Influencia en los lenguajes posteriores

Los lenguajes Icon y Snoball sirvieron como una especie de campo de pruebas para algunos lenguajes de programación , especialmente para construcciones que contenían &&o ||y el primer lenguaje en usar expresiones regulares (aunque en una forma diferente a la actual). Posteriormente, estos mecanismos fueron utilizados en el entorno Unix , en los lenguajes C , AWK y Perl .

Aquí hay un ejemplo de tal modismo:

[ $ringing != 0 ]&&echo ¡Teléfono sonando!

Otro ejemplo, tengamos una construcción de shell :

xview -root ` gtk-shell -t "¿Qué imagen?" -fs`_ _

Incluso si no elige un nombre para el archivo de imagen, xview aún se ejecutará. Y en el lenguaje de los Iconos, esto nunca sucedería.

Los análogos de expresiones regulares son parte del lenguaje mismo, lo que permite el uso de sistemas de procesamiento de texto de complejidad ilimitada.

La flexibilidad del idioma le permite registrar una gran cantidad de acciones sin reducir la legibilidad del texto.

Implementación y dialectos

La implementación del autor de Icon, escrita en la Universidad de Arizona (el llamado icono de Arizona ) se distribuye bajo la licencia GNU GPL .

Icon 9.3 (la última versión con soporte nativo de Windows ) se implementó como un compilador de bytecode, generando un ejecutable que contenía un intérprete para ese bytecode. Desde la versión 9.4, Arizona Icon se ha implementado como un lenguaje de programación clásico de Unix .

Tras la muerte del autor del lenguaje, el desarrollo del clásico icono de Arizona estuvo congelado durante mucho tiempo, la penúltima versión de Icon v.9.4.3 fue lanzada el 14 de noviembre de 2005 , pero ahora su soporte ha sido retomado por su alumno Greg Townsend. El 12 de abril de 2010 se lanzó una nueva versión del traductor.

Una rama de Icon en desarrollo activo es el lenguaje Unicon , cuyo traductor se basa en su código, y también se distribuye bajo la licencia GNU GPL . Es un dialecto del lenguaje orientado a objetos, con una integración mejorada con el entorno del sistema operativo , que incluye, por ejemplo, soporte para interactuar con la base de datos . Similar a icon v.9.3, Unicon es un compilador enfocado en generar archivos ejecutables.

El dialecto ObjectIcon continúa desarrollándose, basado en versiones anteriores de Unicon y siendo una bifurcación de este último. ObjectIcon, como sugiere su nombre, es una versión extendida de Icon orientada a objetos, en particular, a diferencia de Unicon, ObjectIcon tiene modificadores de campo de acceso a métodos. En ObjectIcon, la composición de las bibliotecas ha cambiado mucho (la mayor parte de la IPL se ha reelaborado en gran medida: se han eliminado algunos módulos, las bibliotecas de gráficos se han cambiado por completo), se ha agregado compatibilidad con Unicode, se ha agregado compatibilidad con espacios de nombres, herencia múltiple y se ha agregado la inicialización automática de constantes y variables, y ahora es un lenguaje OOP moderno y poderoso. Desarrollado por Robert Parlett y distribuido bajo la licencia MIT . Disponible para descargar en SourceForge y se ejecuta en Linux/Unix.

Idiomas descendientes

Laurence Tratt, uno de los desarrolladores de Icon 9.5 y ObjectIcon, también es el autor del lenguaje de diseño similar Converge [6] .

En 2015, Greg Townsend introdujo el lenguaje Goaldi (de Goal Direction ). Es un lenguaje orientado a objetos implementado en Go que hereda muchas de las características de Icon. Implementa cierres , programación paralela , soporte de espacio de nombres y manejo de Unicode . Al mismo tiempo, carece de funciones icónicas como el escaneo de cadenas como una operación básica del lenguaje (en su lugar, utiliza la comparación a nivel de función con expresiones regulares regulares ) y tipos de datos relacionados, como juegos de caracteres, no hay aritmética de precisión arbitraria y los errores son no convertidos en fallas manejadas por backtracking, pero son manejados por el mecanismo de excepción [7] .

Literatura

Notas

  1. https://www2.cs.arizona.edu/icon/v95u.htm
  2. 1 2 https://github.com/gtownsend/icon/releases
  3. Unicon Sourceforge . Consultado el 26 de marzo de 2013. Archivado desde el original el 10 de septiembre de 2012.
  4. Michael Lee Scott. 6.5.4. Generadores en Iconos // Pragmática del Lenguaje de Programación . - III ed.. - Morgan Kaufmann, 2009. - P.  268 . — 941 pág. — ISBN 9780080922997 .
  5. Steve Holden, David M. Beazley. aplicación 2. Cambio desde Python 2.0 // Programación web Python. - Sams Publishing, 2002. - S. 612. - 691 p. — ISBN 9780735710900 .
  6. Laurence Tratt. Experiencias con un sistema de evaluación de expresiones tipo icono  // Actas del 6º Simposio sobre lenguajes dinámicos. — Nueva York, NY, EE. UU.: ACM, 2010-01-01. — S. 73–80 . — ISBN 9781450304054 . -doi : 10.1145/ 1869631.1869640 . Archivado desde el original el 14 de agosto de 2016.
  7. Proyecto Goaldi en GitHub

Enlaces

Dialectos y distribuciones