IDL (programmeringsspråk)

IDL (Interactive Data Language)
Paradigm vektororienterad programmering
Designad av David Stern
Utvecklare David Stern & ITT Visual Information Solutions (ITT VIS)
Dök först upp 1977
Stabil frisättning
IDL 8.8.3 / 1 november 2022
Maskinskrivningsdisciplin Dynamisk
Hemsida www .harrisgeospatial .com /Software-Technology /IDL
Stora implementeringar
IDL, GNU Data Language , Fawlty Language

IDL , förkortning för Interactive Data Language , är ett programmeringsspråk som används för dataanalys . Det är populärt i särskilda områden av vetenskap, såsom astronomi , atmosfärisk fysik och medicinsk avbildning . [ citat behövs ] IDL delar en gemensam syntax med PV-Wave och härstammar från samma kodbas , även om språken därefter har avvikit i detalj. Det finns också gratis eller kostnadslösa implementeringar, såsom GNU Data Language (GDL) och Fawlty Language (FL).

Översikt

IDL är vektoriserat , numeriskt och interaktivt och används vanligtvis för interaktiv bearbetning av stora mängder data (inklusive bildbehandling ). Syntaxen inkluderar många konstruktioner från Fortran och några från C .

IDL kom från tidiga VMS Fortran, och dess syntax visar fortfarande sitt arv:

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

Findgen - funktionen i exemplet ovan returnerar en endimensionell matris med flyttal, med värden lika med en serie heltal som börjar på 0.

Notera att operationen i den andra raden gäller på ett vektoriserat sätt för hela 100-elementsuppsättningen som skapats i den första raden, analogt med det sätt på vilket generella arrayprogrammeringsspråk (såsom APL , J eller K ) skulle göra det . Detta exempel innehåller en division med noll; IDL kommer att rapportera ett aritmetiskt spill och lagra ett NaN- värde i motsvarande element i y -matrisen (den första), men de andra matriselementen kommer att vara ändliga. NaN exkluderas från visualiseringen som genereras av plotkommandot .

Som med de flesta andra array-programmeringsspråk är IDL väldigt snabba på att utföra vektoroperationer (ibland lika snabbt som en välkodad anpassad loop i Fortran eller C) men ganska långsamt om element behöver bearbetas individuellt. Därför är en del av konsten att använda IDL (eller något annat array-programmeringsspråk, för den delen) för numeriskt tunga beräkningar att använda sig av de inbyggda vektoroperationerna.

Historia

De föregångare versionerna av IDL utvecklades på 1970-talet vid Laboratory for Atmospheric and Space Physics (LASP) vid University of Colorado i Boulder . På LASP var David Stern involverad i ansträngningarna att tillåta forskare att testa hypoteser utan att anställa programmerare för att skriva eller modifiera individuella applikationer. Det första programmet i den evolutionära kedjan till IDL som Stern utvecklade hette Rufus; det var en enkel vektororienterad kalkylator som kördes på PDP-12 . Den accepterade tvåbokstavskoder som specificerade en aritmetisk operation, ingångsregistren att fungera som operander och destinationsregistret. En version av Rufus utvecklad på PDP-8 var Mars Mariner Spectrum Editor (MMED). MMED användes av LASP-forskare för att tolka data från Mariner 7 och Mariner 9 . Senare skrev Stern ett program vid namn SOL, som också kördes på PDP-8. Till skillnad från sina föregångare var det ett riktigt programmeringsspråk med en FORTRAN-liknande syntax. SOL var ett array-orienterat språk med vissa primitiva grafikmöjligheter.

Stern lämnade LASP för att grunda Research Systems Inc. (RSI) 1977. Den första RSI-produkten var IDL för PDP-11. I den här utgåvan var grafiken som stöddes av IDL främst Tektronix-terminaler och rastergrafikskärmar. RSI sålde sina första IDL-licenser till NASA:s Goddard Space Flight Center och Ball Aerospace & Technologies Corp. 1979. Två år senare släppte RSI en första VAX/VMS-version av IDL, som skrevs i VAX MACRO och FORTRAN. Det drog fördel av VAX virtuella minne och 32-bitars adressutrymme. National Center for Atmospheric Research (NCAR), University of Michigan , University of Colorado och Naval Research Laboratory började använda IDL med denna version.

