IDL (язык программирования) - IDL (programming language)

IDL (интерактивный язык данных)
Парадигма векторно-ориентированное программирование
Разработано Дэвид Стерн
Разработчик Дэвид Стерн и ITT Visual Information Solutions (ITT VIS)
Впервые появился 1977 г.
Стабильный выпуск
IDL 8.8 / август 2020 г.
Печатная дисциплина Динамический
Веб-сайт www .harrisgeospatial .com / Software-Technology / IDL
Основные реализации
IDL, язык данных GNU, язык фолти

IDL , сокращение от Interactive Data Language , - это язык программирования, используемый для анализа данных . Он популярен в определенных областях науки, таких как астрономия , физика атмосферы и получение изображений в медицине . IDL имеет общий синтаксис с PV-Wave и происходит из той же кодовой базы , хотя впоследствии языки разошлись в деталях. Существуют также бесплатные или бесплатные реализации, такие как GNU Data Language (GDL) и Fawlty Language (FL).

Обзор

IDL является векторизованным , числовым и интерактивным, и обычно используется для интерактивной обработки больших объемов данных (включая обработку изображений ). Синтаксис включает множество конструкций из Фортрана и некоторых из Си .

IDL произошел от ранних VAX / VMS / Fortran, и его синтаксис все еще показывает свое наследие:

 x = findgen(100)/10
 y = sin(x)/x
 plot,x,y

Функция findgen в приведенном выше примере возвращает одномерный массив чисел с плавающей запятой со значениями, равными серии целых чисел, начинающихся с 0.

Обратите внимание, что операция во второй строке применяется векторизованным образом ко всему массиву из 100 элементов, созданному в первой строке, аналогично тому, как это делали бы языки программирования массивов общего назначения (такие как APL , J или K ). Этот пример содержит деление на ноль; IDL сообщит об арифметическом переполнении и сохранит значение NaN в соответствующем элементе массива y (первом), но остальные элементы массива будут конечными. NaN исключается из визуализации, созданной командой plot .

Как и большинство других языков программирования массивов, IDL очень быстро выполняет векторные операции (иногда так же быстро, как хорошо закодированный пользовательский цикл в Fortran или C), но довольно медленно, если элементы требуют обработки по отдельности. Следовательно, часть искусства использования IDL (или любого другого языка программирования массивов, если на то пошло) для числовых вычислений заключается в использовании встроенных векторных операций.

История

Предыдущие версии IDL были разработаны в 1970-х годах в Лаборатории атмосферной и космической физики (LASP) Университета Колорадо в Боулдере . В LASP Дэвид Стерн принимал участие в попытках позволить ученым проверять гипотезы, не нанимая программистов для написания или модификации отдельных приложений. Первая программа в эволюционной цепочке IDL, разработанная Стерном, была названа Rufus; это был простой векторно-ориентированный калькулятор, работавший на PDP-12 . Он принимал двухбуквенные коды, которые определяли арифметическую операцию, входные регистры, служащие операндами, и регистр назначения. Версия Rufus, разработанная на PDP-8, была Mars Mariner Spectrum Editor (MMED). MMED использовался учеными LASP для интерпретации данных Mariner 7 и Mariner 9 . Позже Стерн написал программу под названием SOL, которая также работала на PDP-8. В отличие от своих предшественников, это был настоящий язык программирования с синтаксисом, подобным FORTRAN. SOL был языком, ориентированным на массивы, с некоторыми примитивными графическими возможностями.

Стерн покинул LASP, чтобы основать Research Systems Inc. (RSI) в 1977 году. Первым продуктом RSI был IDL для PDP-11. В этом выпуске графика, поддерживаемая IDL, была в основном терминалами Tektronix и дисплеями с растровой графикой. RSI продала свои первые лицензии IDL Центру космических полетов имени Годдарда НАСА и Ball Aerospace & Technologies Corp. в 1979 году. Два года спустя RSI выпустила первоначальную версию IDL VAX / VMS, которая была написана на VAX-11 MACRO и FORTRAN. Он использовал преимущества виртуальной памяти VAX и 32-битного адресного пространства. Национальный центр атмосферных исследований (NCAR), то Мичиганский университет , то университет штата Колорадо , и научно - исследовательская лаборатория ВМС начали использовать IDL с этой версией.

