Nowości w IDL 9.0

Wsparcie dla procesorów Apple Mac
IDL działa teraz natywnie na komputerach Mac z procesorami Apple silicon. Dzięki temu IDL może w pełni wykorzystać możliwości chipów Apple z serii M. Wydajność została poprawiona w porównaniu z wersją IDL dla chipów Intela w ramach translatora Rosetta firmy Apple na Apple silicon Mac. Wersja Intel IDL pozostaje bez bez zmian dla komputerów Mac ze sprzętem Intel. Wszystkie komputery Mac korzystają teraz z procesorów Apple zamiast chipów Intela. Są to układy scalone oparte o na chipy SoC (System on Chip), o nazwach obejmujących M1, M2, M2 Pro, M2 Max, M2 Ultra itp. Można je nazwać chipami „serii M”. Powszechną nazwą tej architektury jest „arm64”, co znajduje odzwierciedlenie w katalogu IDL „bin.darwin.arm64”, zawierającego binaria IDL. Dokumentacja ta będzie odnosić się do IDL w kompilacji dla Intel i kompilacji Arm.

Kompilacje IDl dla procesorów Intel nadal działają natywnie na komputerach Mac ze sprzętem Intel. Można je także uruchomić na Macs z chipami Apple przy użyciu translatora Rosetta 2 (specjalnego narzędzia, które „tłumaczy” programy przeznaczone początkowo na procesory Intela na „język” układu Apple Silicon).
Kompilacje IDL Arm działają wyłącznie na komputerach Mac Apple. Istnieją dwie podstawowe korzyści z uruchamiania wersji ARM IDL na komputerach Mac Apple w porównaniu z wersją Intel wykorzustującego translator:
  • Oprogramowanie Apple Rosetta 2 zostanie ostatecznie usunięte przez firmę Apple. Zapobiegnie to uruchomieniu kompilacji IDL Intel na sprzęcie Apple. Pierwsza wersja Rosetty dotyczyła przejścia z PPC na Intel i była dostarczana przez firmę Apple przez pięć lat. Rosetta 2 istnieje już od trzech lat, więc może przetrwać kolejne dwa lata
  • Wersja Arm IDL ma lepszą wydajność na procesorach Apple, niż wersja Intel wykorzystująca Rosetta 2

Poniższe wykresy pokazują względną wydajność wersji IDL 9.0 Intel i Arm działających na Apple. Intel IDL działa z translatorem Rosetta 2, natomiast wersja ARM działa natywnie. Wyższe słupki oznaczają lepszą wydajność. Wykresy te są najbardziej przydatne dla użytkowników posiadających komputery Mac Apple i myślą o aktualizacji do wersji IDL 9.0. Wykresy nie porównują Intel Mac i Mac Apple, ani komputerów PC z systemem Windows z Mac.

Wszystkie testy zostały przeprowadzone dla konfiguracji Mac Stiudio z M1 Max, natomiast IDL na procesorach Intel wykorzystywał translatora Rosetta 2.

Odczyt i zapis plików
Wydajność odczytu i zapisu jest zdeterminowana przez sprzęt. Dlatego nawet dla trnalacji Rosetty, wersja IDL Intel działa podobnie do wersji ARM. Rozmiar pliku i konstrukcja dysku, np. pamięci podręczne, będą miały wpływ na względną wydajność odczytu i zapisu.


Testy czasu
W przypadku tego wykresu zastosowano procedury IDL „time_test4” i „graphics_times4”, aby uzyskać uogólnioną perspektywę wydajności. Procedury te testują podstawową szybkość interpretera, operacji na tablicach, operacji wej/wyj na plikach, sporządzanie wykresów, wyświetlanie i renderowania fontów. Obie procedury są dostarczane wraz z IDL.


Transpozycja
Poniższy wykres przedstawia liczbę operacji transpozycji macierzy na sekundę. Liczba elementów macierzy testowej jest podwajana z każdą kolejną grupą słupków. Chociaż Intel IDL wypada dobrze w porównaniu z Arm z 4 milionami elementów, to wykreślenie 8 milionów elementów pokazuje, że Arm IDL radzi sobie lepiej ze stosunkiem podobnym do obserwowanego w przypadku 1 i 2 milionów elementów. To pokazuje, że liczba wymiarów i rozmiar macierzy w połączeniu z konstrukcją procesora (np. pamięcią podręczną) rzeczywiście wpływa na wydajność algorytmu.


