HomeDemosForumProgramming Guide
v205 - 27th June 2017
  • Runtime: fixed a potential memory leak when an exception occurs on preparation of a function parameter
  • Runtime: added stack overflow detection, which limits the stack size to 1,000 frames, to prevent a crash on unbounded recursion
  • Runtime: added an exception to dana.rewire when a required interface is already wired to something and has not been paused
  • Runtime: improved exception message clarity from Loader.load if given a null path
  • Runtime: fixed a potential crash when trying to adapt away from a non-existing required interface wiring
v204 - 23rd June 2017
  • Compiler: improved hex literal parser to handle any size
  • Compiler: fixed a potential crash when trying to parse field member accesses through 'this'
  • Compiler: added a collection of errors and warnings for variables shadowing existing variables in other scopes
  • Compiler: reduced the size of compiled components on x86-64 platforms
  • Compiler: fixed a parsing issue in $() string expressions which would incorrectly consume square brackets
  • Compiler: improved general compilation speed, now between 5-20 times faster
  • Standard library: updated API of Stack and Queue to add a peek() function
  • Runtime: fixed a potential crash bug when trying to clone a very large array resulting in memory exhaustion
  • Runtime: fixed a potential system hang when declaring a global decimal variable and initialising it to an integer value
  • Runtime: improved general arithmetic speed, now 2-4 times faster, plus more general runtime performance enhancements
v203 - 13th May 2017
  • Replaced dana.notifyActive/Inactive operations with a general meta-level accessor of secondary interfaces; this increases the versatility of the adaptation model so that meta-programmers can add their own new concepts
  • Added dana.adaptConstructFree operation, to allow the meta-level creation of objects with fresh transfer state
  • Adjusted dana.pauseObject and dana.adaptDestroy to now require the IDC of the component from which the object was sourced, to protect privileged operations
  • Added dana.getComponent operation, to allow the meta-level to get the other side of a wiring
  • Restricted interface query operations so that they no longer accept an object instance as their left-hand-side (an IDC must be used instead); this prevents components from modifying their own wirings
  • Added dana.halt operation, to forcibly shut down an object from a meta-level (note this is currently experimental)
  • Standard library: Removed the destroy function from the AdaptEvents interface, as this was often confusing; instead added the AdaptDestructor interface which serves the same purpose, to allow alternative destructor logic in adaptation
  • Standard library: API of composition.Adapter adjusted so that a source component is needed for adaptObject
  • Fixed a compiler crash when using automated control flow nesting, with no body statement to auto-consume, at the end of a braced section
  • Fixed a compiler crash when using object instance function calls (on other objects) to initialise global variables
  • Fixed a compiler legacy issue which would parse 'cast'-like statements without errors (Dana has no cast operator)
  • Fixed a compiler bug which would fail to generate an error for unknown function call directives like 'async' (instead of 'asynch')
  • Fixed a compiler bug which would result in Thread array cells having the wrong type for assignment, causing type compatibility errors at runtime
  • Fixed a compiler bug which would fail to generate an error for instantiating objects or calling functions in global initialiser scope
  • Removed some legacy compiler restrictions on maximum structure or name sizing
  • Fixed a potential runtime crash when lifecycling a shared object instance and invoking function calls on that instance between multiple concurrent threads
  • Fixed a runtime bug which could fail to properly check data instance equality
  • Fixed a runtime memory leak when garbage collecting (unloading) components recursively
  • Fixed a runtime concurrency bug which could fail to associate a thread with its owner in time for 'join' to be called
  • Fixed a runtime bug which would fail to check if an uninitialised (null) thread variable is being manipulated
  • Fixed a runtime crash when comparing an array and non-array primitive type, where the latter is from an array index operator
v202 - 14th April 2017
  • Added ability for native libraries to generate exceptions, allowing for more detailed OS-level error information
  • Fixed a potential runtime crash under adaptation in which a component could be unloaded while in-use
  • Fixed a potential runtime crash under adaptation caused by an object destruction state mismatch