В 1987 году RSI перенесла разработку IDL в среду Unix , что потребовало полной переписывания кода на C, а не переноса существующей версии VAX IDL. Стерн и Али Бахрами переписали IDL для Unix на Sun 3, воспользовавшись переписыванием для расширения и улучшения языка. Впоследствии IDL был дополнительно расширен и перенесен на несколько вариантов Unix, VMS, Linux, Microsoft Windows (1992) и Mac OS (1994).

В 1992 году в IDL были добавлены виджеты, обеспечивающие программирование, управляемое событиями, с графическим пользовательским интерфейсом . В 1997 г. была коммерчески выпущена система ION (IDL On the Net), основанная на веб-сервере. Первая версия ENVI , приложения для дистанционного зондирования мультиспектрального и гиперспектрального анализа изображений, написанного на IDL, была выпущена в 1994 году. ENVI была создана, разработана и принадлежала Better Solutions Consulting, LLC, пока она не была приобретена у BSC в октябре 2000 года компанией Eastman. Kodak совпала с покупкой RSI. RSI продавала, продавала и поддерживала ENVI в соответствии с условиями лицензионного соглашения с BSC, LLC с 1994 по октябрь 2000 года . В 1997 году в IDL были добавлены новые типы объектов и указателей, а также ограниченные возможности объектно-ориентированного программирования .

IDL широко применяется в космической науке, например, в физике Солнца . Европейское космическое агентство используется IDL для обработки почти всех снимков кометы Галлея , принятых Джотто космических аппаратов. Команда, ремонтирующая космический телескоп Хаббл, использовала IDL, чтобы помочь им диагностировать аномалии в главном зеркале. В 1995 году астронавты на борту космического челнока использовали IDL, загруженный на ноутбук, для изучения ультрафиолетового излучения. В настоящее время, среди других приложений, IDL используется для большей части анализа части SECCHI миссии STEREO в NRL , США, и в лаборатории Rutherford Appleton, Великобритания.

RSI стала полностью дочерней компанией ITT Industries в марте 2004 года. С 15 мая 2006 года RSI начала вести бизнес как ITT Visual Information Solutions . С 31 октября 2011 года в результате реструктуризации эта компания стала Exelis Visual Information Solutions . По состоянию на 2015 год IDL теперь принадлежит и обслуживается компанией Harris Geospatial Solutions .

Функции

В качестве компьютерного языка IDL:

  • является динамически типизированным .
  • имеет отдельные пространства имен для переменных, функций и процедур, но не имеет иерархии пространств имен.
  • изначально был однопоточным, но теперь имеет множество многопоточных функций и процедур.
  • все аргументы функции переданы по ссылке ; но см. «проблемы» ниже.
  • имеет именованные параметры, называемые ключевыми словами, которые передаются по ссылке.
  • обеспечивает наследование именованных параметров во вложенных вызовах подпрограмм по ссылке или значению.
  • не требует предварительного объявления переменных.
  • предоставляет ОБЩИЕ объявления блоков и системные переменные для совместного использования глобальных значений между подпрограммами.
  • предоставляет базовую форму объектно-ориентированного программирования, в чем-то похожую на Smalltalk , вместе с перегрузкой операторов .
  • реализует постоянную глобальную кучу указателей и объектных переменных, используя подсчет ссылок для сборки мусора.
  • компилируется в интерпретируемый промежуточный p-код на основе стека (а-ля виртуальная машина Java ).
  • обеспечивает простой и эффективный синтаксис среза индекса для извлечения данных из больших массивов.
  • предоставляет различные целочисленные размеры, а также действительные и комплексные числа с плавающей запятой одинарной и двойной точности.
  • предоставляет составные типы данных, такие как символьные строки, массивы однородных типов, списки, хэш-таблицы и простые (неиерархические) структуры записей смешанных типов данных.

