Notes:
=======
Current Version: 6.1.0

### Changes since 6.0.0

 * Add namespacing support #290 @stephenberry
 * Add utf parsing support
 * cheatsheet.md updates
 * `add_class` utility support for scoped enums #306 @StanEpp
 * Parser optimizations #300 @niXman
 * Various JSON fixes #377 #400 #409 #371 @totalgee @dinghram @arcoRocks
 * Various cleanups, bugfixes and warning fixes and minor performance improvements
 * Support for C++17 compilers!
 * Support for UTF8 BOM #439 @AlekMosingiewicz @MarioLiebisch


### Changes since 5.8.6

*6.0.0 is a massive rework compared to 5.x. It now requires a C++14 enabled compiler*

#### Compiler Requirements

* MSVC 2015 or greater
* g++ 4.9 or greater
* clang 3.6 or greater

#### Breaking Changes

* Instantiating a ChaiScript object now, by default, builds the stdlib in
  * This was done to address the most common support issues of loading stdlib dynamically at runtime
  * If you want the old behavior, use include/chaiscript/chaiscript_basic.hpp
* Headers have been reorganized to fully separate stdlib/parser/engine from each other (some faster builds)
* Bootstrap functions no longer return a reference to the module added to (compile time savings)
* It's now no longer possible modify AST_Nodes (compile time, runtime efficiency)
* Function annotations no longer exist (simplifies code, reduces compile time, compile size)

#### New Features Added

* Modular optimization system; this can be accessed via the ChaiScript_Basic interface
* Execution tracing capability; also accessed via ChaiScript_Basic interface
* range-based for loops `for( id : container ) { }` (much better performance than other loop types)
* If-init expressions (ala C++17)
* Support for passing r-value references to functions
* Support for containing unique_ptr
* Add helpers for exposing enum classes to ChaiScript
* Allow typed ChaiScript defined functions to perform conversions on call #303

#### Improvements

* Compile time improvements
* Compile size improvements
* Significant runtime improvements (see "Modular optimization system")
* Significant parser improvements, both with parse-time and parser initialization time (Thanks @niXman)
* Fix type conversion to bool in conditionals

#### Improvements Still Need To Be Made

* File location tracking has been rewritten; this currently means error location reporting is not as good as it was
* Tracing capability needs to be tested and vetted

### Changes since 5.8.5
* Optimize away `return` statements in lambdas also
* Allow conversions to bool in conditionals
* Don't allow `class` statements inside of scopes
* Properly error when a dynamic object non-function member is called

### Changes since 5.8.4
* Fix order of operations for prefix operators
* Make sure atomics are initialized properly
* Remove parsing of unused prefix `&` operator

### Changes since 5.8.3
* Fix case with some numeric conversions mixed with numerics that do not need conversion

### Changes since 5.8.2
* Add support for reference of pointer return types

### Changes since 5.8.1
* Allow casting to non-const & std::shared_ptr<T>


### Changes since 5.8.0
* Fix parsing of floats to be locale independent #250
* Various warning fixes on various platforms


### Changes since 5.7.1
* Make all parser iterator operations range checked
* Parse in-string eval statements once, not once for each execution
* Fix parsing of operators (ie 1<-1 now parses)
* Fix variable scoping for functors
* Exception reduction
* Various object lifetime fixes
* Add JSON support for load / save #207
* Numeric overload resolution fixes #209 
* Fix long long #208 
* Add octal escapes in strings #211
* Fixed sizing of binary literals #213
* Added support for != with bool values #217
* Various value assignment vector fixes 
* Fixed broken hex escape sequences from @ChristianKaeser
* Multiply defined symbols fixes #232 @RaptorFactor
* Add add_class<Enum> helper #233  @vrennert
* Cheatsheet fixes #235 @mlamby
* Fix parsing of strings inside of in-string eval statements
* Allow lower-case global keyword
* Enable thread-local on MSVC (should be significant performance boost)


### Changes since 5.7.0
* Build time reduction
* Build size reduction
* Performance increases
* Fixed ~20 crash-bugs found with fuzzy testing #194
  * Let unhandled exceptions propogate to user
  * Report eval_error when break statement is not in loop
  * Fix handling of 0 length scripts closes #193
  * Don't crash on arity mismatch - Specifically affects the case where no overloads exist for a given function
  * Fix error printing for `bind` calls
  * Handle unexpected continue statement
  * Check arity during bind
  * Don't allow arith conversion on variadic function
  * Correct `bind` parameter match count
  * Add in expected Boxed_Value exception cases
  * Check access to AST, don't allow `;` in func def
  * Don't attempt arithmetic unary & call
  * Don't crash on 0 param call to `bind`
  * Catch errors during member function dispatch
  * Properly handle type of const bool &
* Automatic deduction of lambda type signatures
* Work with non-polymorphic parent/child conversions
* Move to codecov for coverage reporting
* Add `.at` method for Map objects
* Various corrections for support of move-only objects


### Changes since 5.6.0

* Significant code cleanups and reduction
* Smaller builds
* Faster compiles
* Less runtime memory usage
* ~2x faster runtimes
* biicode support
* method_missing feature added #164 @arBmind
* Generic objects with dynamic properties support
* Add ability to call functions contained in properties
* Add lambda captures
* Create [cheatsheet.md](cheatsheet.md) for all-in-one reference of features
* Fix support for libc++
* Eliminate clone of return value stored locally
* Eliminate 'return' statements when last line of function
* Reduce number of runtime exceptions occuring
* Reduce copies / moves of return values. 
* make `use` statement return value of last statement in file
* Add ability to access fixed array sizes
* Add support for scientific notation floating point literals #174  @totalgee


