IDL , acrónimo de Interactive Data Language (Lenguaje Interactivo de Datos ), es un lenguaje de programación utilizado para el análisis de datos . Es popular en áreas científicas específicas, como la astronomía , la física atmosférica y la imagen médica . IDL comparte una sintaxis común con PV-Wave y se originó a partir del mismo código fuente , aunque posteriormente ambos lenguajes han divergido en algunos detalles. También existen implementaciones gratuitas , como GNU Data Language (GDL) y Fawlty Language (FL).
Descripción general
IDL es un lenguaje vectorizado , numérico e interactivo, y se utiliza comúnmente para el procesamiento interactivo de grandes cantidades de datos (incluido el procesamiento de imágenes ). Su sintaxis incluye muchas construcciones de Fortran y algunas de C.
IDL se originó a partir de las primeras versiones de VMS Fortran, y su sintaxis aún muestra esa herencia:
x = findgen ( 100 ) / 10 y = sin (x) / x plot ,x,y La función findgen del ejemplo anterior devuelve una matriz unidimensional de números de punto flotante, con valores iguales a una serie de números enteros que comienzan en 0.
Nótese que la operación de la segunda línea se aplica de forma vectorizada a toda la matriz de 100 elementos creada en la primera línea, de manera análoga a como lo harían los lenguajes de programación de matrices de propósito general (como APL , J o K ). Este ejemplo contiene una división por cero; IDL informará de un desbordamiento aritmético y almacenará un valor NaN en el elemento correspondiente de la matriz y (el primero), pero los demás elementos de la matriz serán finitos. El valor NaN se excluye de la visualización generada por el comando plot .
Al igual que la mayoría de los lenguajes de programación de matrices, IDL es muy rápido para realizar operaciones vectoriales (a veces tan rápido como un bucle personalizado bien programado en Fortran o C), pero bastante lento si los elementos necesitan procesarse individualmente. Por lo tanto, parte del arte de usar IDL (o cualquier otro lenguaje de programación de matrices) para cálculos numéricamente complejos consiste en aprovechar las operaciones vectoriales integradas.
Historia
Las versiones predecesoras de IDL se desarrollaron en la década de 1970 en el Laboratorio de Física Atmosférica y Espacial (LASP) de la Universidad de Colorado en Boulder . En LASP, David Stern participó en iniciativas para permitir a los científicos probar hipótesis sin necesidad de programadores para escribir o modificar aplicaciones individuales. El primer programa en la cadena evolutiva hacia IDL que desarrolló Stern se llamó Rufus; era una calculadora vectorial simple que se ejecutaba en el PDP-12 . Aceptaba códigos de dos letras que especificaban una operación aritmética, los registros de entrada que servirían como operandos y el registro de destino. Una versión de Rufus desarrollada en el PDP-8 fue el Editor de Espectros de Mars Mariner (MMED). Los científicos de LASP utilizaron MMED para interpretar datos de Mariner 7 y Mariner 9. Posteriormente, Stern escribió un programa llamado SOL, que también se ejecutaba en el PDP-8. A diferencia de sus predecesores, era un verdadero lenguaje de programación con una sintaxis similar a FORTRAN. SOL era un lenguaje orientado a matrices con algunas capacidades gráficas primitivas. [ 1 ]
Stern dejó LASP para fundar Research Systems Inc. (RSI) en 1977. El primer producto de RSI fue IDL para el PDP-11. [ 1 ] En esta versión, los gráficos compatibles con IDL eran principalmente terminales Tektronix y pantallas de gráficos rasterizados. RSI vendió sus primeras licencias de IDL al Centro de Vuelos Espaciales Goddard de la NASA y a Ball Aerospace & Technologies Corp. en 1979. Dos años después, RSI lanzó una versión inicial de IDL para VAX/VMS, escrita en VAX MACRO y FORTRAN. Aprovechaba la memoria virtual VAX y el espacio de direcciones de 32 bits. [ 1 ] El Centro Nacional de Investigación Atmosférica (NCAR), la Universidad de Michigan , la Universidad de Colorado y el Laboratorio de Investigación Naval comenzaron a usar IDL con esta versión.
En 1987, RSI trasladó el desarrollo de IDL al entorno Unix , lo que requirió una reescritura completa del código en C en lugar de una simple adaptación de la versión existente de VAX IDL. [ 1 ] Stern y Ali Bahrami reescribieron IDL para Unix en el Sun 3, aprovechando la reescritura para extender y mejorar el lenguaje. Posteriormente, IDL se amplió aún más y se adaptó a varias variantes de Unix, VMS, Linux, Microsoft Windows (1992) y Mac OS (1994).
En 1992 se añadieron widgets a IDL, lo que permitió la programación orientada a eventos con interfaces gráficas de usuario . En 1997 se lanzó comercialmente ION (IDL On the Net), un sistema basado en servidor web. La primera versión de ENVI , una aplicación para el análisis de imágenes multiespectrales e hiperespectrales de teledetección escrita en IDL, se publicó en 1994. ENVI fue creada, desarrollada y propiedad de Better Solutions Consulting, LLC, hasta que Eastman Kodak la adquirió de BSC en octubre de 2000, coincidiendo con la compra de RSI. RSI vendió, comercializó y ofreció soporte para ENVI bajo los términos de un acuerdo de licencia con BSC, LLC desde 1994 hasta octubre de 2000. En 1997 se añadieron a IDL nuevos tipos de objetos y punteros, así como capacidades limitadas de programación orientada a objetos .
IDL se ha aplicado ampliamente en la ciencia espacial, por ejemplo, en la física solar . La Agencia Espacial Europea utilizó IDL para procesar casi todas las imágenes del cometa Halley tomadas por la sonda Giotto . El equipo que reparaba el telescopio espacial Hubble utilizó IDL para diagnosticar anomalías en el espejo principal. En 1995, los astronautas a bordo de un transbordador espacial utilizaron IDL, instalado en una computadora portátil, para estudiar la radiación ultravioleta. Actualmente, entre otras aplicaciones, IDL se utiliza para la mayor parte del análisis de la parte SECCHI de la misión STEREO en el Laboratorio Nacional de Investigación (NRL) de Estados Unidos y en el Laboratorio Rutherford Appleton del Reino Unido.
RSI se convirtió en una filial de propiedad total de ITT Industries en marzo de 2004. A partir del 15 de mayo de 2006, RSI comenzó a operar como ITT Visual Information Solutions . El 31 de octubre de 2011, como resultado de una reestructuración, dicha empresa pasó a llamarse Exelis Visual Information Solutions . En 2015, IDL fue adquirida por Harris Geospatial Solutions , que posteriormente se convirtió en L3Harris Geospatial Solutions . En abril de 2023, IDL fue adquirida por NV5 Geospatial .
Características
Como lenguaje informático, IDL:
- es de tipado dinámico .
- Tiene espacios de nombres separados para variables, funciones y procedimientos, pero no tiene jerarquía de espacios de nombres.
- Originalmente era de un solo hilo, pero ahora tiene muchas funciones y procedimientos multihilo.
- Tiene todos los argumentos de función pasados por referencia ; pero consulte "problemas", más abajo.
- Tiene parámetros con nombre llamados palabras clave que se pasan por referencia.
- Permite la herencia de parámetros con nombre en llamadas a rutinas anidadas, por referencia o por valor.
- No requiere que las variables estén predeclaradas .
- Proporciona declaraciones de bloques COMUNES y variables del sistema para compartir valores globales entre rutinas.
- Proporciona una forma básica de programación orientada a objetos, algo similar a Smalltalk , junto con la sobrecarga de operadores .
- Implementa un montón persistente y global de variables de puntero y objeto, utilizando el conteo de referencias para la recolección de basura.
- compila a un código intermedio interpretado basado en pila (al estilo de la máquina virtual de Java ).
- Proporciona una sintaxis de segmentación de índices sencilla y eficiente para extraer datos de grandes matrices.
- Ofrece varios tamaños de números enteros, así como números reales y complejos de punto flotante de precisión simple y doble.
- Proporciona tipos de datos compuestos , como cadenas de caracteres, matrices de tipo homogéneo, listas, tablas hash y estructuras de registro simples (no jerárquicas) de tipos de datos mixtos.
Problemas
Algunas de estas características, que hacen que IDL sea muy sencillo de usar de forma interactiva, también causan dificultades al compilar programas grandes. El espacio de nombres único es particularmente problemático; por ejemplo, las actualizaciones del lenguaje que incluyen nuevas funciones integradas han invalidado en ocasiones grandes bibliotecas científicas. [ 2 ]
Los arreglos se pasan por referencia, y este mecanismo es una característica anunciada del lenguaje para devolver datos desde una subrutina; en cambio, las porciones de arreglos se copian antes de pasarse, de modo que las modificaciones de datos no fluyen de vuelta a los rangos del arreglo (después de que la subrutina finaliza), violando el principio de mínima sorpresa .
Muchas irregularidades históricas que persisten desde los inicios del lenguaje requieren soluciones específicas por parte del programador. Por ejemplo:
- Tanto la indexación de matrices como la entrada a subrutinas pueden realizarse con la misma sintaxis (paréntesis); esta ambigüedad, junto con el espacio de nombres único para todas las variables y subrutinas, puede provocar que el código deje de funcionar cuando las subrutinas o extensiones del lenguaje recién definidas entren en conflicto con los nombres de las variables locales. Los programadores de IDL pueden evitar muchos de estos problemas utilizando corchetes para la indexación de matrices, evitando así conflictos con los nombres de las funciones que utilizan paréntesis.
El problema anterior se puede mitigar utilizando esta opción del compilador:
COMPILE_OPT ESTRICTAR
ITT Visual Information Solutions (ITT VIS) , los desarrolladores de IDL, han tomado medidas explícitas para evitar la compatibilidad del código de bytes con otros entornos. Los archivos que contienen rutinas compiladas utilizan un formato de estructura de datos etiquetado binario que no ha sido publicado oficialmente, pero que ha sido investigado y documentado por los usuarios [ 3 ] , y que además contiene el siguiente aviso como texto ASCII incrustado en cada archivo guardado:
Los archivos IDL Save/Restore contienen información confidencial y propietaria del programa IDL. Por lo tanto, la ingeniería inversa de estos archivos está prohibida según los términos del Acuerdo de Licencia de Usuario Final de IDL (EULA de IDL). Todos los usuarios de IDL deben leer y aceptar los términos del EULA de IDL al instalar IDL. El software que lee o escribe archivos en formato IDL Save/Restore debe contar con una licencia de NV5 Geospatial Solutions, Inc. que otorgue explícitamente el derecho a hacerlo. En este caso, la licencia se incluirá con el software para su revisión. Informe a su gestor de cuenta o representante de ventas sobre cualquier software que no cuente con dicha licencia.
A fecha de agosto de 2023 La declaración no ha sido sometida a prueba en un tribunal. Además, esa disposición del CLUF de IDL no tiene efecto en Australia, debido a las secciones 47D y 47H de la Ley de Derechos de Autor de ese país.
Ejemplos
Los siguientes gráficos fueron creados con IDL (código fuente incluido):
- Imagen de datos aleatorios más tendencia, con línea de mejor ajuste y diferentes suavizados.
- Gráficos de delta-o-18 en función de la edad y la profundidad (de EPICA y Vostok).
- Galería IDL de coyotes: ejemplos de imágenes IDL
Véase también
- Lista de software de análisis numérico
- ENVI : un paquete de software de procesamiento de imágenes desarrollado en IDL.
- IRAF : un entorno gráfico gratuito para la reducción de datos, producido por NOAO.
- MATLAB : un entorno de computación técnica que proporciona capacidades similares a las de IDL.
- NumPy : una extensión para Python que le proporciona capacidades matemáticas de matrices similares a las de IDL.
- Perl Data Language (PDL): una extensión de Perl que le proporciona capacidades matemáticas de matrices similares a las de IDL.
- Scilab : un lenguaje de programación de alto nivel, orientado numéricamente, diseñado para la computación científica y las interfaces.
- Solarsoft : biblioteca para el análisis de datos solares y actividades de operación de naves espaciales, escrita principalmente en IDL.
- GDL – GNU Data Language, una implementación gratuita similar a IDL.
- Fawlty Language – Fawlty Language es un compilador compatible con IDL8 (Interactive Data Language).
Referencias
- 1 2 3 4 Schienle, Mike (1991-01-19). "Preguntas frecuentes sobre IDL" . Archivado del original el 07-10-2018 . Recuperado el 8 de febrero de 2019 .
- ↑ Fanning, David. "Conflictos de nombres de programas en IDL 8" . Archivado del original el 6 de marzo de 2014. Recuperado el 30 de septiembre de 2014 .
- ↑ Markwardt, Craig (21-12-2011). "Especificación de formato no oficial del archivo "SAVE" de IDL" . Recuperado el 13-02-2013 .
Enlaces externos
- Página principal de IDL
- Guía de Coyote para la programación en IDL. Archivada el 24 de agosto de 2023 en la Wayback Machine.
- La biblioteca de usuarios de astronomía IDL en el Centro Goddard de la NASA se archivó el 30 de agosto de 2005 en la Wayback Machine.
- Página principal de Fawlty Language
- Software de procesamiento de imágenes
- lenguajes de programación de matrices
- Software gráfico para ciencias de la Tierra
- Lenguajes de programación numérica
- Software de trazado
- Lenguajes de programación creados en 1977