Quantlab 3.1.4162 — structured bindings and a lot more since 4155

:rocket: Quantlab 3.1.4162 — structured bindings, hardened WebSockets, and a lot more since 4155

We are excited to round up everything that has landed in Quantlab since the 3.1.4155 curve-distribution release. Eight builds later, 3.1.4162 brings a new language feature, a thread-safe WebSocket stack, richer enum and container support, smarter runtime logging, and a healthy batch of fixes.

Headline: structured bindings (4162)

QLang now supports structured bindings — capture a void function’s leading out arguments directly with auto [n,q] = f(...) instead of declaring each output up front and passing it in. Works for any number of out parameters, supports partial binding from the left, and (like C++17) requires auto.

:right_arrow: Full write-up: Structured bindings in QLang

Language & types

  • [] literal to create an empty vector or matrix with deduced type (4160).
  • map and set constructors that take vectors (4161).
  • Enum template arguments, plus set_enum<>, map_enum_*<> and map_enum_v_*<> containers (4160).
  • JSON support for enums: set_enum<> works with json.print() / json.get_object(), and a new PRINT_USE_ENUM_STR flag prints enums as strings (4159–4160).
  • variant.get_object() now handles inheritance (4160).
  • New compiler warning for return null in a void function (4160).

WebSockets & binary I/O

WebSocket support has matured fast across the span:

  • Rudimentary low-level WebSocket support introduced (4156).
  • Fixes for large payloads and masking/unmasking (4158).
  • Now thread-safe via a dedicated I/O thread — single reader, multiple concurrent writers (4161).

Alongside it, new binary plumbing: in_stream.read_binary(), out_stream.write(blob), and ssl.sha1() (4156).

Runtime logging

  • rt log files now accept naming patterns: %p (process id), %d (date — enables daily rotation), and %n (counter — rotates at 128 MB) (4159).
  • Log lines now include the date (4160).
  • :backhand_index_pointing_right: Quantlab never removes old rt log files — rotation only ever creates new ones.

Dev UI

  • Scintilla editor updated to 5.6.1 (4161).
  • Interrupt long-running debugger watch-expressions (4161).
  • Warning when adding a duplicate library file (4158).
  • Option to not be prompted to save a modified session (4156).
  • More robust when ui-2.4 resets an eval-unit with a parse error (4158).
  • Fixed a find-references-to-function crash on compile error (4162).

Fixes & housekeeping

  • LLVM backend bumped 21.1.4 → 22.1.3 (4156, 4161).
  • rgb() is now an inlined intrinsic, enabling constant-propagation (4159).
  • Fixed crash on a freestanding empty [] vector literal (4161).
  • Fixed HTTP responses with a 1xx status incorrectly carrying a body (4157).
  • map_*_int.find() takes a not_found argument, defaulting to -1 (4156).
  • DRIVER= is now case-insensitive in the ODBC connection-string hack (4162).
  • License tweaks: user + addresses shown in the expiry popup (4158); license check ignores issue_date (4161).

:grinning_face_with_smiling_eyes: And one for the trivia pile: 4159 shipped tagged Version pi! — 3.14159.

Quantlab 3.1.4162 is available now. :right_arrow: Upgrade today to pick up structured bindings, the hardened WebSocket stack, and every fix above.