NeXtMidas 4.1.0 Release Notes

(This release series will transition to only supporting Java 11 (or later) to build and run by default.)
(We do anticipate providing a means to swap to Java 8 compatible code.)


NeXtMidas SYS Option Tree Tested on:
(tests with Java 8, 11, 17)
OS Version Platform Native Compiler(2)
(SYS Option tree)
Web Browser
(WebStart/Applet)
Fedora 34 Linux (x86_64) gcc 4.8.5
openSUSE Leap 42.2 Linux (x86_64) gcc 11.1.1
RHEL/CentOS 7.7 Linux (x86_64) gcc 4.8.5 / Intel 19
RHEL/CentOS 8.0 Linux (x86_64) Intel 19
Windows 10 Pro Windows (x86_64) pre-compiled DLLs (WinGW 5.3.0/gcc 4.9)

XBC And NeXtOpt Tested on:

(XBC - Allows running of X-Midas Fortran/C++ primitives in NeXtMidas)
(NeXtOpt - NeXtMidas as an option tree for X-Midas)
(tests with Java 8, 11, and 17)
OS Version Platform X-Midas Mode C/C++ Compiler(2) Fortran Compiler
RHEL/CentOS 7u7 Linux
(x86_64)
NeXtOpt (X-Midas 5.6.1) gcc 4.8.5 / Intel 19 / Intel oneAPI 2021 gfc with DEC FORTRAN ext. 4.8.5 / Intel 19 / Intel oneAPI 2021
NeXtOpt (X-Midas 5.6.0) gcc 4.8.5 / Intel 19 / Intel oneAPI 2021 gfc with DEC FORTRAN ext. 4.8.5 / Intel 19 / Intel oneAPI 2021
NeXtOpt (X-Midas 5.5.0) Intel 19 Intel 19
NeXtOpt (X-Midas 5.4.3) gcc 4.8.5 / Intel 19 gfc with DEC FORTRAN ext. 4.8.5 / Intel 19
NeXtOpt (X-Midas 5.4.2) gcc 4.8.5 / Intel 19 gfc with DEC FORTRAN ext. 4.8.5 / Intel 19
NeXtOpt (X-Midas 4.16.1) gcc 4.8.5 gfc with DEC FORTRAN ext. 4.8.5
XBC ("64Bit") gcc 4.8.5 / Intel 19 / Intel oneAPI 2021 gfc with DEC FORTRAN ext. 4.8.5 / Intel 19 / Intel oneAPI 2021
Fedora 34 Linux
(x86_64)
XBC gcc 4.8.5 gfc with DEC FORTRAN ext. 4.8.5
See Known Third-Party Bugs to see why JDK 8u20 to 8u31 are not supported. The 64-bit version of Java should be used when running on a 64-bit system. All tests use the Java VM from Oracle (see http://java.oracle.com/).
(2) $NM_CC and $NM_CXX was set to point to the Intel C/C++ compiler (icc and icpc), where applicable.

Online Documentation

Java 11 Migration

What Might Break (Changes in Behavior)

COMMAND or Library - description

New Features Added

Intel oneAPI 2021 - As of 4.0.1, XBC and NeXtOpt have been tested with Intel oneAPI 2021. Intel oneAPI provides a free version of Intel that does not require a license to use it.
New Commands - COMMAND;SYS - description
Macro/Shell Enhancements - COMMAND: description
Libraries - Library - nxm.sys.lib.Library description
Gradle Support - Support has been added to convert NeXtMidas to a gradle directory structure. Please find instructions located at $NMROOT/gradle/readme.txt
NOTE: This feature is in beta and may have issues. Please provide feedback.
Existing Commands - The list below contains NeXtMidas commands. Each command is listed with the new feature that has been added at the request of the user.
  - COMMAND
  • description
  - PLOT
  • New LayerWMS RequestVersion This WMS option must be set before the URL is specified. LayerWMS defaults to preferring the latest WMS version supported (i.e. 1.3.0). This option allows an easy override to force a preference for version 1.1.1. (4.0.0)

Known Third-Party Bugs and Limitations

The following are known third-party bugs and limitations that may cause problems for NeXtMidas users.
JDK 17.0.1 libsvml.so name conflict (JDK-8276025) - JDK 17.0.2 has fixed a 17.0.1 issue caused by Java adding a library with a name conflict with a common native library. 17.0.1 causes the XBC option tree build to fail with an UnsatisfiedLinkError.
Reflective Access JDK 9+ (warning) JDK17+ (error) - Warnings are thrown for illegal access using reflection in Java 9 and up and errors in JDK17 and up. When running from When the running via the NeXtMidas start script, the jvm options shown below are included and there are no warnings or errors. To bypass the warning/error, add this to the jvm runtime options:
--add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED
For more information please visit Oracle JDK 14 Documentation
RHEL 8 GCC 8.5.0 - We have put in a workaround in rmif.for for a bug in the GCC FORTRAN compiler that comes with RHEL 8. This allows our NeXtOpt code to build and run, but please let us know if you experience any further issues building and running with this compiler. Fritz Reese has narrowed down this bug and states: The compiler crash (ICE) is triggered by STRUCTURE /PACKETSTRUCT/ having 8 fields followed by a UNION. When –fdec is combined with –finit-derived and –finit-local-zero, some code in the compiler creates a bad initializer for instances of PACKETSTRUCT which leads to invalid memory access. It turns out this happens because the routine that adds an element to the field initializer vector for unions uses an insidious macro which apparently modifies the vector pointer on resize; the default size of this vector is 8 elements, so upon adding the 9th field initializer the vector is resized by allocating a new vector, copying the elements over, freeing the old vector, and reassigning the pointer variable. Since the union routine took the vector pointer as an argument (by value), the caller’s vector pointer wasn’t updated after the resize, and therefore the caller’s idea of the vector was a pointer to freed memory. Chaos ensues later at random points in the compiler which deal with this initializer vector during optimization, finalization, etc... Unfortunately, because of the nature of this bug, subtle changes in how the compiler visits the initializer trees and how other memory is allocated can mask the bug, so there’s no guaranteed workaround other than to ensure there’s no union which is after the 2*8^n-th field (9th, 17th, etc…) in a structure.
VNC - It has been noted by users that NeXtMidas will not function in a VNC session if the -depth option is set to 32. 32 is an invalid color depth, valid -depth option settings are 8, 16, and 24. We recommend the default -depth setting of 16.

Known Issues

StateVector - The CubicHermite (the default in NeXtMidas 3.2) and QuinticHermite (optional in NeXtMidas 3.3) interpolation options do not appear to be working properly, particularly at the first and second derivative. At this time it has not been confirmed if the issue is due to a bug in the interpolator or just the results from using bad test data (i.e. sv1.prm which came from X-Midas). This affects both the StateVector library and the SVINTERP function in CONVERT which uses it. The suggested work-around is to use the Linear interpolation option until this issue is resolved.
CALL - A SUBROUTINE does not have limited scope, scope is the same as procedure.
CONVERT - Tables created by the XML2TBL function may appear to "drop entries" when dereferenced. Since XML2TBL is deprecated, this will not be fixed, use the XML2TAB in place of XML2TBL.
GCONTROL - Some controls do not support headless mode.
LIST2 - The table for a /LEGACY select message may contain "extra" fields.
  - Row/cell selection is undefined when listing a pipe.
  - Type 2000 files with very large frame size may not load properly.
NeXtOpt - NeXtMidas commands run from inside an X-Midas macro (specifically when using PIPE or XPIPE) may exit prematurely. For example a NeXtMidas intrinsic run from the INITIALENTRY of a controls section can cause the pipe to stop prematurely.
  - May get warnings about problems mapping to the messages section if the X-Midas message queue is not up.
  - Timecode readout for large Type 2000 may give t=00:00:00.
  - Java has removed support for Webstart in JDK 11
XBC - XBC does not support running two copies of the same command simultaneously.
  - Do NOT use "-check all" with the Intel compliers because some of the legacy fortran libraries make assumptions that are incompatible with "-check all" causing unnecessary aborts (SEGFAULT).

Bugs Fixed

All NeXtMidas issues and enhancements are tracked using a bug tracker/database. GForge DR number is included for all customer-submitted bugs. GForge entries are listed "n/a" for bugs that are duplicates or internal use.


Bugs Fixed in Release 4.1.0 (dd MMM 2022)
JIRA Issue GForge DR Description
NXM-#### ######-## summary

Deprecated Functionality

The following functionality has been deprecated and will be removed from future versions:
Command Deprecated Item Replacement Deprecated Since
PLOT ZOOM and DRAGBOX messages accessed with msg.data(0), msg.data(1), etc. Use msg.data.xmin, msg.data.xmax, etc. 2.3.0
STATISTICS IMEAN= MEAN= (contains real and imaginary values, see explain file) 2.3.0
CONVERT The XML2TBL and TBL2XML functions. Use XML2TAB and TAB2XML. 2.5.0
UPDATE Command dictionary entries without '*' denoting minimum allowable abbreviation. Include a '*' at the end of the command name in the dictionary if no abbreviation is allowed, otherwise note abbreviation as desired. 2.5.0
TextFile Automatic enabling of NOABORT flag. Use NOABORT or FORCEABORT flags as required. 2.5.0
TextFile Automatic conversion of INOUT flag to OUTPUT when file not found. Use INOUT or OUTPUT flags as required. 2.5.0
Results Use of A: with results. Use S:, behavior of A: will change in future releases. 2.5.2
DataFile Use of CREATOR= main header keyword. Use IO= and VER= keywords. 2.5.3
public fields in baseline classes All public fields in classes in option trees (SYS, DSP, UCL, etc.) included in the baseline (e.g. nxm.sys.lib.BaseFile, nxm.sys.lib.DataFile, nxm.sys.lib.Shell, etc.) have always been meant for read-only and/or internal use only. Some fields may transition to protected or private in favor of the get/set methods as early as 3.9.0. Use appropriate public get/set methods. 3.5.1
PLOT All public fields in nxm.sys.prim.plot, nxm.sys.libg.MPlot, nxm.sys.libg.Layer* (e.g. Layer1D, Layer2D, etc.) have always been meant for internal use only. Most will transition to protected access but will still be for internal use only. Use appropriate public get/set methods. 3.5.1
As of release 2.2.0 LIST is considered to be an "End of Life" primitive. The LIST primitive is scheduled for replacement by LIST2 in future releases.
See $NMROOT/htdocs/api/sys/deprecated-list.html for a list of deprecated library methods.
Deprecated functionality will continue to function for one year or two stable releases after first being marked as deprecated, but its use may result in a deprecation warning (either at compile time or run time). After one year, any deprecated functionality is subject to removal.

(Back to Release Notes Summary)