Проблемы

Некоторые из этих функций, которые делают IDL очень простым для интерактивного использования, также вызывают трудности при построении больших программ. Единое пространство имен особенно проблематично; например, языковые обновления, которые включают новые встроенные функции, иногда делают недействительными большие научные библиотеки.

Массивы передаются по ссылке, и этот механизм является объявленной функцией языка для передачи данных обратно из подпрограммы - напротив, срезы массива копируются перед передачей, так что изменения данных не возвращаются в диапазоны массивов (после выход из подпрограммы), нарушая принцип наименьшего удивления .

Многие исторические неточности сохранились благодаря раннему наследию языка, требуя от программиста индивидуальных решений. В качестве примера:

  • И индексирование массива, и ввод подпрограммы могут выполняться с одним и тем же синтаксисом (круглые скобки); эта неоднозначность в сочетании с единым пространством имен для всех переменных и подпрограмм может привести к прекращению работы кода, когда вновь определенные подпрограммы или расширения языка конфликтуют с именами локальных переменных. Программисты IDL могут избежать многих из этих проблем, используя квадратные скобки для индексации массивов, тем самым избегая конфликтов с именами функций, в которых используются круглые скобки.

Предыдущую проблему можно решить с помощью этой опции компилятора:

COMPILE_OPT STRICTARR
  • ITT Visual Information Solutions (ITT VIS) , разработчики IDL, предприняли явные шаги для предотвращения совместимости байт-кода с другими средами. Файлы, содержащие скомпилированные процедуры, используют двоичный формат структуры данных с тегами, который не был официально опубликован, но был исследован и задокументирован пользователями, но также содержит следующее уведомление в виде текста ASCII, встроенного в каждый сохраненный файл: «Файлы сохранения / восстановления IDL включают неопубликованные конфиденциальная информация о программе IDL. Поэтому обратное проектирование этого файла запрещено условиями Лицензионного соглашения с конечным пользователем IDL (IDL EULA). Все пользователи IDL должны прочитать и согласиться с условиями IDL EULA в то время, когда они устанавливают IDL. Программное обеспечение, которое читает или записывает файлы в формате IDL Save / Restore, должно иметь лицензию от ITT Visual Information Solutions, явно предоставляющую право на это. В этом случае лицензия будет включена в программное обеспечение для вашей проверки. Пожалуйста, сообщите о программном обеспечении, не имеющем такой лицензии, в ITT Visual Information Solutions ... »По состоянию на февраль 2010 года это утверждение не проверялось в суде.

Кроме того, это положение IDL EULA не действует в Австралии в результате разделов 47D и 47H Закона об авторском праве этой страны.

Примеры

Следующие рисунки были созданы с помощью IDL (включая исходный код):

Смотрите также

  • Список программного обеспечения для численного анализа
  • ENVI - программный пакет для обработки изображений, встроенный в IDL
  • IRAF - бесплатная графическая среда обработки данных, разработанная NOAO
  • MATLAB - техническая вычислительная среда, предоставляющая возможности, аналогичные IDL
  • NumPy - расширение для Python, которое дает ему математические возможности массива, аналогичные таковым в IDL.
  • Perl Data Language (PDL) - расширение Perl, которое дает ему математические возможности массива, аналогичные таковым в IDL.
  • Scilab - это высокоуровневый язык программирования с числовой ориентацией, разработанный для научных вычислений и интерфейсов.
  • Solarsoft - библиотека для анализа солнечных данных и операций по эксплуатации космических аппаратов, написанная преимущественно на IDL.
  • GDL - язык данных GNU, бесплатная реализация, похожая на IDL.
  • Fawlty Language - Fawlty Language - это компилятор, совместимый с IDL8 (Interactive Data Language).

использованная литература

внешние ссылки