v201 - 31st March 2017
  • Completed v2XX update of the Raspberry Pi port of Dana (for Raspbian)
  • Fixed a compiler bug which could crash under some conditions if [] were used incorrectly in global scope
  • Fixed a compiler bug which could crash under some conditions if a requires clause was used with no following tokens
  • Fixed a compiler bug which could incorrectly detect a '$' in a string literal as being escaped when it isn't
  • Fixed a potential runtime crash when passing null values to dana.rewire()
v200 - 3rd March 2017
Warning: This update breaks source code and compiled code compatibility
  • Major redesign of Dana's interpreter -- all programs are between 2 and 4 times faster on average compared to v175
  • Dana is now multi-threaded at the OS level, allowing it to make better use of multiple processor cores
  • All Data types can now be used as mutexes in mutex(){} blocks
  • The Mutex type is now a subtype of Data and requires construction before use
  • Removed "Adapt" constructor concept, which was often confusing in how it worked; the AdaptEvents:active interface function should now be used to perform post-adaptation constructor tasks
  • Updated native library API to remove "deferred return" concept
  • Objects with active asynchronous threads are no longer destroyed until all threads terminate
  • Introduced the "fold" operator to exit a thread if its host object is being destroyed
  • Removed dana.getVPUType(); this functionality exists in the System interface
  • Removed dana.getHostType(); this functionality exists in the System interface
  • Removed dana.joinAllThreads(); this is now given by Dana's default behaviour to wait for all threads before object destruction
  • Wiring and rewiring of required/provided interfaces is now done using dana.rewire() instead of an overloaded assignment operator
  • Removed the composition.Loader interface and implementation; the interface Loader is now implemented by the Dana VM
  • Removed dana.load() and dana.unload() operations, both of which are subsumed within Loader.load/unload
  • Components are now automatically unloaded when they are no longer in use / referenced from anywhere
  • Fixed a compiler bug which could crash during compilation if specifying a required interface handle that is not of interface type
v175 - 21st November 2016
  • Added a copy function to io.FileSystem
  • Updated the net.http.HTTPRequest interface and implementation to be easier to use and more robust
  • Updated the data.StringUtil implementation to ignore null cells in implode, allowing easy removal of tokens
  • Fixed a compiler bug when accessing a data item member directly from the return value of a local function call
  • Added a compiler error when trying to declare a fixed-length array that is not of primitive or record type
  • Updated the compiler to use strict rules on semicolons, which were removed from the Dana syntax specification in v159
  • Improved the compiler error generated when trying to index a non-array type
  • Removed 'copy' notation concept from parameters and return types; instead the clone operator must be explicitly used
v174 - 11th November 2016
  • Fixed a runtime bug in which adding a cloned data item to an array constructed by value would fail to expand the array
  • Fixed a runtime bug where dynamically-created objects (using 'from') would fail type-checks for self-references via 'this'
  • Fixed a runtime bug in which arrays of objects created by value could internally reference the wrong identity of an object, causing irregularities during runtime adaptation
  • Fixed a compiler bug which could crash if a component declared a function from an interface that it does not provide
  • Fixed a runtime bug in which an object under construction could be destroyed due to its reference count reaching zero
  • Fixed a runtime bug in which using an invalid type after the 'from' clause of dynamic object construction could cause a crash
  • Removed 'copy' notation and concept from data item field definitions; this was confusing and frequently used incorrectly
  • Fixed a runtime bug in which data items that should be read-only were writable if referenced from a cell of a writable array