Szybka transformata Fouriera
Wykres przedstawia liczbę operacji FFT na sekundę. Wszystkie kompilacje IDL oparte na procesorach Intel wykorzystują bibliotekę MKL firmy Intel do implementacji FFT. Kompilacja Arm IDL korzysta z bibliotek Arm Performance Libraries (ArmPL). Jak wspomniano w dokumentacji FFT, liczba wymiarów i ich rozmiary określają wydajność FFT. Niezależnie od tego, IDL skutecznie implementuje FFT zarówno dla wersji Intel, jak i Arm.


Mnożenie macierzy
Poniższy wykres przedstawia liczbę operacji mnożenia macierzy na sekundę. Kompilacja Arm wykorzystuje bibliotekę Accelerate firmy Apple dla procedur LAPACK i BLAS. Umożliwia to mnożenie macierzy w celu wykorzystania niestandardowych jednostek mnożenia macierzy w chipach serii M.


Klasa HttpRequest
IDL 9.0 wprowadza nową klasę HttpRequest, która pozwala na łatwe wykonywanie żądania Get, Post, Put i Delete do serwerów. Nowa klasa obejmuje obsługę wieloczęściowych wpisów w formularzach, uwierzytelniania, niestandardowych nagłówków i wywołań zwrotnych podczas przesyłania lub pobierania (z opcją anulowania żądania).
Na przykład, aby wykonać proste żądanie Get:

params = hash('key1', '2+2', 'key2', 'with spaces')
response = HTTPRequest.Get('http://localhost:3000', params=params, /escape)
print, response.url
print, `status_code = ${response.status_code}`
help, response.text

IDL zwraca:

http://localhost:3000/?key1=2%2B2&key2=with%20spaces%20
status_code = 200
STRING = 'GET /?key1=2%2B2&key2=with%20spaces%20...

Tutaj tworzymy instrukcję z wieloczęściowym formularzem, zawierającym lokalny plik:

multipart = dictionary('key1', 'value1', $
    'key2', {file: 'c:/image.jpg', mimetype: 'image/jpeg'})
response = HTTPRequest.Post('https://httpbin.org/post', multipart = multipart)
print, `status_code = ${response.status_code}`
print, response.json(), /implied

IDL zwraca:

status_code = 200
{
    "files": {
        "key2": "data:image/jpeg;base64,/9j/4AAQ..."
    },
    "form": {
        "key1": "value1"
    },
        "headers": {
            "Accept": "*/*",
            "Content-Length": "1040",
    ...
}

Szczegóły: HttpRequest

Rozszerzenie IDL dla VS Code
IDL ma teraz nowe, nowoczesne środowisko programistyczne, dostępne bezpłatnie w ramach Visual Studio Code. Rozszerzenie IDL dla VSCode można łatwo pobrać i zainstalować ze strony rozszerzeń VS Code. Rozszerzenie posiada następujące funkcje:
  • Spersonalizuj edytor dzięki rozszerzeniom i motywom.
  • Podstawowe wykrywanie typu IDL w celu płynnego automatycznego uzupełniania.
  • Automatyzacja formatowania, dodawania i aktualizacji dokumentacji kodu.
  • Automatyczne uzupełnianie procedur, metod, słów kluczowych i zmiennych.
  • Pomoc po najechaniu myszką zawiera pełną dokumentację IDL, w tym przykłady kodu.
  • Wykrywanie problemów, wykrywa ponad 100 problemów w kodzie bez konieczności kompilacji.
  • Zintegrowany debugger z punktami przerwania lub uruchamiający IDL z wiersza poleceń w terminalu VS Code.
  • Natywna obsługa wielu języków.

Aby uzyskać szczegółowe informacje, proszę odwiedzić stronę IDL for VSCode page.


IDL Notebooks
IDL ma teraz natywny format IDL Notebook i środowisko programistyczne. Notatniki IDL są dostępne bezpłatnie poprzez rozszerzenie IDL for VSCode extension. Notatniki IDL to:
  • Przyjazny format do przechwytywania znaczników tekstowych i kodu w jednym miejscu.
  • Sposób, w jaki nowocześni programiści i naukowcy uczą się programowania.
  • Są bardziej przystępne w porównaniu z tworzeniem plików na dysku i uruchamianiem z wiersza poleceń.

Notatniki IDL można łatwo tworzyć z rozszerzenia IDL dla VSCode. Można także przekonwertować IDL Notebook na program IDL z pełnym komentarzem, który można uruchomić poza VSCode. Notatniki IDL są w pełni natywne, nie są oparte na Jupyterze i nie wymagają Pythona. Więcej informacji można znaleźć na stronie: IDL for VSCode page.


Metoda IDL_String::Dup i IDL_Variable::Dup
Wszystkie ciągi i zmienne IDL mają teraz nową metodę statyczną Dup. Metoda Dup duplikuje wartość skalarną i zwraca nowy ciąg skalarny lub nową zmienną tablicową. Aby uzyskać szczegółowe informacje proszę odwiedzić stronę: IDL_String::Dup i IDL_Variable::Dup.

Słowo kluczowe NAN Matrix_Multiply
Funkcja MATRIX_MULTIPLY ma nowe słowo kluczowe NAN. Ustaw to słowo kluczowe, aby procedura sprawdzała występowanie wartości zmiennoprzecinkowych IEEE NaN lub Infinity w danych wejściowych. Elementy o wartości NaN lub Infinity są traktowane jako równe zero.

Atrybut TYPESIZE dla atrybutów zmiennych
Atrybuty zmiennych statycznych mają teraz nowy atrybut TYPESIZE, który zwraca rozmiar w bajtach pojedynczego elementu tego typu danych. Na przykład:

    IDL> x = 1.5d + 2i
    IDL> print, x.typename, x.typesize
    DCOMPLEX 16
    IDL> x = findgen(1000)
    IDL> print, x.typename, x.typesize
    FLOAT 4

Atrybut TYPESIZE może być przydatny podczas wykonywania niesformatowanych operacji input/output lub konwersji zmiennych do/z bajtów. Na przykład:

    IDL> x = [!values.f_infinity, !values.f_nan]
    IDL> print, byte(x, 0, x.length * x.typesize)
    0 0 128 127 0 0 192 127

Więcej informacji: Variable Attributes.

Aktualizacje
Funkcja ARROW obsługuje style linii przerywanych i kropkowanych
Funkcja graficzna ARROW ma nowe słowo kluczowe LINESTYLE. Ustaw to słowo kluczowe na liczbę całkowitą lub ciąg znaków, określając styl linii strzałki.

Poprawione marginesy dla funkcji MAP
Funkcja graficzna MAP wykorzystuje teraz lepiej domyślne marginesy podczas tworzenia mapy, w zależności od rozmiaru czcionki. Na przykład:

m = map('Geographic', limit=[-7, 104.5, -5.5, 106.5], $
    label_position=0, fill_color='light blue', font_size=12)
mc = mapcontinents(fill_color='light green',/hires)


MODIFYCT umożliwia teraz usuwanie tabel kolorów
Procedura MODIFYCT umożliwia teraz usuwanie bezpośrednich tabel kolorów grafiki poprzez podanie pustego ciągu znaków jako nazwy tabeli kolorów. Szczegóły: MODIFYCT.

TIFF obsługuje teraz kompresję Zstandard (zstd)
Procedury READ_TIFF i WRITE_TIFF mogą teraz czytać i zapisywać przy użyciu kompresji Zstandard (zstd). Ponadto procedura QUERY_TIFF może teraz zwrócić kompresję stosowaną w pliku TIFF. Zstandard to szybki algorytm kompresji bezstratnej, który jest wystarczająco szybki, aby zapewnić kompresję w czasie rzeczywistym. Szczegółowe informacje są dostępne na stronach: QUERY_TIFF, READ_TIFF oraz WRITE_TIFF.

Atrybuty zmiennych obsługują teraz indeksowanie
Atrybuty zmiennych statycznych obsługują teraz indeksowanie tablic bez użycia nawiasów. Na przykład:

arr = fltarr(5,4,3)
print, arr.dim
print, arr.dim[1] ; used to require (arr.dim)[1]

IDL zwraca:

5     4     3
4

Więcej informacji: Variable Attributes.

IDL Python Bridge obsługuje teraz Python 3.11
IDL Python Bridge (IDL do Pythona i Python do IDL) obsługuje teraz Python 3.11.
Połączenie IDL-Python umożliwia łatwy dostęp do procedur i obiektów Pythona w IDL:

IDL> np = Python.Import('numpy')
IDL> coords = np.random.random([10,2])
IDL> x = coords[0,*]
IDL> y = coords[1,*]
IDL> r = np.sqrt(x^2+y^2)
IDL> t = np.arctan2(y,x)

Podobnie, mostek Python-to-IDL pozwala na dostęp do pełnej funckjonalności IDL z opziomu Python:

Python 3.11.4 | packaged by Anaconda, Inc.
>>> import sys
>>> sys.path.append('c:/Program Files/NV5/IDL90/lib/bridges')
>>> from idlpy import *
IDL 9.0.0 (Win32 x86_64 m64).
>>> p = IDL.plot(test=1)
>>> p.color = 'red'

Więcej przykładów nt. IDL Python Bridge.

Aktualizacje bibliotek
Wymienione poniżej biblioteki innych firm zostały zaktualizowane do następujących wersji:
  • Curl 8.4.0
  • ffmpeg 4.4.4
  • Libtiff 4.5.1
  • Libxml2 2.11.5
  • NetCDF 4.9.2
  • OpenSSL 3.0.11

Dodano następujące biblioteki innych firm:
  • c-ares 1.19.1 (Http/2 support for CURL)
  • libev 4.33 (Http/2 support for CURL)
  • nghttp2 1.58.0 (Http/2 support for CURL)
  • IDL Python Bridge support for Python 3.11

IDL 9.0 Obsługiwane platformy:
IDL ma następujące wymagania systemowe:
  • System operacyjny:
    • Windows 10 i 11 (Intel/AMD 64-bit)
    • macOS 12 i 13 (Intel 64-bit (x86_64) oraz M-series (arm64))
    • Linux (Intel/AMD 64-bit, kernel 4.18.0 lub nowszy i glibc 2.28 lub nowszy)
  • Przestrzeń dyskowa: około 4 GB na instalację
  • Pamięć (RAM): minimum 8 GB (1)
  • Liczba rdzeni przetwarzających: minimum 2, zalecane 4 lub więcej

W przypadku systemu macOS wymagany jest menager X-Windows. IDL został przetestowany przy użyciu XQuartz 2.8.5 na chipsecie M1.

(1) Większość możliwości wyświetlania i przetwarzania obrazu w IDL została zaprojektowana do pracy z minimalną ilością pamięci systemowej RAM. Posiadanie dużej ilości pamięci RAM może pomóc uniknąć sporadycznych problemów z alokacją pamięci, szczególnie w przypadku dużych zbiorów danych. Testy wykazały, że 8 GB RAM w zupełności wystarczy do większości zadań uruchamianych przy użyciu najnowszych wersji IDL. Jeśli jednak użytkownik zamierza pracować z bardzo dużymi zbiorami danych lub tworzy niestandardowe aplikacje z kodem ENVI+IDL, należy rozważyć dodanie większej ilości pamięci RAM do swojego systemu.

Obsługa funkcji IDL 9.0
Poniższa tabela wskazuje, które platformy obsługują odpowiednią funkcję. Zakłada się, że technologie IDL niewymienione w tej tabeli działają na wszystkich platformach.

Funkcjonalność Windows
64-bit
Mac
64-bit
Linux
64-bit
COM Object-Export (Export Bridge Assistant)    
DataMiner  
DICOM Network Services    
DICOM Read/Write (IDLffDicomEx)    
DICOM Read (IDLffDICOM)
Internationalization (I18N_*) conversion routines    
IDL Advanced Math and Stats (IMSL Numerical Library) (2)  
IDL Workbench
Java Object - Export (Export Bridge Assistant)
MrSID (IDLffMrSID)    
READ_VIDEO
Remote Procedure Calls (RPCs)  
Video Read (IDLffVideoRead)
Video Write (IDLffVideoWrite)
WIDGET_BROWSER (3)  
WRITE_VIDEO

(2) IMSL wymaga glibc 2.14 lub nowszej
(3) WIDGET_BROWSER wymaga Kernel 3.10.0 lub nowszy, glibc 2.17 lub nowszy, NSS 3.22 lub nowszy

Script logo