### Changes since 5.5.1
* Throw exception on integer divide by 0
* Add optional type specification to function declarations
   
  ```
  def func(int i, j, double k) {
    // i must be an int.
    // j can be anything
    // k must be a double
    // normal conversion rules still apply
  }
   ```
* Many minor fixes for compiler warnings
* Add support for `std::future` and `std::async`
  ```
  var f := async(someFunction);
  var f2 := async(someFunction2);

  // someFunction and someFunction2 are running in parallel now
  f.get();
  f2.get();
  ```
* Fully support r-value returns, supporting move-only objects and reducing object copies


### Changes since 5.5.0
* 30% performance increase
* Fix handling of object stack, resulting in greatly reduced memory usage
* Code cleanups

### Changes since 5.4.0
* 2x performance increase
* Significant code cleanups
* Throw exception if user attempts to call function on null object
* Allow user defined type conversions
* Fix object lifetime for nested function calls made at the global scope
* Fix returning of boolean values from function calls


### Changes since 5.3.1
* Decreased compile time and build size
* Make "reflection" module built in (losing some of the time / build size gains)
* Add new "class" syntax for ChaiScript defined methods and attributes see: [unittests/class.chai](unittests/class.chai) for examples
* Minor performance enhancements
* major to_string performance enhancements
* Provide API for retrieving registered type name #124
* Added strong reference to container to range object #132


### Changes since 5.3.0
* Add automatic conversion of arithmetic return types, following the same
  rules as conversion of arithmetic types when passing parameters
* Add automatic casting up the inheritence hierarchy when possible.
* Enable travis.ci testing
* Allow users to add globals from within script
* Various static analysis fixes
* Code modernization to C++11
* Unofficial support for Haiku added
* Fix #121 - Inability to compile on cygwin
* Formatting fixes and spelling corrections
* Apply "include what you use" https://code.google.com/p/include-what-you-use/
* Apply clang-modernize
* Various threading fixes
* Performance improvements

### Changes since 5.2.0
* Official support for MSVC with C++11. All major platforms and compilers are now support for C++11 release

### Changes since 4.2.0
* Enhanced unit tests
* Add `continue` statement, fix various use cases for `for`  loops
* Fix use of suffixed numbers in vector initialization
* Code cleanups
* Eliminate global data, which makes code more portable and thread safe
* Fix issue #79
* Merge pretty_print fixes from @mgee #82
* Compiler warning fixes for latest compiler releases
* Fix threading problems
* Fix linking error on MacOS Mavericks #88
* Allow non-const globals
* Make sure user cannot name a variable with `::` in it #91
* Fix various string / map / vector `size` and `count` calls for compilers which have weird overloads for them. #90 #93 #95
* Make module search path relative to the currently running executable
* Build and work with wstring windows builds
* fix for some new line cases in the middle of a vector initialization from jespada

### Changes since 5.1.0
* Add support for automatic conversion of arithmetic types when possible
  and when no ambiguous method dispatch exists.

### Changes since 5.0.0
* Fix sizing of numeric constants to match that of the C++ standard
* Add support for u,ll,l,f suffixes for numeric constants
* Siginificant improvement in error reporting

### Changes since 4.0.0
* Dropped boost in favor of C++11
* Separated out stdlib to make more options for compile time improvements

### Changes since 3.1.0
* svenstaro: Unused variables and CMake consistency fixes
* Added support for returning pointers from functions (#13)
* Compile with -pedantic (#9)
* Fix issues with multiple ChaiScript object types having the same attribute name (#15)
* Prevent variable redeclaration in same scope (#22)
* mgee: Boxed_Number improvements (#27)
* Support switch statements (#34)
* Fix uint16 comparions (#26)
* Add ability to add const_var globals in Module objects (#14)
* Add support for ternary operators ?:
* Add headers to CMakeLists so they show up in IDEs
* Add ability to get vector of defined objects and vector of defined functions
* Fix memory leak in cyclical references
* Clean up static analysis issues discovered
* Fix vector construction to be consistent with map construction
* Increased unit tests to 161
* Performance enhancements

### Changes since 3.0.0
* Numeric operations performance increased approximately 10x
* Looping operations performance increased up to 2x
* Engine start up time decreased
* Several parsing bugs related to index operators fixed
* Added full support for all C algebraic types: double, long double, float, int, long, char,
  uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t
* Enhanced support for capturing of exceptions thrown from ChaiScript in C++

### Changes since 2.3.3
* Code simplifications
* Fully integrate documentation with source code in doxygen style comments
* Unit tests increased from 114 to 137
* Automatic conversion between boost::function objects and ChaiScript functions 
* Many bug fixes
* Minor performance improvements
* Namespace reorganization to make end user code more accessible
* clang support
* VisualStudio 2010 Support
* Support for C++ base classes and automatic upcasting 
* Remove __ reserved identifiers
* Better code organization to reduce #ifdefs 
* clanmills: command line options for chai eval
* clanmills: parser cleanups and code reduction
* Function introspection and reflection 
* Correct function dispatch order to account for base classes and provide a defined order of dispatch 
* Predictable object lifetime that emulates C++ stack lifetime
* emarcotte: pkgconfig support
* standardize on method/member naming and indentation
* 64bit Visual Studio support
* Better support for const objects
* Drastic reduction of runtime exceptions - making debug builds orders of magnitude faster
* Support for platforms with no loadable module support
* Add helper macro for registering class 