1987 flyttade RSI utvecklingsarbetet av IDL till Unix- miljön, vilket krävde en fullständig omskrivning av koden i C snarare än en port av den befintliga versionen av VAX IDL. Stern och Ali Bahrami skrev om IDL för Unix on the Sun 3 och utnyttjade omskrivningen för att utöka och förbättra språket. Därefter utökades IDL ytterligare och portades till flera varianter av Unix, VMS, Linux, Microsoft Windows (1992) och Mac OS (1994).

Widgets lades till IDL 1992, vilket ger händelsestyrd programmering med grafiska användargränssnitt . 1997 släpptes ION (IDL On the Net), ett webbserverbaserat system, kommersiellt. Den första versionen av ENVI , en applikation för fjärranalys av multispektral och hyperspektral bildanalys skriven i IDL, släpptes 1994. ENVI skapades, utvecklades och ägdes av Better Solutions Consulting, LLC, tills det köptes från BSC i oktober 2000 av Eastman Kodak sammanfaller med deras köp av RSI. RSI sålde, marknadsförde och stödde ENVI under villkoren i ett licensavtal med BSC, LLC från 1994 till oktober 2000. Nya objekt- och pekartyper och begränsade objektorienterade programmeringsmöjligheter lades till IDL 1997.

IDL har använts brett inom rymdvetenskap, till exempel inom solfysik . Europeiska rymdorganisationen använde IDL för att bearbeta nästan alla bilder på Halleys komet som tagits av rymdfarkosten Giotto . Teamet som reparerade rymdteleskopet Hubble använde IDL för att hjälpa dem att diagnostisera anomalier i huvudspegeln. 1995 använde astronauter ombord på en rymdfärja IDL laddad på en bärbar dator för att studera ultraviolett strålning. För närvarande, bland andra applikationer, används IDL för större delen av analysen av SECCHI-delen av STEREO -uppdraget vid NRL , USA, och vid Rutherford Appleton Laboratory, Storbritannien.

RSI blev ett helägt dotterbolag till ITT Industries i mars 2004. Den 15 maj 2006 började RSI göra affärer som ITT Visual Information Solutions . Från och med den 31 oktober 2011, som ett resultat av omstruktureringen, blev det företaget Exelis Visual Information Solutions . Från och med 2015 ägs och underhålls IDL nu av Harris Geospatial Solutions .

Funktioner

Som datorspråk, IDL:

  • skrivs dynamiskt .
  • har separata namnutrymmen för variabler, funktioner och procedurer, men ingen namnrymdshierarki.
  • var ursprungligen enkelgängad men har nu många flertrådiga funktioner och procedurer.
  • har alla funktionsargument skickade genom referens ; men se "problem" nedan.
  • har namngivna parametrar som kallas nyckelord som skickas med referens.
  • ger namngivna parameterarv i kapslade rutinanrop, genom referens eller värde.
  • kräver inte att variabler är fördeklarerade.
  • tillhandahåller GEMENSAMMA blockdeklarationer och systemvariabler för att dela globala värden mellan rutiner.
  • ger en grundläggande form av objektorienterad programmering, något liknande Smalltalk , tillsammans med operatörsöverbelastning .
  • implementerar en beständig, global hög av pekare och objektvariabler, med hjälp av referensräkning för sophämtning.
  • kompilerar till en tolkad, stackbaserad mellanliggande p-kod (à la Java virtual machine ) .
  • ger en enkel och effektiv syntax för indexsegment för att extrahera data från stora arrayer.
  • ger olika heltalsstorlekar, såväl som reella och komplexa tal med enkel och dubbel precision med flyttal.
  • tillhandahåller sammansatta datatyper som teckensträngar, arrayer av homogen typ, listor, hashtabeller och enkla (icke-hierarkiska) poststrukturer av blandade datatyper.

