For links to What's New information for other IDL 8.x releases, go to See Also.

New Features


Automatic Check for Updates

IDL now has a mechanism to automatically check for updates on startup. If a new version is available, IDL will report this in the output console. This feature may be enabled or disabled using the new IDL_UPDATE_CHECK preference or by using the Preferences dialog in the IDL Workbench.

IDL Tasks

IDL Tasks are an object-oriented API to encapsulate IDL procedures.

IDL Tasks provide the following to users:

  • One entry point for users through IDLTask function.
  • Stores all input and output in the IDLTask object for easy access.
  • Discover available tasks through QueryTaskCatalog Task.
  • Provides introspection to learn about the input parameters and their requirements.
  • Provides validation of input for expected data types, available choices, ranges, and any additional constraints a task has defined.

IDL Tasks provide the following to developers:

  • Create new procedures and allow IDLTask to validate inputs instead of having to write additional code in the routine.
  • Allows wrapping existing libraries as IDL Tasks by creating a task file (*.task) that maps to library routines.
  • Provides information on each parameter on direction, expected data types, available choices, ranges, and more.
  • IDL Tasks can be executed from other programming languages; see IDL Task Engine for details.

    If you have an application using the IDL Task Engine and want task information, use QueryTask Task and QueryAllTasks Task.

See Custom Tasks for details on creating tasks.

IDL Task Engine

In addition to the introduction of IDLTask, an IDL Task Engine has been provided to run IDLTasks in command-line environments. You can plug IDL into applications in different programming languages or environments that share information. The environments must be able to handle standard streams (stdin, stdout, and stderr).

NCDF_PARSE

You can use the new NCDF_PARSE function to parse through a NetCDF-3 or NetCDF-4 file and return the contents as a hash containing all of the file information and data.

NCDF_IS_NCDF

The new NCDF_IS_NCDF function will let you determine if a file is in the NetCDF-3 format.

New Licensing Method

IDL licensing is now managed through a 3rd-party solution from Flexera Software. You obtain the license through a portal hosted by Flexera, then you can choose to activate the license on a license server or on an individual node-locked machine. Details about licensing IDL are documented in a standalone topic outside this Help.

Updates


C Printf-Style Format Strings

When you use a C printf-style format string with IDL's input/output routines, you can now specify the string directly without the need for extra parentheses or the opening % character. For example, instead of:

PRINT, INDGEN(3), FORMAT = '(%"The values are: %d %d %d")'

you can now simply write:

PRINT, INDGEN(3), FORMAT = 'The values are: %d %d %d'

For backwards compatibility you can still use the older style. For more details see Using Formatted Input and Output.

Graphics Font Improvements

The graphics functions now use the DejaVuSans font by default. This produces better-looking text in plots and visualizations. If desired, you can use the FONT_NAME property to switch back to the default "Helvetica" font. See PLOT, TEXT, or any of the other graphics functions for details.

New TrueType Fonts

IDL now comes with four new fonts: DejaVuSans Italic, DejaVuSans Bold, DejaVuSans Bold Italic, and a custom DejaVuSymbol font which includes many useful math symbols. These fonts can be used with direct, object, or new graphics, and can also be accessed through the Embedded Formatting Commands. See Using TrueType Fonts for a map of the new DejaVuSymbol font.

Enhanced TeX-like Math Symbols

The TEXT graphics function now uses the new DejaVuSymbol font for math symbols. See the TEXT function for details.

Python-to-IDL Bridge Error Handling

In the Python-to-IDL bridge, when an IDL command encounters a syntax or runtime error, the bridge will now throw an IDLError exception and halt execution of your Python script. You can use the standard Python try/except block to catch these errors if desired. See the Python to IDL Bridge documentation for details.

Note: To take advantage of the new error handling, when you import the "idlpy" library into Python you should now import the entire module, not just the IDL class:

>>>from idlpy import *
...
>>>IDL.run('print, 2+')
---------------------------------------------------------------------------
IDLError                                  Traceback (most recent call last)
...
IDLError: % Syntax error.

IDL IPython Notebook Now Supports Multi-line Blocks

The IDL IPython (Jupyter) Notebook now supports multi-line IDL code blocks. You can now include statements such as FOR BEGIN/END or IF/THEN blocks, or even compile functions and procedures. See the IDL Notebook Kernel for details.

IDL IPython Notebook Now Supports Magic Commands

The IDL IPython (Jupyter) Notebook now supports magic commands that control the notebook behavior. The available commands allow you to embed HTML, run arbitrary Python code, and switch from inline to windowed graphics. See the IDL Notebook Kernel for details.

Skip Existing Routines when Compiling or Restoring

Normally, when you compile a file in IDL or restore a SAVE file, all of the new routines will replace any existing routines. This can cause issues if you have an application that is already running (ENVI for example) and you restore a SAVE file that contains old code. To avoid this issue, you can use the new SKIP_EXISTING keyword on RESTORE, RESOLVE_ROUTINE, and RESOLVE_ALL.

SYSTIME Has New Elapsed Seconds Keyword

The SYSTIME function has a new ELAPSED keyword which replaces the ElapsedSeconds argument. The SecondsFlag and ElapsedSeconds arguments have been obsoleted but will continue to work in existing code. New code should use the SECONDS and ELAPSED keywords instead. See SYSTIME for details.

High-Precision Repeating Timer

You can now create a timer that will repeat at precise intervals, regardless of the time that IDL spends processing the timer callback. See the new REPEAT keyword in Timer.Set.

Library Updates


  • The cURL library has been updated to version 7.49.1.
  • The OpenSSL library within cURL has been updated to version 1.0.2h.
  • The Python bridge now supports Python 3.5.