v173 - 30th September 2016
  • Fixed a compiler bug which failed to give correct line numbers when reporting that a function needs a return statement
  • Added a compiler error for functions declared within components that do not have an implementation / function body
  • Fixed a potential runtime crash, under intense multi-threading, when using a mutex that goes out of scope due the host object of the mutex variable being destroyed
  • Various updates to the standard library, including a simple version of our PAL framework for emergent software (see http://rex.projectdana.com for our research version!)
v172 - 9th September 2016
  • Fixed an occasional error when converting to decimal numbers from strings
  • Fixed an occasional memory leak in the lifecycle of objects with transfer state
  • Improved type checking around :> and :< operators
  • Fixed several runtime stability issues under intense multi-threading
v171 - 12th August 2016
  • Added an API call for native libraries to more easily get the scaling factor of a decimal type
  • Fixed a compiler bug which would sometimes fail to correctly assign decimal type codes
  • Fixed a compiler bug which would fail to correctly parse a mutex after an automatically-braced control block
  • Fixed some type compatibility mis-classifications in the compiler
  • Adjusted the compiler to use the fully qualified package path (instead of sometimes a relative path) on every provided and required interface in the DNIL info section
  • Various additions and enhancements to the standard library
  • Added full API documentation for the standard library (see programming guide)
v170 - 24th June 2016
  • Improved general runtime performance: most programs execute over 6x faster compared to previous versions
  • Various additions to the standard library to make reasoning over components easier
v169 - 10th June 2016
  • Fixed a runtime issue where references to data instances may not have their read-only status cancelled when passed back to their creator
  • Various fixes relating to decimal type assignment and integer-to-decimal conversion
  • Adjusted the way that array construction by value works for data instances, using shallow copies by default (the previous approach was counter-intuitive and confusing when performing reference checks)
  • Added a native interface generator to the compiler, making it much easier to write Dana native libraries
  • All existing native libraries have been released as open-source code
v168 - 20th May 2016
  • Adjusted the thread signal operator so that it doesn't throw a null pointer exception if the thread does not exist
  • Fixed a potential hang in the runtime adaptation protocol when adapting to and from the same component instance
  • Fixed a potential memory leak in destructor functions that were not properly cleaned up
  • Fixed a potential runtime crash in a particular set of conditions when a function call is forcibly terminated by an object being destroyed
  • Added compiler warnings when local or global variables shadow transfer variables
v167 - 15th April 2016
Warning: This update breaks bytecode compatibility
  • Fixed a potential crash in the runtime when unloading a component that still has live object instances sourced from it
  • Fixed a potential crash in the runtime when unloading a component that has created objects from other components that are still referenced
  • Corrected compile errors for assignment incompatibilities of object and data types
  • Fixed compiler stability issue when parsing a non-existent return type
  • Added a System interface, implemented by the runtime, to provide various useful pieces of information (including the list of search paths and the list of automatically linked interfaces on the runtime)
  • Added a warning when a thread becomes paused due to a lack of required interface connectivity when that required interface was not the runtime's responsibility to link
v166 - 31st March 2016
  • Fixed a bug in the automated linker with search paths, which could sometimes erroneously fail to locate a component
  • Constructed data items and arrays are no longer forcibly cleaned up when their creating component leaves the system
  • Added exceptions for division by zero
v165 - 18th March 2016
  • Fixed a potential crash bug in the runtime, caused by some forms of concurrency (particularly when using TCP sockets)
  • Improved compiler error description when a type is defined more than once
v164 - 11th March 2016
  • Fixed a compiler bug which would sometimes report the wrong line number in an exception that occurred after a conditional branch
  • Fixed a potential compiler crash when compiling empty mutex blocks in empty if statements
  • Fixed a potential compiler bug which could fail to provide an error for duplicate function declarations
  • Added a warning to the runtime for cases where a required interface results in a circular connection
  • Added a more general AdaptEvents interface to notify objects of when different adaptation events are happening
v163 - 26th February 2016
Warning: This update breaks source code compatibility (adaptation commands only) and bytecode compatibility
  • Improved general performance - most programs now run around 10% faster than in v162
  • Major update to the runtime adaptation system, including introduction of the composition.Adapter utility component
  • Fixed a potential compiler crash when using nested parenthesis
  • Fixed a bug in array construction by value when supplying a parameter originating from 'this'
v162 - 5th February 2016
  • Fixed a compiler bug which could crash if compiling a function whose member type does not exist or is not an interface
  • Fixed a runtime bug when constructing an array by content for a data type, where one of the inputs is an index from another data-typed array
  • Added options to the compiler and runtime to provide addition search path locations for interfaces / components
  • Added a basic mathematical utility library (util.Math)
v161 - 22nd January 2016
  • Fixed a compiler bug which could crash if compiling a statement that tries to use an object call on a non-object type
  • Added a dana.joinAllThreads operation to wait for completion of all threads belonging to this object instance
v160 - 15th January 2016
  • Improved compiler performance
  • Fixed a compiler bug in the syntax of asynchronously-launched object calls
  • Improved syntax handling of "return" statements for void functions
  • Fixed a compiler bug that failed to insert exception-abort checks in super() calls from constructors, which could cause unexpected behaviour
  • Simplified the standard adaptation procedure to avoid the need for 'commitTransfer'
  • Added a dana.isConnected operation to check if a particular required interface is currently connected
v159.159.48 - 18th December 2015
Warning: This update breaks source code compatibility
  • Major compiler update
  • Semicolons are no longer required at the end of lines
  • Array constants are now declared / initialised in the same way as regular arrays
  • Various compiler bugs fixed
  • Fixed an issue in the TCP native library on Linux which would block on recv() even after disconnect() has been called
  • Various updates to the standard library
v158.158.48 - 13th November 2015
  • Upgraded the decimal number system to support a wide range of bit widths (the same range as integers)
  • Fixed a potential runtime crash bug when checking the arrayLength of object types
  • Fixed a potential runtime crash bug when accessing array indices of fixed-size arrays
  • Fixed a potential compiler crash bug when parsing an array construction with no parameters
v157.157.48 - 30th October 2015
  • Added a decimal fraction type 'dec' with associated arithmetic operations and a new interface data.DecUtil
  • Fixed a compiler bug which failed to report an error for 'requires' or 'provides' elements that are not interface types
  • Fixed a compiler bug which failed to report an error when the same interface type was listed more than once in 'requires' or 'provides'
  • Fixed a potential runtime crash bug when an exception was generated by global variable instantiation
v156.156.48 - 4th September 2015
  • Fixed a compiler issue which would fail to correctly warn about certain return types
  • Fixed an issue with the garbage collector which could clean up a data structure that was about to be referenced (while this was technically correct behaviour, the result was counter-intuitive and so has been adjusted)
  • Fixed a potential crash bug in the file system native library when file creation fails
  • Fixed an OS X issue in which the runtime could erroneously occupy 100 percent of the CPU
v155.155.48 - 7th August 2015
  • Fixed a 'read-only' exception which failed to print a proper stack trace
  • Fixed an issue in the TCP and UDP libraries which would fail to bind to an 'ANY' address if IPv6 is not supported
  • Added an exception if the programmer tries to re-assign a required interface without first pausing that required interface (this could result in undefined behaviour)
  • Fixed a bug in which the compiler would sometimes fail to detect (and disallow) multiple same-named functions in the same interface
  • Fixed a bug in which the compiler would fail to warn the programmer about array index operations with no index operand
  • Fixed a bug in the runtime permission system for joining threads (which would sometimes incorrectly disallow a join operation)
  • Constants can now be declared within the type definitions of data and interfaces types, providing cleaner scoping at compile time
v154.154.48 - 24th July 2015
  • Fixed a bug in which variables of type Thread may not be properly cleaned up when going out of scope
  • Fixed a potential crash bug when unloading components with no static state
  • Fixed a crash bug in the TCP/IP native library for OS X
v153.153.48 - 10th July 2015
  • Fixed a bug in the runtime type system where some forms of type recursion could cause type incompatibility errors
  • Fixed a bug in which data that should be 'read only', due to having been passed between components, was sometimes writeable
  • Fixed a bug in the runtime type system where a 'null' value of a super-type could not be assigned to a sub-type
  • Fixed a bug in the file system native library which was unable to open a file for write access without erasing that file's content
  • Fixed a potential crash bug when comparing variables of type IDC with 'null'
v152.152.48 - 9th June 2015
  • Fixed a bug in the "run" native library on Linux, the performance of which would degrade linearly in successive calls
  • Fixed a memory leak in the TCP native library
  • Fixed a potential crash bug in the runtime when DANA_HOME is not set
  • Fixed a memory leak in the getByteArrayOf operation
  • Fixed a memory leak in the runtime adaptation system
  • Fixed various stability issues in the thread termination system during object destruction
v151.151.48 - 1st May 2015
Warning: This update breaks bytecode compatibility
  • Fixed a bug in which fields of type IDC would not be properly copied when cloning data type instances
  • Fixed a compiler bug in which the compiler could sometimes crash when reading certain unexpected symbols in type definitions
  • Improved stability of runtime adaptation under various multi-threading situations
  • Fixed a concurrency bug in the TCP native library which could cause unpredictable behaviour
v150.150.48 - 10th April 2015
  • Fixed a compiler bug which could print nonsensical strings when syntax errors are detected
  • Fixed a compiler bug which could attempt to parse the same resource file twice from a 'dnc .' command, causing unusual errors
  • Fixed a bug in the garbage collection system which could occasionally fail to clean up certain kinds of object
  • Fixed various potential crash bugs in native libraries which failed to check for 'null' inputs
  • Fixed a compiler bug which would return a non-null array from functions that explicitly return 'null' arrays
v149.149.48 - 27th March 2015
  • Fixed a compiler bug which caused unpredictable behaviour when using block comments inside line comments
  • Fixed a memory bug in the garbage collection system which could cause unpredictable behaviour
  • Fixed a memory bug in the automated linking system which could cause unpredictable behaviour
  • Fixed a memory bug in the runtime adaptation system which could cause unpredictable behaviour
  • Fixed a bug in the runtime data instance allocation system which could cause unpredictable behaviour
  • Fixed a bug in the runtime adaptation system which could cause the runtime to block indefinitely on dana.pause() when using asynchronously launched functions
  • Fixed an issue in the native library loading system which could cause stability problems when attempting to load the same library more than once
  • Fixed a compiler crash which could occur when constructing a dynamic array with an empty parameter list
  • Updated 'null object' exception to be more descriptive about the likely cause of the exception
  • First version of Dana with an official release for Mac OS X
v148.148.48 - 13th March 2015
  • Instance variables can no longer be declared outside of implementation scopes for multi-implementation components (the effect of doing this was counter-intuitive and confusing)
  • Fixed a compiler bug which allowed code in one implementation scope of a component to make local function calls to functions within a different implementation scope of that component, without having a reference to an instance of that other implementation scope
  • Fixed a runtime bug in which the linking system would fail to check for interface resolution relative to the directory from which Dana is executed
  • Fixed a runtime bug in which the linking system would fail to support local overrides of relative-package CST components (when a CST component specified a relative-path required interface, the runtime would not make a local override search from Dana's working directory)
  • Fixed a bug in which variables of type IDC could not be set to null and would never equate to null in equivalence checks
v147.147.48 - 27th February 2015
  • Fixed a runtime crash with recursive type definitions that involve arrays
  • Fixed a compiler crash for functions with missing return types
  • Fixed a compiler crash for array initialisations with no size value
  • Fixed a compiler crash for imbalanced brackets in if statement headers
  • Fixed a compiler crash when declaring an array and placing the square brackets after the array type rather than after the variable name
  • Fixed a bug in the file system API on Windows which would fail to report the existence of a directory if a trailing slash is used
  • Fixed a bug in the manifest resolution system when a manifest file is in the working directory of the command prompt from which the Dana runtime is executed
  • Fixed a bug whereby assigning an array type to "null" would fail
v146.146.48 - 14th February 2015
  • Fixed a compiler crash with very large strings
  • Fixed a runtime crash when using cast notation with data types
  • Fixed a concurrency issue in the TCP library whereby sockets could not be disconnected by the server during a recv
  • Added a simple library to run system (native OS) commands
v145.145.48 - 24th January 2015
  • Fixed an incorrect memory error when trying to allocate some kinds of arrays
  • Compiler now correctly identifies errors in nested variable declaration
v144.144.48 - 13th January 2015
  • Added four simple abstract data types; more to follow in future!
  • Fixed a crash bug when trying to allocate very large arrays
  • Compiler now provides warnings about improper use of "copy" status
  • Compiler errors about parameter / return types that use references are now properly formatted
v143.143.48 - 4th January 2015
Warning: This update breaks source code and bytecode compatibility
  • Auto-static / headline objects are now reference-based, matching all other object usage
  • Objects with no constructors can now be directly instantiated from within global variable scope
  • Components that implement multiple objects are now required to use implementation{} scopes
  • Threads are now owned by their creating object, rather than being pooled in the host component
  • Added support for (optional) object destructors, launched when an object is about to be destroyed
  • Added explicit reference-equality operators and made value-equality operator consistent for objects
v142.143.48 - 17th December 2014
  • Fixed a compiler bug which failed to flag more than one function existing with the same name
  • Fixed a compiler bug which failed to check the input types of array constructions
  • Fixed an issue in the file system API on Windows which reported the wrong year on 64-bit machines
v142.142.48 - 31st October 2014
  • Improved performance of constructing arrays from existing arrays
  • Improved integration of static arrays and constructed arrays
  • Fixed a font rendering issue in the UI subsystem with some older graphics adaptors
  • Fixed a bug in the wait/signal system which could wake a thread that was blocked for another reason
v141.141.48 - 3rd October 2014
Warning: This update breaks bytecode compatibility
  • Tweaked garbage collector to count all references, not just owner references; this enables the construction of arbitrary nested ADTs
  • Any remaining data items, arrays, and objects that have yet to be cleaned up are destroyed when their creating component leaves the system
  • Fixed an occasional crash bug during null checks against data items
v140.140.48 - 19th September 2014
Warning: This update breaks source code and bytecode compatibility
  • Major overhaul of the data representation model which is now organised into (i) constructed data items; (ii) constructed arrays; and (iii) simple records. This significantly simplifies the model while increasing its expressiveness and increasing general performance.
  • Constructed arrays and data items can be passed either by value or by reference between components (in the latter case they will be read-only)
  • Removed variable-sized arrays, pointers, and size casting (there are no overloaded operators in the language now)
  • Fixed an occasional crash bug in the GUI subsystem when closing a window
v138.138.48 - 8th August 2014
  • Fixed a bug with TCP native interface library on Windows (a "critical" error was printed on attempt to close a socket that had never been successfully opened)
  • Fixed a bug with the use of asynch:: after an if statement
  • Fixed a bug that prevented fields of type Thread from being properly copied between records when doing a whole-record copy
  • Fixed a bug whereby a variable of type Thread would fail to be properly reset inside a loop
  • Fixed an issue in the compiler which would fail to locate resource files if compiling a file whose path is specified using backslashes rather than forward slashes
  • Fixed a bug with the automated linking system which would fail to search for a matching component relative to the launch component's home directory
  • Adjusted the ui.Label interface to add a function setLabel(). Note the entire UI framework remains a very early prototype and needs serious work; this is not a focus of the core development team. Volunteers welcome to get involved here.
© Francis Research Ltd. 2017