v270 - 2024/03/01
- Compiler: fixed a potential crash bug when accessing fields of reference type in other object instances within a shared implementation
- Runtime: fixed a memory leak in event dispatcher clean up during object destruction
- Standard library: fixed a memory leak in TCPMonitor.wait()
v269 - 2024/01/19
- Compiler: fixed a set of memory leaks
- Compiler: fixed a bug when multiple implementation scopes had a local function of the same name, which could cause the wrong function to be invoked
- Runtime: fixed a potential crash bug in performance profiler for systems which generate and pass events from native libraries
- Standard library: added line number, word-wrap, and auto-indent support to ui.TextArea
- Standard library: added ui.TabList widget, for tabbed interface designs
- Standard library: added ui.HotKeyButton, to support application-wide hotkeys
- Standard library: fixed a bug in getPosition() on ui.Window which would return inaccurate coordinates
v268 - 2023/12/20
- Compiler: added code generation optimisations, which reduce execution time of common program types by up to 30% on x86_64 platforms
- Runtime: adjusted ownership of destructor stack frames for cleanup to be owned by the callee, which provides slight performance improvements
- Standard library: added OpenCL support for GPU-accelerated computation, via the io.compute package, with a set of example programs
- Standard library: added data.qdb package, a simple database written in Dana, with a query interface based on Dana type definitions
v267 - 2023/11/20
- Compiler: added assertions and error messages on illegal type access operations for native libraries
- Compiler: added a compile error for functions declared outside of implementation scopes, in multi-implementation components
- Compiler: fixed an internal compiler state machine error being printed on detection of undeclared variables in constructor call parameters
- Runtime: fixed accuracy of the performance profiler's GC statistics under multi-threading
- Runtime: added destructor tracking in performance profiler's statistics
- Runtime: fixed mis-counted GC cycle scans in performance profiler's report of entry-point main() function
- Standard library: added DateUtil.makeString() function, to support printing of date/time instances in various formats
- Standard library: added a setup app to help with configuring basic Dana options such as keyboard type
- Standard library: fixed a bug in pal.Assembly which could gain duplicate compositionl options when new components are added to the pool at runtime
v266 - 2023/10/20
- Compiler: added -wd parameter to set the compiler's working directory
- Compiler: fixed an obscure internal compiler error being printed on detection of particular syntactic errors
- Compiler: fixed a -gni bug which yielded syntactically invalid C code when handling multi-dimensional array types
- Compiler: fixed additional memory leaks
- Standard library: added a direct rendering framework, in ui.FlowRender, ui.FlowCanvas, and ui.FlowFont, for render loops in applications like video games
- Standard library: fixed a bug in composition.RecursiveLoader which failed to account for semantic variants specified on the optional ignoreList
v265 - 2023/09/06
- Compiler: fixed a set of significant memory leaks
- Compiler: fixed a bug, introduced by recent compiler re-architecture work, where the compiler always returned 0 to the OS (even in compile-error cases)
- Compiler: fixed a bug where the compiler would fail to provide an error for 'new Data() from X', where the data construction has parameters
- Compiler: added an error message for cases where function parameters contain extra tokens
- Runtime: fixed a potential crash bug when trying to use dana.serial() on a static-sized array
- Runtime: fixed a bug in which constructing a 'dec' array from another dec array of alternative dec size would result in erroneous values
- Standard library: added a data.Dec512Util interface, supporting conversion to/from strings for large dec types
v264 - 2023/08/04
- Compiler: fixed a bug in which dot-notation that followed a precedence-based expression was not properly parsed
- Runtime: added -xd option to disable exception printing from a specific component or components
- Runtime: fixed a bug in dynamic field assignment, which failed to copy the content of a fixed-size array RHS into a variable-size array LHS
- Standard library: added optional reuseAddress parameter to TCPServerSocket.bind(), to support immediate address re-use (avoiding any OS-imposed wait times)
- Standard library: added support for non-blocking TCP sockets, via net.TCPMonitor
- Standard library: added support for non-blocking UDP sockets, via net.UDPMonitor
- Standard library: added support for non-blocking TLS connections
- Standard library: added sec.auth.X509Parser, to parse X509 certificates
- Standard library: added an optional starting-index parameter to StringUtil.find() functions
- Standard library: added a -help command-line parameter to ws.core, to print program-usage information
- Standard library: added an alternative, non-blocking, request handler to ws package
- Standard library: updated docgen style for a more compact package documentation
- Standard library: added a command-line option to pal.rest to exclude specific components from the initial composition search
- Standard library: added IDC.enableExceptions() to support enabling/disabling exception-printing from a given component
v263 - 2023/07/14
- Compiler: fixed a potential crash in cases where a component declares itself to provide an internally-declared interface type
- Compiler: added deprecated API, function, and constant warnings, to aid with code evolution as APIs change
- Runtime: fixed IDC.wire() result logic, now returning false on failure
- Standard library: fixed errors in composition.OptionBuilder and pal.Assembly when handling proxies which have the same implementation but different parameters
- Standard library: removed pal.Assembly's constraints on permitted characters inside proxy parameter strings
- Standard library: pal.rest now supports any runtime-standard way of specifying an object file to execute
- Standard library: fixed a potential failure for pal.rest to exit gracefully when the target program has ended
- Standard library: added media.image.ImageTransform, to crop PixelMap-based images
v262 - 2023/06/18
- Compiler: added a command-line parameter to specify the interface type-name for which to generate a native interface C file, in cases where this is not the first declared type
- Compiler: added the command-line option -n to support compile-iff-new, for faster project (re)compilation
- Compiler: fixed a set of potential crash bugs when compiling an entire project, if one source file has errors
- Runtime: fixed an issue in which the same manually-specified component linkage (e.g. in a manifest file) could be loaded multiple times if they have different relative paths
- Runtime: added a warning when manifest files refer to a non-existent component
- Standard library: added a simple object-relative layout manager to the ui package, in ui.Layout
- Standard library: added data.ArrayUtil API for common array manipulation operations
- Standard library: added findIndex and findFirstIndex to data.query.Search
- Standard library: improved general robustness of stats.chart implementations
- Standard library: added getPixels() call to ui.Window, to support capturing the window content as a pixel map
- Standard library: added a Window ico format ImageEncoder implementation (currently supporting only PNG-encoded ico files)
- Standard library: added time.ClockHD API to access high-precision clock data
v261 - 2023/04/21
- Compiler: fixed a potential failure to generate -gni .c files when a source file has required interface instantiations
- Compiler: fixed a potential crash when compiling a break statement inside a mutex block
- Compiler: fixed a compile bug when AdaptEvents is implied as necessary on a sub-type
- Runtime: added an extra optional parameter to -lc to specify the required interface name of the target component
- Runtime: fixed an error in performance profiler on OS X, which reported 0ms for every call
- Standard library: added package-oriented documentation view to docgen
- Standard library: added support for package-overview documentation in docgen, using _xpacdoc folders and markdown files
- Standard library: added support to pal.ProxyLoader for specifying an override provided-interface on the proxy instance
- Standard library: UI framework now provides automated mouse capture for move/up events when the mouse is outside a window's bounds
- Standard library: added os.Semaphore API for OS-level semaphores
- Standard library: added Assembly.getConfig() function
- Standard library: added safe handling of component loading failure during PAL-driven adaptation
v260 - 2023/03/17
- Language: disabled launching of object calls directly in asynch mode, which leads to confusing lifecycle management
- Runtime: fixed a garbage-collection bug in dana.sub() which could clear the origin array's cells when the sub-array is cleaned up
- Runtime: added object thread cleanup status to memcheck logging (this can help to debug hanging threads)
- Runtime: fixed a potential crash in performance profiler statistics printing, and cleaned up hierarchy output format
- Standard library: fixed a missing content-type in 404 responses from ws.core, which could cause some browsers to use inferred (and incorrect) content-types
- Standard library: added table-of-contents support to MarkdownToHTML API
- Standard library: added ui.TextArea API/component, for multi-line text entry
- Standard library: added support for placeholder text to ui.TextField
- Standard library: added support for hiding the mouse cursor in the standard UI framework
- Standard library: added support for mouse-wheel events in UI framework
- Native libraries: fixed an issue in UI/SDL library on Linux which would fail to render window contents correctly when switching into full-screen mode
v259 - 2023/02/10
- Compiler: fixed a bug in which the compiler could fail to report warnings when a compile otherwise succeeded
- Standard library: updated pal.Perception to allow optional overwriting of metrics/events, rather than cumulative values
- Standard library: fixed a bug in pal.Assembly which could fail to unload (dereference) components that are no longer in-use
- Standard library: fixed a bug in composition.Search which used the DANA_HOME environment variable directly, instead of System.getDanaHome()
- Standard library: fixed a bug in net.http.HTTPRequest when parsing IPv6 endpoint addresses
- Standard library: improved image quality when ui.Image is re-scaling images
- Standard library: updated ui.Panel to disable repainting for single-repaint effects when many objects change in the panel at the same time
- Standard library: added a range of new drawing functions to ui.Canvas, including thick lines, polygons, ellipses, arcs, and bezier curves
- Standard library: added support for mouse cursor changes to the UI framework
- Standard library: added support for multi-click (e.g. double-click) detection in the UI framework
- Native libraries: fixed a bug in DNS native library on Windows, which could fail to self-resolve an IPv6 address passed into getHostName()
- Native libraries: fixed an issue in GUI library which would not send a mouse click to graphics widgets when that click focused the window
v258 - 2022/12/02
- Language: 'alias' fields on interface definitions now uniformly include the semantic variant
- Runtime: fixed a bug in IDC.getRequires()/getProvides() which could fail to correctly report interface packages, when multiple interfaces started with the same string
- Runtime: fixed a potential crash bug following an interceptor hot-swap
- Runtime: the working directory is now included in search locations for native libraries (useful in cases where the working directory is different to the launch-home directory)
- Standard library: reworked pal.Assembly architecture to support general proxies, and use a simplified model of shared interface implementations
- Standard library: performance enhancements to PAL framework, which locates compositions around 10x faster
- Standard library: added data.Permute interface, to aid in iterating through a set of permutations expressed as an array of integers (where each array cell has a max value)
- Standard library: added an optional parameter to Loader:load() to indicate whether or not automated wiring against VM-provided interface implementations should occur
- Standard library: removed System:setAutoBind() function; this option is now presented per-component-load via Loader:load() as above
- Standard library: added a flags field to InterfaceSpec as returned by IDC:getRequires(), to note if a required interface is native
- Standard library: moved AdaptEvents into the lang package, as it's referenced directly by the compiler
v257 - 2022/10/23
- Compiler: fixed a case in which the compiler could fail to report an undeclared variable when used with arrayLength
- Runtime: Windows runtime now has a direct-to-GUI version (danaw) to launch without a console
- Runtime: native library API now reports exceptions when trying to access parameter indices that are out of range, or access parameters with the wrong type accessor, or return values of the wrong type class
- Runtime: added an exception to dynamic call instruction, in case a parameter instance is not passed in (which must be true even for functions with no parameters)
- Runtime: runtime now exits immediately if a runtime-linked dependency cannot be found
- Standard library: added setup() function to ws.Web, allowing web apps to perform initialisation logic
- Native libraries: fixed a bug in file system native library which could crash when trying to copy a file into a non-existent directory
v256 - 2022/09/23
- Compiler: fixed additional crash bugs introduced by recent compiler architecture changes for in-memory compilation
- Compiler: fixed a case in which the compiler could fail to correctly calculate line numbers, causing stack traces with missing entries
- Compiler: fixed a case in which the compiler could fail to apply correct syntax conversions on an optional function parameter specified by name
- Runtime: added detailed exception messages for type mismatches when failing to wire against native library code
- Runtime: fixed a potential crash when trying to assign to an index of a null array
- Standard library: fixed a bug in composition.Intercept which could fail to correctly remove an interceptor
- Standard library: added parsing.TypeParser, which can parse Dana types from source code
- Standard library: added ws.forms.Encoder, to support web form encoding
- Standard library: added io.Input:readlnSecret(), to support reading secret values (such as passwords) from the command line
- Standard library: added data.StringUtil:lsplit()/rsplit(), to support quickly splitting off parts of strings
- Standard library: added ws.DocStream:isEncrypted(), to check whether or not a connection is using HTTPS
- Standard library: added TLS/HTTPS support to net.http.HTTPRequest
- Native libraries: standard library 'resources-ext' directory moved into the Dana-home components directory, for consistency with local projects
v255 - 2022/07/12
- Compiler: fixed a set of crash bugs introduced by recent compiler architecture changes for in-memory compilation
- Compiler: fixed a C compile warning that could occur in native interface generated code (via -gni), for interfaces with no event sources defined
- Compiler: fixed a bug in native interface type generation which failed to added F_CHAR and F_BOOL flags to appropriate type entries
- Runtime: added a new command-line option -lc to directly specify a component to link against for a particular interface type
- Runtime: fixed a potential crash when a native library attempts to allocate an array which is too large to fit into memory
- Standard library: improved handling of 'system path' in pal.rest, particularly when using an absolute path to the target main program
- Standard library: composition.Search now returns absolute paths for all components, avoiding relative/absolute path duplicates
- Standard library: fixed a bug in parsing.Markdown which failed to close a style when the closing character was the last one on a line
- Standard library: fixed a bug in io.FileSystem which could fail to recursively delete a directory and its sub-directories
- Native libraries: fixed a bug in UDP native library which could report the incorrect content length for a received packet
v254 - 2022/04/29
- Compiler: improved compiler generation of native interface code, in most cases providing real offsets of each field in a data instance
- Compiler: added -dh command-line option to set (or override) the Dana 'home' directory
- Runtime: improved specificity of exception messages when failing to load a native library
- Standard library: added util.Compiler API, supporting compiler access from regular Dana code (compilation of source code from a char array, with the resulting object file returned as a byte array in memory)
- Standard library: added Loader.loadFrom() function, supporting loading a component direct from an object file in memory (such as one given by util.Compiler)
- Standard library: added adaptation support to more APIs, and first set of adaptation unit tests
- Standard library: fixed a bug in parsing.Markdown to accept both Windows and Unix-style line endings
v253 - 2022/03/11
- Language: added support for multi-dimensional arrays
- Language: added an array sub-range operator, dana.sub(), to gain a shallow copy of a sub-range of an existing array
- Runtime: fixed a crash when using asynchronous calls against dynamic proxies
- Runtime: fixed a potential crash when cleaning up an object that has asynchronous calls running
- Standard library: added stats.Matrix API for basic matrix operations
- Standard library: added os.RWLock API to support read/write locks
v252 - 2022/01/28
- Runtime: fixed a potential crash when using dynamic proxies, which could establish a malformed type in the global type table
- Native libraries: redesigned native library API to simplify most operations
v251 - 2022/01/07
- Compiler: fixed a potential error in failing to automatically assign 'local' (non-store) status to local function parameters, when given an input variable to that parameter for which one of the possible values was 'null'
- Runtime: fixed a potential crash when trying to call a function on a lang.Morph object which is from an unwired required interface (and so has no actual type)
- Runtime: added exception messages to IntUtil/DecUtil 'fromString' methods in cases where there is no numeric value to parse in the given string
- Runtime: added exception message to IDC.initOject() in case no interface of the given type exists on the component
- Runtime: fixed a potential crash when using IDC.callInterface() if the parameter types provided do not match the actual types expected
- Runtime: improved safety of memory allocation for large arrays
- Runtime: threads launched with object functions are now owned by the caller object, not the callee
- Standard library: added findDuplicates() and groupBy() functions to data.query.Search / SearchList
- Standard library: added getCoreCount() and getMemorySize() functions to os.SystemInfo
- Standard library: added package disambiguation to the docgen index page generator
v250 - 2021/11/14
- Language: added a new function to the App interface, App:setSourcePath(), which is supplied with the launch path of the component on which App:main() is called
- Compiler: fixed a potential crash bug when using reflective field access followed by an array index operator
- Compiler: fixed failure to correctly parse decimal array constants
- Compiler: fixed failure to correctly parse array constants with a single cell
- Runtime: transfer state fields now have correct field names under type reflection
- Runtime: fixed a potential crash when trying to allocate arrays that are too large for the host system
- Standard library: added getDanaHome() function to System interface, to provide the Dana install directory (including if it has been set via the -dh runtime parameter)
- Native libraries: added a getDanaHome() function to the native library API, to propagate the real home path
- Native libraries: fixed a potential crash when passing impossible sizes into 'recv' of the TCP library
v249 - 2021/09/17
- Language: added a size-agnostic dec rounding operator, via dana.round()
- Runtime: directory-based program launch now works relative to the current directory
- Standard library: added getFullPath() function to io.FileSystem, to resolve fully-qualified file paths
- Standard library: added setDisabled() function to ui.ClickableObject, to support disabling UI widgets
- Standard library: updated ws.core web framework with support for higher concurrency, persistent connections, TLS connections, basic sub-domains, and nested modular pages
- Standard library: added basic intercept support to PAL framework
- Native libraries: fixed a bug in graphics library on Linux which failed to report correct mouse coordinates within a file drop event
v248 - 2021/08/27
- Compiler: fixed a potential crash bug when a local function has the same name as an interface-implementation function
- Runtime: improved general performance of instantiating data and array instances
- Runtime: fixed a potential crash bug in the garbage collector when unloading components
- Runtime: improved clarity of performance profiler print outs
- Standard library: added compress.Archive and compress.ArchiveWriter APIs, with zip, tar, and tar.gz implementations
- Standard library: added a data.StreamBuffer API to aid in writing/reading byte streams at different chunk sizes
- Standard library: added a time.TimeUnix API to aid in converting DateTime instances to/from Unix time format
- Standard library: added a time.TimeDOS API to aid in converting DateTime instances to/from MS-DOS time format
- Standard library: added utility programs in app package: zip, tar, targz, gzip
v247 - 2021/07/18
- Compiler: fixed a bug in assign-by-field-name parsing for data types declared in a component implementation file
- Runtime: programs can now be launched by specifying only their directory / containing package, rather than explicitly specifying the App component
- Runtime: fixed a potential crash bug in the native library api.decRef function when called from a background thread
- Standard library: added file drop support to GUI framework
- Standard library: fixed multiple bugs in pal.Assembly when adding or removing components to the available pool
- Native libraries: fixed a bug in audio library which could crash on generating a track-finished event
- Native libraries: fixed a bug in graphics library which could fail to render window content after graphics mode changes
v246 - 2021/06/25
- Runtime: garbage collector now avoids following sub-fields with no cycles, for further speed improvements
- Runtime: added a performance profiler, via command-line option -pp, to help diagnose performance issues
- Standard library: added a UTF-8 string encoder/decoder, in encoding.StringUTF
- Standard library: upgraded ui.TextField to support UTF-8 text
- Standard library: docgen now prints a warning by default for any element without a documentation string
- Native libraries: added unicode support to Windows clipboard implementation
v245 - 2021/06/11
- Runtime: fixed a potential crash bug in stopevent when the corresponding event queue has no entries
- Standard library: (re)added context menus to GUI framework, compliant with Dana's reference-passing rules
- Standard library: added a drop-down hint menu option to GUI text field widget
- Standard library: added a GUI checkbox widget, in ui.CheckBox
- Standard library: added GUI scrollbar widgets, in ui.ScrollBar
- Standard library: added a GUI scroll-pane widget, in ui.ScrollPane
- Standard library: added a GUI list widget, in ui.List
- Standard library: added getMS() function to time.Calendar, for quick timespan calculations
- Native libraries: reworked graphics library on Mac OS to operate with new Big Sur signing restrictions
v244 - 2021/05/14
- Language: added rclone operator, which recursively clones an entire data structure
- Language: added delink operator, which recursively sets reference fields to null for an entire data structure
- Language: added isset operator, which checks if an optional function parameter was given a value by the caller
- Runtime: fixed a bug in which exception stack traces may not be printed properly from a non-main thread
- Runtime: fixed a bug in which 'throw' operations may not have correctly unlocked a mutex before exiting the function
- Standard library: added barcode-style graphs to the chart package
- Standard library: added a command-line parameter parser in util.ParamParser
- Standard library: added a Markdown parser, and HTML converter, in parsing.Markdown / parsing.MarkdownToHTML
- Standard library: added decimal places optional parameter to data.DecUtil:makeString
v243 - 2021/03/21
- Language: added nocycle annotation for data type definitions, to inform the garbage collector that instances of a given type will never have reference cycles (in cases where the compiler cannot automatically infer this)
- Runtime: reduced general memory consumption of stack frames
- Runtime: improved garbage collection performance by automatically avoiding cycle detection on data types where possible
- Runtime: runtime now reads from the environment variable DANA_SP to check for system-wide search paths
- Runtime: added a new parameter -spo which sets search paths and also ignores DANA_SP
- Standard library: removed the 'examples' package, the concepts of which are now covered elsewhere in documentation
v242 - 2021/03/05
- Compiler: added a warning when an array initialisation size is provided at the same time as array initialisation data (in which case the compiler ignores the size)
- Compiler: compiler no longer considers variables of 'char' type to be integers for automated int-to-string associative function conversion within string literals
- Runtime: fixed a set of potential crash bugs during runtime runtime adaptation under high multi-threading
- Standard library: PAL framework now supports dynamic addition, removal, and update of components in the available pool
- Native libraries: os.Run now properly unpacks the actual result of a child process execution on Linux (but this value is limited by the OS to 8-bits)
v241 - 2021/02/12
- Language: function parameters can now be declared as optional, using the opt keyword
- Language: data fields can now be set by name in their construction operation
- Language: components implementing an interface subtype must now use a non-semantic-variant as a required interface for unimplemented functions; use of semantic variants for this purpose creates ambiguous dependency graphs
- Compiler: compiler now provides an error message if an implementation of an interface function declares its parameters as 'store' when the interface function definition does not
- Compiler: fixed a potential crash bug when compiling '~x' in locations without a preceding operator
- Runtime: fixed a potential system hang during runtime adaptation under high multi-threading
- Runtime: fixed a potential crash during system shutdown when multiple threads are running in the 'main' object
- Standard library: added AES-CBC and AES-GCM symmetric encryption APIs, in sec.crypto
- Standard library: added RSA asymmetric encryption (OAEP) and digital sign/verify APIs (PSS) in sec.crypto
- Standard library: added a simple RSA key pair generator API in sec.crypto
v240 - 2021/01/22
- Compiler: local function parameters are automatically set to 'store' if they're only ever called with store-able actual parameters
- Compiler: fixed in bug in the automated local variable store tracker algorithm, when using dynamic reflective array constructions
- Runtime: corrected runtime protection on assigning some local parameters to global variables
- Native libraries: fixed a potential crash bug in the graphics library when a program cycles between different fonts
v239 - 2020/12/18
- Compiler: fixed a potential crash on x86-32 systems in the store tracker algorithm when compiling multi-level field accesses
- Compiler: fixed a potential memory explosion when compiling code that creates circular linked lists
- Runtime: added a memory check mode, via the -mc option, to report memory leaks
- Standard library: added a data.StringBuilder API to help construct multi-part strings efficiently
- Standard library: added a set of secure hashing APIs in sec.hash (SHA1, SHA2, SHA3)
- Standard library: added a more general random value generator in util.Random, which can generate int, string, and dec values
- Native libraries: fixed a set of bugs in the SSL/TLS library
v238 - 2020/09/25
- Runtime: enhanced general robustness to out-of-memory cases
- Runtime: reduced general memory consumption
- Runtime: fixed a potential crash when using recursive type definitions in reflection operators
- Runtime: fixed a potential crash during system shutdown
- Runtime: added checks to dynamic data/array instantiation, to ensure template operand is of type lang.Type
- Native libraries: fixed a crash bug in the user interface library on 32-bit Intel-based platforms
v237 - 2020/07/31
- Language: dana.serial can now serialise entire arrays of primitive type, and can directly serialise one selected field of a data instance
- Language: updated the way dynamic proxies work, to better match recent language changes
- Compiler: fixed a bug which could compile arithmetic expressions incorrectly if involving a literal and a sub-int4 variable
- Compiler: fixed a bug which could yield an incorrect index for a function using Type.[field] notation
- Compiler: fixed a potential crash when compiling an array index access of a non-array item
- Runtime: improved speed of garbage collector by up to 3x
- Runtime: fixed a potential memory leak in dynamic proxy usage
- Runtime: fixed a potential memory leak in loading / unloading components
- Runtime: fixed a memory leak in event sink startup
- Runtime: fixed a potential crash when unloading components
- Runtime: fixed an error in logical ownership of objects following adaptation (affecting reference-passing soundness checks)
- Runtime: fixed a bug on 32-bit x86 systems in which exceptions from some instructions could fail to exit the function call
- Standard library: the built-in pal.Assembly module now unloads components that are not in use
- Standard library: the built-in PAL framework now runs the managed application in its main thread
v236 - 2020/06/05
- Language: changed dana.getByteArrayOf to just 'dana.serial', which is both simpler and more descriptive
- Compiler: compiler now uses automated checks on whether local variables can be assigned to global variables without needing explicit 'store' status; in most cases 'store' is no longer needed except in function headers
- Compiler: compiler now provides a warning if an assignment may break store/local assignment rules
- Compiler: components can now provide multiple interfaces of the same type, with different semantic variants
- Compiler: fixed a potential crash when compiling expressions with multi-level field accesses
- Runtime: fixed a potential memory leak in loading / unloading components
- Standard library: added post method to net.http.HTTPRequest
- Standard library: fixed a concurrency bug in compress.Compressor:gzip which could cause a segfault in the zlib native library under multi-threading
- Standard library: added an audio playback API, in io.audio.AudioOutput, with decoders for WAV, FLAC, MP3, and OGG (using miniaudio library)
- Standard library: added a bitmap image encoder/decoder implementation in media.image
- Native libraries: fixed a potential crash bug in the file system library on Linux under high concurrency
v235 - 2020/05/15
- Language: further enhanced robustness of 'store' checks
- Compiler: fixed an issue in which the compiler should allow automated upgrade to 'store' for parameters to a constructor, where the constructor returns into a local variable
- Runtime: fixed a potential crash bug when using System.getSearchPaths()
- Runtime: fixed a potential adaptation-related crash bug with stateless components which are adapted mid-call
- Runtime: fixed a potential general crash bug under multi-threading on OS X
- Standard library: added horizontal chart variants for bar / box plots in stats.chart
- Standard library: net.Socket and net.TLS now both inherit from net.Stream
- Standard library: added a simple SMTP client API, in net.mail.SMTP
- Standard library: default implementations of net.TCPSocket and io.File now auto-close when destroyed
- Standard library: refactored media.image.ImageEncoder to read from/write to File objects
- Standard library: added a getIndex function to data.adt.List
- Standard library: added a flush function to io.File
v234 - 2020/04/24
- Language: added explicit runtime checking for reference-passing patterns that violate adaptation soundness
- Language: added 'store' function parameter qualifier to support controlled exceptions to parameter-passing reference soundness
- Language: added hasInterface function to lang.IDC, to check if an object supports a given secondary interface
- Language: reworked callInterface function on lang.IDC, so that it returns the value directly in a container data instance (the previous parameter-based version worked by circumventing the read-only language rule)
- Language: added fully automated garbage collection for all unmanaged memory (see documentation for details)
- Compiler: fixed a bug on Windows in which package paths didn't always need to be case-sensitive (the language requires case-sensitivity)
- Compiler: fixed a potential crash bug when passing literal null into sinkevent
- Standard library: reworked data.adt.Stack to have the more common push/pop API
- Standard library: enhanced general robustness of CSV parser to different formatting
- Standard library: fixed a bug in the UI library which could crash when a window object no longer had any references
- Standard library: added a simple API for TLS/SSL (currently using OpenSSL), in net.TLS, to support secure HTTP
Release notes:
/releasenotes/234v233 - 2020/01/31
- Language: removed IDC.getInterface, and replaced with IDC.callInterface, which is safer under adaptation
- Language: replaced dynamic variable field index lookup syntax with standard library API (util.TypeUtil)
- Language: added support for static type field index lookup of functions
- Compiler: fixed a bug which could fail to reserve enough registers when accessing an array index from a function call result, causing undefined behaviour
- Runtime: fixed a bug on Windows in which the runtime could load the same dependency multiple times with .\\ in a path
- Standard library: added util.TypeUtil API to replace dynamic field lookup syntax on instances
- Standard library: reworked UI toolkit to expose the framework layer to the programmer, which must now be directly initialised and driven
- Standard library: UI toolkit now works on Mac OS
v232 - 2019/12/13
- Compiler: fixed a bug when using typeof on a literal fixed-size array type, which would report the type as a dynamic array
- Compiler: fixed a mutex bug on Windows, which could in some cases incorrectly lead to deadlock through normal mutex usage, when a mutex contains complex conditions
- Compiler: fixed a mixed integer/decimal arithmetic bug which could fail to accurately convert a decimal arithmetic result to its integer form in some conditions
- Compiler: fixed a bug which would incorrectly parse ^= syntax, causing undefined behavior
- Compiler: fixed a crash bug when trying to compile a non-'.dn' file
- Runtime: fixed a potential crash when using IDC.getRequires()
- Runtime: fixed a bug in hasTransferState which would always return 'true', reducing adaptation speed in some cases
- Standard library: added an init() function to lang.Proxy, for (optional) instantiation notification in constructor-less interfaces
- Standard library: added a round() function to util.Math
- Standard library: added a chart library to the stats package, with bar graphs, box plots, etc.
- Standard library: added an SVGCanvas API, which draws any graphical object as an SVG image
- Standard library: added a way to specify the RESTful port of pal.rest on the command line, and pass parameters through to the sub-program
- Standard library: modified the data.csv.CSVParser API to be generic to File objects, and added a write document function
- Native libraries: fixed a segfault in the clipboard library on Linux where no x11 system is available
v231 - 2019/10/04
- Runtime: fixed a potential crash when rapidly adding / removing dynamic proxies at runtime
- Runtime: fixed a potential crash under runtime adapation with rapid object construction and destruction over a required interface being adapted
- Runtime: fixed a potential concurrency issue when loading multiple components in different threads
- Native libraries: MySQL driver now works on Mac OS X
v230 - 2019/09/14
- Language: introduced the interface lang.Proxy, which can act as a generic provided interface to which any required interface can be connected
- Language: introduced the interface lang.Morph, which can act as a generic required interface which can be connected to any provided interface
- Language: added support for dynamic event emission
- Language: added support for dynamic function calls
- Language: native libraries are now fully compatible with standard event system mechanics
- Compiler: fixed a potential crash when compiling an if/else block followed by a mutex block
- Compiler: recuded native stack frame / register size growth for deeply nested function calls and array constructions
- Compiler: fixed an issue on Raspberry Pi in which very large array constructions would fail to properly compile
- Runtime: fixed a bug which would fail to report exceptions that occured in IDC calls
- Runtime: improved memory efficiency of objects
- Runtime: added a command line flag to disable exception printing
- Standard library: added an InterceptEvents interface, which receives notifications about intercept status, supporting dynamic proxies
- Standard library: added a new function to IDC, adoptObject, which aids in supporting the runtime injection and removal of dynamic proxies
v229 - 2019/08/02
- Language: dynamic field name checks now return lang.Field.NOT_FOUND rather than throwing an exception, allowing them to be used in conditionals
- Compiler: fixed a confusing error message when trying to automatically convert the result of arithmetic expressions into a string using the makeString associative function
- Runtime: fixed an error in how lang.Type was represented in the runtime, which could fail to properly parse dynamically-constructed types
- Runtime: enhanced the specificity of exception messages for malformed type errors in dynamic-type-constructed entities
v228 - 2019/07/26
- Language: the IDC type is now a sub-type of Object
- Language: most component-related operations, including wiring and pause/resume for adaptation, are now functions on IDC
- Language: the Thread type is now a sub-type of Object
- Language: the interface query syntax :> and :< have been removed, with specific functions on IDC to do this
- Language: moved all language types into a new package 'lang', which also includes the old types reflect.Type and events.EventData
- Language: reworked lang.Type so that function and event elements are of type data, but with flags to distinguish them
- Language: function parameter names are now available under reflection
- Compiler: fixed a potential crash when parsing an empty string variable expression
- Standard library: fixed a concurrency bug in ui.Window, which could miss a close event within waitForClose()
- Standard library: added setAutoBind function to the System API, allowing the programmer to control whether or not the VM will automatically bind VM-offered default dependencies
v227 - 2019/05/31
- Language: added associative functions as a standard way to execute a function on a data type, including primitive types
- Language: added makeString as a default associative function for string expansion
- Compiler: a general warning is now provided if the DANA_HOME environment variable is not set
- Standard library: added a CREATE mode to io.File, which erases a file's contents if it already exists
v226 - 2019/04/05
- Language: added associative functions as a standard way to execute a function on a data type, including primitive types
- Language: added makeString as a default associative function for string expansion
- Compiler: package search system is now case-sensitive on Windows, avoiding confusing errors when moving between Windows and Linux
- Compiler: fixed a bug which could cause a thread to hang in cases where a break-statement would jump out of a mutex block
- Runtime: fixed a potential crash when trying parse infinity as a decimal value
- Runtime: added stack overflow detection and exceptions to object initialisation functions, preventing a possible crash when components have circular dependencies and use auto-instantiated required interface objects
- Runtime: added the working directory of the Dana process as a default search path for native library loading, useful when a system is being executed by a meta-composer
- Standard library: io.File implementations no longer permit seeking past the end of a file
- Standard library: added semantic variant listings to docgen so that interface variants can be easily found
- Standard library: added stats.StatCore, a library of basic statistical functions including means, variance, and percentiles
v225 - 2019/02/09
- Language: added associative functions as a standard way to execute a function on a data type, including primitive types
- Language: added makeString as a default associative function for string expansion
- Compiler: fixed a potential crash when trying to compile an interface function call to which 'null' is passed as an actual parameter and 'int' is the formal parameter
- Compiler: fixed a confusing error message which could report an 'error on line 0' for auto-instantiated required interfaces if a package path contains a type name; a specific error message is now generated for package paths which contain a type name, as the compiler is unable to disambiguate package path elements from types in certain cases
- Compiler: fixed a potential intermittent error on Windows which could fail to properly set a type recursion flag
- Compiler: fixed an error in parsing multiple different semantically-tagged object constructors
- Runtime: fixed a potential crash when instantiating an object which implements a sub-type, and internally requires its super-type when that super-type has no implementing component or is otherwise not yet wired
- Runtime: fixed a potential crash when instantiating an object during adaptation
- Runtime: added the working directory of the Dana process as a default search path for native library loading, useful when a system is being executed by a meta-composer
- Runtime: fixed a potential crash caused by a race condition during object destruction, which could cause a component to be unloaded before an object sourced from that component has complete its own cleanup
- Runtime: fixed an error in how the binary not operator was performed for larger integer sizes
- Standard library: updated pal.rest system to support semantic interface variants
- Standard library: added support for JPEG image load/save, via media.image.ImageEncoder:jpg
- Standard library: added support for gzip file compression/decompression, via compress.Compressor:gzip
v224 - 2019/01/11
- Language: named required interfaces are now instance state, rather than static state; this simplifies the structural mechanics of system composition and increases flexibility
- Compiler: reworked type parsing system for recursively composed types
- Runtime: fixed a potential bug with decimal arithmetic when multiplying negative fractions
- Standard library: added a graphical text field for text input
- Standard library: added a simple UCB1 implementation
- Standard library: added a simple K Means clustering implementation
v223 - 2018/11/16
- Language: added a stopevent operator to remove an object from an event sink
- Language: repeated entries are now disallowed in event sinks
- Compiler: fixed an incorrect error message when compiling a component that doesn't implement available abstract functions (i.e., intending the abstract functions to be automatically included) outside of the central source tree
- Compiler: fixed a bug which would fail to compile a constructor call, with parameters, on a type identified by its full package
- Compiler: fixed a bug which would fail to compile a modify-assign operator on a complex array index expression
- Compiler: fixed a bug which would fail to compile an object function call which takes a dec parameter but is passed an int
- Standard library: added a PNG image read/write component
- Standard library: added an OS clipboard copy/paste component
- Native libraries: unbinding an accept()ing socket no longer causes an exception
v222 - 2018/09/21
- Language: types can now be referenced using their full package, supporting same-named types from different packages
- Compiler: fixed a potential crash when trying to compile a function declared outside of a component
- Compiler: fixed a potential crash when trying to compile a string variable marker followed by a syntax token
- Compiler: fixed a misleading error message when trying to assign to an array index of a non-array object type
- Compiler: fixed a misleading error message when a type with the same name was defined twice in the same source file
- Compiler: added an error message for direct assignment of incompatible data/object types via construction (when the compiler can unambiguously detect that the assignment would fail)
- Runtime: fixed a bug in 'clone' of a data item with IDC fields, which would corrupt the IDC field types in the copy
- Standard library: reworked Canvas interface to avoid exposing the low-level Window API
- Standard library: added a set of features to the UI system for window icons and image rendering
- Native libraries: graphical applications now work on Raspberry Pi
v221 - 2018/08/10
- Language: native libraries are now specified as a standard required interface qualified with 'native', so they can be seen as an explicit dependency of a component
- Compiler: fixed a bug which would fail to correctly assign a boolean value from an exclusive and/or result
- Standard library: added graphical library support for Ubuntu distributions
- Standard library: added a MySQL database driver, in data.mysql.MySQL
- Standard library: added JSONEncoder, which takes any Data instance and writes it to JSON using reflection
v220 - 2018/06/08
- Language: central source tree re-organised so that the 'resources' directory is now inside 'components'; this makes the central tree identical to any other project rather than being a special case
- Language: by default, event registrations now only take into account events from the given object type and its super-types, discounting events from sub-types
- Language: updated object type definitions to formally include event, function and state fields under reflection
- Language: adjusted dana.adaptConstruct() to the more general dana.constructObject()
- Language: added dana.getObjectState() and setObjectState() for extensible meta-handling of transfer state
- Compiler: added a check and error message if the compiler cannot write to the disk
- Compiler: fixed an error when parsing decimal arithmetic as part of a conditional expression
- Compiler: fixed a bug which would fail to provide an error message for an orphaned 'else' block
- Compiler: fixed a bug which could stamp a preceding '.' on a package path in the meta-data interface list
- Compiler: fixed a potential crash when compiling a mis-spelled inline operator like 'hastype'
- Runtime: fixed a crash when dynamically constructing a Data instance from a type with recursive fields
- Runtime: fixed a potential memory leak in dynamic data instantiation using reflection