Problem

Vissa av dessa funktioner, som gör IDL mycket enkel att använda interaktivt, orsakar också svårigheter när man bygger stora program. Den enda namnrymden är särskilt problematisk; till exempel har språkuppdateringar som inkluderar nya inbyggda funktioner ibland ogiltigförklarat stora vetenskapliga bibliotek.

Matriser skickas genom referens, och denna mekanism är en utannonserad funktion i språket för att skicka tillbaka data från en subrutin – däremot kopieras matrisskivor innan de skickas, så att datamodifieringar inte flödar tillbaka till matrisområdena (efter subrutinavgångar), bryter mot principen om minsta överraskning .

Många historiska oegentligheter överlever från språkets tidiga arv, vilket kräver individuella lösningar av programmeraren. Som ett exempel:

  • Arrayindexering och subrutininmatning kan båda utföras med exakt samma syntax (parenteser); denna tvetydighet, i kombination med den enda namnrymden för alla variabler och subrutiner, kan göra att koden slutar fungera när nydefinierade subrutiner eller språktillägg kommer i konflikt med lokala variabelnamn. IDL-programmerare kan undvika många av dessa problem genom att använda hakparenteser för arrayindexering, och därigenom undvika konflikter med funktionsnamn som använder parenteser.

Det föregående problemet kan lösas med detta kompilatoralternativ:

 COMPILE_OPT STRICTARR 
  • ITT Visual Information Solutions (ITT VIS), utvecklarna av IDL, har vidtagit explicita åtgärder för att förhindra bytekodkompatibilitet med andra miljöer. Filer som innehåller kompilerade rutiner använder ett binärt taggat datastrukturformat som inte har publicerats officiellt men som har undersökts och dokumenterats av användare men som också innehåller följande meddelande som ASCII-text inbäddad i varje sparad fil: "IDL Save/Restore files embody opublicated upphovsrättsskyddad information om IDL-programmet. Omvänd utveckling av denna fil är därför förbjuden enligt villkoren i IDL-slutanvändarlicensavtalet (IDL EULA). Alla IDL-användare måste läsa och godkänna villkoren i IDL-licensavtalet vid den tidpunkt då de installerar IDL. Programvara som läser eller skriver filer i formatet IDL Save/Restore måste ha en licens från ITT Visual Information Solutions som uttryckligen ger rätten att göra det. I detta fall kommer licensen att inkluderas med programvaran för din inspektion. Rapportera programvara som inte har en sådan licens till ITT Visual Information Solutions..." I februari 2010 har uttalandet inte testats i en domstol.

Denna bestämmelse i IDL EULA har heller ingen effekt i Australien, till följd av avsnitten 47D och 47H i det landets upphovsrättslag.

Exempel

Följande grafik skapades med IDL (källkod ingår):

Se även

  • Lista över programvara för numerisk analys
  • ENVI – ett bildbehandlingsprogram inbyggt i IDL
  • IRAF – en gratis, grafisk datareduktionsmiljö producerad av NOAO
  • MATLAB – en teknisk datormiljö med liknande möjligheter som IDL
  • NumPy – en förlängning för Python som ger den array matematiska möjligheter som liknar de för IDL
  • Perl Data Language (PDL) – En tillägg till Perl som ger den array matematiska kapaciteter som liknar de för IDL
  • Scilab - ett högnivå, numeriskt orienterat programmeringsspråk designat för vetenskaplig beräkning och gränssnitt
  • Solarsoft – bibliotek för soldataanalys och drift av rymdfarkoster skrivet huvudsakligen i IDL
  • GDL – GNU Data Language, en gratis implementering som liknar IDL.
  • Fawlty Language – Fawlty Language är en IDL8 (Interactive Data Language) kompatibel kompilator.

externa länkar