What's New in OMNEST 5.4.1
Highlights of this release are an improved message compiler (required for INET 4), much improved histogram support; a more powerful cMessagePrinter API and its implementation in Qtenv; better support for smooth animation in Qtenv; typename and exists() operators in NED; nan and inf keywords in NED; support for logarithmic units like dB, dBW, dBm, dBV, dBmV. Qtenv has also gained much more powerful just-in-time debugging capabilities than before. Details follow.
NED:
Allow 'typename' in expressions. Motivation: we want to be able to write: foo: <> like IFoo if typename!=""
Added the "exists" operator. Syntax: exists(
) Introduced "nan" and "inf" as keywords for numeric constants
Core:
-
Revised message compiler, added import support and more. See src/nedxml/ChangeLog for details. Use --msg6 to turn on the new features.
-
cPar: integer representation changed from long to int64_t. See src/include/omnetpp/ChangeLog for details.
-
Evaluation of NED expressions now uses integer arithmetic when operands are integers. Conversions that incur precision loss should now be explicit: converting a double to integer requires the int() cast; also, converting an int to double will raise an error if there is actual precision loss, and you can suppress that error by explicit double() cast. There are many smaller-scale changes related to this change — see include/omnetpp/ChangeLog for details.
-
cHistogram has been replaced with new implementation. (The old one is still available under the name cLegacyHistogram.) The new cHistogram is more general (supports arbitrary bins), more configurable, and produces much higher quality histograms even in the default setup due to newly introduced techniques such as adaptive precollection, bin size rounding and bin edge snapping, auto-extension with new bins, bin merging to keep the number of bins optimal, etc. Histogram operation can be customized via histogram strategy classes (cIHistogramStrategy); several histogram strategies are provided.
-
In recording histograms with @statistic, the number of bins can be specified by adding numBins=nn: @statistic[x](record=histogram;numBins=100). The actual number of bins produced might slightly differ, due to auto-extension and bn merging during result collection.
-
cMessagePrinter: API was extended with tags and column names
-
cCanvas: added getAnimationSpeed(); better documentation for setAnimationSpeed() and holdSimulationFor().
-
cHistogram, cNedValue: minor changes in the public API
-
Result recorders: Added "timeWeightedHistogram" recorder
-
SimTime now has a new method named ustr() that prints the time in an appropriate unit. It is now used in cClassDescriptor for displaying simtime_t fields and at a few other places.
-
SimTime: more precise computation for integer-SimTime division.
-
Measurement units are now available as NED functions as well. They accept dimensionless numbers and quantities with a compatible unit. E.g. the expressions mW(2*100) and mW(0.2W) both result in 200mW.
-
New measurement units: K, Ohm, mOhm, kOhm, MOhm, uW, nW, pW, fW, THz, kmps, binary and decimal multiples of bit (Kib, Mib, Gib, Tib, kb, Mb); deg, rad; pct (percent), ratio.
-
Support for logarithmic units: dBW, dBm, dBV, dBmV, dBA, dBmA, dB. Conversion between logarithmic and corresponding linear units (W vs. dBW) is supported. Conversion between bit and byte (and multiples) is also supported.
-
cPacket: refined str() method
Qtenv:
-
Implemented support for the improved cMessagePrinter Options API, and added a respective configuration dialog.
-
The log viewer now supports ANSI control sequences for text styling: foreground/background color, and bold/italic/underline text. Styling is supported in both message history view and log view, i.e. it can be used in text returned from cMessagePrinter and logged by the EV and other logging macros.
-
Rewritten the controller for smooth animation. The new algorithm is now able to scale linearly, as long as the simulation can keep up.
-
Usability improvements in the Animation Parameters dialog, e.g. it now also displays the current simulation speed, and it is colored red if the simulation cannot keep up with the requested animation speed.
-
Histogram inspector: visualize outlier bins (drawn with a different color than normal bins), and show info about them. Fix numeric overflow when large numbers (>= 2^64) are shown.
-
Histogram inspector: visualize outlier bins (drawn with a different color than normal bins), and show info about them. Setting up the bins while in the precollection phase can be forced from the GUI. Fix numeric overflow when large numbers (>= 2^64) are shown.
-
Histogram result objects are easier to locate on the GUI, and are now also found by the Find/Inspect dialog.
-
Made statistic recorders "findable" from Qtenv
-
Debug-on-error functionality can now be turned on interactively, via the Simulate -> Debug on Errors menu item.
-
When an error occurs and debug-on-error is enabled, Qtenv now offers to launch and attach an external debugger unless the simulation program is already being debugged. The same applies to the Debug Next Event functionality. External debuggers can be configured with the debugger-attach-command configuration key, and can also be overridden with the OMNETPP_DEBUGGER_COMMAND environment variable.
-
Workaround for a crash with Qt 5.11.
Tkenv:
-
The Tcl/Tk based runtime interface is now deprecated and turned off by default. It will be removed in future OMNEST versions. You can still enable it in configure.user by setting WITH_TKENV = yes, but we strongly suggest using Qtenv instead.
IDE:
Launcher: fix: The IDE sometimes started build in the UI thread, locking up the UI for the time of the build, potentially for several minutes.
- Fixed "unknown" image as module background in the graphical NED editor.
Fix: do not report "undefined parameter" for typename assignments in NED
Fix: inifile analysis: typename deep assignments in NED were ignored
Toolchain and dependencies:
-
Updated toolchain on Windows (clang 5.0.1, gcc 7.3, gdb 8, osgEarth 2.7)
-
Updated toolchain on macOS (OpenSceneGraph 3.2.3, osgEarth 2.7)
-
OMNEST now requires osgEarth 2.7 or later (check the Install Guide for further instructions on how to upgrade osgEarth.)
Tools:
-
opp_runall, opp_fingerprinttest, opp_test: portability fixes for Windows and macOS
-
opp_fingerprinttest: fix: error messages from the simulation did not appear
-
'march=native' and 'mtune=native' compiler options are no longer used by default for a release build, because on certain CPUs this caused rounding differences so simulations ran on a different trajectory depending on the actual CPU used.
Samples:
-
canvas: Added smooth animation with CarAnimator::refreshDisplay().
-
osg-earth, osg-satellites: Switch from ObjectLocator to GeoTransform. The former was removed after osgEarth 2.8, and the latter has been around for quite some time now.
Documentation:
-
Documented smooth animation in detail, and updated the section on statistical data collection classes (cStdDev, cHistogram) in the Simulation Manual.
Plus several bug fixes.