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.
Full write-up: Structured bindings in QLang
Language & types
[]literal to create an empty vector or matrix with deduced type (4160).mapandsetconstructors that take vectors (4161).- Enum template arguments, plus
set_enum<>,map_enum_*<>andmap_enum_v_*<>containers (4160). - JSON support for enums:
set_enum<>works withjson.print()/json.get_object(), and a newPRINT_USE_ENUM_STRflag prints enums as strings (4159–4160). variant.get_object()now handles inheritance (4160).- New compiler warning for
return nullin avoidfunction (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
rtlog 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).
Quantlab never removes old rtlog 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 anot_foundargument, 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).
And one for the trivia pile: 4159 shipped tagged Version pi! — 3.14159.
Quantlab 3.1.4162 is available now.
Upgrade today to pick up structured bindings, the hardened WebSocket stack, and every fix above.